Skip to content

时间复杂度、对数器、二分法与异或运算

常数时间的操作、固定时间的操作

算术运算, 位与运算,、自增、自检、比较、 寻址(偏移量)得到当前值, 数组的寻址操作

时间复杂度: 只关心量级,

异或运算 异或运算:相同为0,不同为1 同或运算:相同为1,不同为0

+1 为什么是或运算?

左移 == 乘2

程序设计=数据结构+算法

什么是算法

巧妇难为无米之炊, 巧妇 == 算法. 数据结构 == 米

  • 根据具体的问题,设计解决问题的具体流程。

  • 根据一定的条件, 对一些数据进行计算,得到需要对结果 (可以解决具体的问题)

  • 有设计解决的具体流程 (高斯算法)

  • 花费最少的时间完成需求,占据最少内的存完成需求被称之为优质的算法 (有评价这个算法的具体指标=时间空间复杂度)

  • 时间复杂度

  • 空间复杂度

位运算

逻辑位运算

位移位运算

& 位与如果相对应位都是1,则结果为1,否则为0(A&B),得到12,即0000 1100
| 位或如果相对应位都是 0,则结果为 0,否则为 1(A | B)得到61,即 0011 1101
^ 异或如果相对应位值相同,则结果为0,否则为1(A ^ B)得到49,即 0011 0001
〜 取反按位取反运算符翻转操作数的每一位,即0变成1,1变成0。(〜A)得到-61,即1100 0011
<< 左移按位左移运算符。左操作数按位左移右操作数指定的位数。

简单理解成 左移几位就相乘了几
A << 2得到240,即 1111 0000
>> 右移按位右移运算符。左操作数按位右移右操作数指定的位数。A >> 2得到15即 1111
>>>按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。A>>>2得到15即0000 1111

^ 异或 == 无进位相加

异或运算就记成无进位相加 : 二进制的相加 同样的一批数异或得到的结果值一定是一样的 0^n == n n^n == 0 // 解释: 二进制的无进位相加

异或运算 A ^ b 满足交换率和结合率 前提: 同一块内存 ^ 运算会变成 0

位与运算 A & A 取反+1 的结果 =

位图

压缩空间,

一个int 占4个byte 一个byte占4bit,

时间复杂度

可达性分析:

理解成树结构-》 找子树或者叶子结点 都能够找得到

Java

  • 值传递
  • 不会认内存地址, 就看自面值
  • 和引用传递
  • 会认内存地址

因为java只有一种传递参数的方式:值传递。 在值传递中,实参的值被传给形参,方法体内对形参的任何赋值操作都不会影响到实参。 对形参的任何赋值操作都不会影响到实参,但是对于形参的字段,或者元素(假如形参是一个数组)的赋值操作会影响实参。 map在put 的时候, key 如果是基本类型+string类型, 默认是按照字面值, 如果是自己定义的对象, 是按照引用查找 引用传递 在map中只会存在引用地址, 值传递 对于原方法是不可见的 引用传递对于原方法是可见的(A方法定义了一个 obj 传递给B方法, B方法对Obj做了修改是可见的)

二进制

计算机中表示负数: 正数的二进制 -1, 取反

参考

waitingresult.com