算法基础(二)

目录

评估算法优劣的核心指标:

对数器

二分

异或运算:


评估算法优劣的核心指标:

时间复杂度(流程决定)、额外空间复杂度(流程决定)、常数项时间(实现细节决定)

 

 非常数时间的操作:Linked List,执行时间跟样本量有关,就不是常数时间的操作

时间复杂度就是衡量流程中发生了多少次常数操作,最后拆分的操作每一步都是常数级别的操作,就可以了,如果数据量为N,看看基本动作的数量和N是什么关系。

一个问题的最优解:先满足时间复杂度最低这个指标之后,使用最少的空间算法流程。

对数器

 generateRandomArray 产生一个随机数组 

Math.random()  在[0,1) 上等概率返回任何一个小数,在计算上,这个区间是有穷尽的

(int) (Math.random() * N )  得到 [0,N-1]

 

二分

mid = (L + R) / 2  ===》 mid = L + (R -  L) >> 1

>> 表示带符号右移,运算比除运算快

无序,相邻不等的 依然可以二分 求局部最优解

先看0 位位置是不是局部最小, 再看N 在 N-1 位置上是不是最小,之后进行二分。

找到类似于“先下在上”的 这个趋势,即中间的位置就是最优解。所以无序数组求局部最优也可以使用二分法。

只要构建出有排他逻辑的就可以进行二分。

异或运算:

异或运算:相同为0,不同为1;异或运算可以记忆为:无进位相加!符号   ^   

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

异或运算的性质:

1)  0 ^ N == N    N ^ N == 0

2)  异或运算满足交换律和结合律

不用额外变量的情况下,交换两个数

a = a ^ b

b = a ^ b

a = a ^ b

这样运算必须保证内存是独立的,否则异或之后的结果是0

只有一种数,出现偶数次:将所有数异或起来,最后的结果就是这个数

把一个整型的数,提取出最右侧的1:N & (~N + 1)

有两个数出现基数次,其他数出现偶数次:最先异或所有得到 eor = a ^ b

1)找出最右侧的1,即可过滤出两个子数组,一边有a,另一边则是b;

2)异或任意一边得到a,a^eor 得到 b

数出二进制中1的个数:提取最右侧的1,抹掉最右侧的1:原数 ^ 最右侧的1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值