1.什么是时间复杂度?
时间复杂度也就是我们在数据结构和算法中,对于数据结构操作方法所耗费的时间和数据规模增大的变化趋势。我们根据这个变化趋势就可以不通过测试数据也能大概得到这个算法的执行效率,从而进行一个粗略的评估。
2.为什么要学时间复杂度?
我们在进行算法编码时如果没有进行时间复杂度的分析,往往只能通过事后分析法来用测试算法的效率,但是这个效率会受到一些外界因素的影响如程序运行的环境和进行测试数据规模的大小,都会影响到算法的执行效率,所以为了在编码前就能大概评估出一个算法的执行效率,更加有利于写出高效的执行代码。
3.时间复杂度都有哪些?
4.思维导图(第一次画,笔记不知道为什么导图不能展示出来?)
5.推导一个稍微难一点的 logn
i=1;
while (i <= n) {
i = i * 3;
}
我们假设执行k次跳出循环,那么就有3^k=n
根据高中所学对数知识就得到log3^3^k=log3^n 最后得到k=log3^n,如果把3换成其他同理可以推导出k=logc^n
根据换底公式log3^n=log2^n/log2^3=log2^n*1/log2^3=log2^n*log3^2=C*log2^n
所以O(log3^n)=O(C*log2^n)即 O(Cf(n)) = O(f(n)),常数C可以省略,所以log3^n=log2^n
所以我们直接忽略掉底数,统一表示为 O(logn)。