极客时间-数据结构与算法之美
作者:互联网
时间复杂度表达的是代码执行时间随数据规模增长的变化趋势。
时间复杂度分析:
- 只关注循环执行次数最多的一段代码
- 总的时间复杂度等于量级最大的那段代码的时间复杂
- 乘法法则:
O(1)表示代码执行时间不会随着n的变化而变化,无论n多大;只要代码中不存在循环语句和递归语句;即为O(1);
O(logn)分析:
i=1;
while(i<n){
i=i*2;
}
算代码的执行次数,即2的x次方为n的时候停止计算,那么x=log2N,故复杂度为O(log2N);不用管底数是什么,所有的复杂度都是O(logn);为什么呢?因为对数都是可以互相转换的,
log3N=log32*log2N,所以O(log3N)=O(C*log2N),其中C为常数,可以忽略系数;按照乘法法则可以计算出O(nlogn);
O(m+n):有两个输入的数据时,加法法则不再适用,但是乘法依然可以;
空间复杂度表示算法的存储空间与数据规模之间的增长关系;
常见的空间复杂度是O(1) O(n) O(n2)
question:为什么数组下标从0开始计算?
answer:下标的定义是相对于首地址的偏移量offset,否则在计算的过程中CPU会多一次减法的运算;
寻址方式:a[k]_address = base_address + k * type_size
Topic:GCC中的编译器堆栈保护技术
栈区的增长方向是从高地址到低地址-栈顶地址<栈底地址;
标签:极客,复杂度,log2N,之美,地址,时间,数据结构,代码,乘法 来源: https://blog.csdn.net/runkui8905/article/details/88595884