一、概念
(1)频度:一个语句在算法中被重复执行的次数。
(2)问题规模的函数T(n):算法中所有语句的频度之和,
(3)O的含义是T(n)的数量级
(4)最坏的时间复杂度:最深层循环内的语句执行最大次数的情况下,算法的时间复杂度。
(5)最好的时间复杂度:最深层循环内的语句执行最少的次数情况下,算法的时间复杂度。
二、计算与规则
注意:本文中logn表示以2为底的n的对数。
关于时间复杂度的判别标准的解释:
由于一般程序由成百上千行代码组成,想要测试记录每一条语句所执行的次数不切合实际,时间复杂度这一标度的主要意义是从数量级上判断一个算法的运行效率。
在分析一个算法的时间复杂性时,有两个规则:
加法规则:
(1)T(n)=T1(n)+T2(n)= O(f(n))+O(g(n))=O(max(f(n),g(n)))
解释:下面两个图所示的代码,第一张图的算法规模为T1(n),第二张为的算法规模为T2(n),这个主函数和test函数是在用一个test.c文件中,问题规模是T(n),所以所求的时间复杂度就是从这两个问题规模的O()函数下表示的最大的数量级的函数。
(2)T(n)=T1(n)*T2(n)=O(f(n)*g(n))
解释:以上面第二张图所示的为例子,嵌套的for循环问题的规模就成了两个for循环执行次数的乘积。
(3)常见的时间复杂度的大小排序
O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
三、王道题解(写一部分有代表性的)