认识时间复杂度
常数时间的操作
一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。时间复杂度为一个算法流程中,常数操作数量的一个指标。常用O(读作big O)来表示。具体
来说,先要对一个算法流程非常熟悉,然后去写出这个算法流程中,发生了多少常数操作,
进而总结出常数操作数量的表达式。在表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果为f(N),那
么时间复杂度为O(f(N))。评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的实际运行
时间,也就是“常数项时间”。
tip1
常数操作
1.1 如arr[i], 直接查找,不需要依次查询
1.2 不因为样本量变化 执行时间固定 : + - * /非常数操作
2.1 非常数操作:如链表第 i 位置的值,不固定时间,通过指针一个一个找。
tip2
1. 算法问题 功能=流程设计
2. 算法设计: 1. 数据本身的变化; 2. 项目的要求;
3. 位运算 >> (带符号右移); >>> (不带符号右移)
0 0 0 . . . . 0 1 1 0 0 0
第一位是符号位