怎么计算时间复杂度
来源:互联网 发布:淘宝上办的证是真的吗 编辑:程序博客网 时间:2024/04/28 09:53
怎么计算时间复杂度呢?我从网上找了好多,说得都不太清楚,我现在都没全部弄明白,有哪个大神懂的教教我吧……
虽然没有全会,但是从百度上找了些例子,可以参考着算……
常见的算法时间复杂度由小到大依次为:
Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)
概括一下,一般时间复杂度有如下规律:
for三层循环的 --------------------- o(n^3)
for两层循环的 ------------------- o(n^2)
for一层,另外一层折半的或者o(n)内归并的 ---------------------- o(nlogn)
直接折半的 ----------------------------- o(logn)
线形扫描的 ------------------------------ o(n)
上面是常用的一些算法的最直观的判辨方法,另外,
只有循环嵌套时,时间复杂度才升高;简单的o(m)+o(m)结果仍然是o(m)
O(1)
Temp=i;i=j;j=temp;
以 上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。如果算法的执行时 间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。
O(log2n )
i=1; ①
while (i<=n)
i=i*2; ②
解: 语句1的频度是1,
设语句2的频度是f(n), 则:2^f(n)<=n;f(n)<=log2n
取最大值f(n)= log2n,
T(n)=O(log2n )
解: 语句1的频度是1,
O(n)
a=0;
b=1; ①
for (i=1;i<=n;i++) ②
{
s=a+b; ③
b=a; ④
a=s; ⑤
}
解: 语句1的频度:2,
解: 语句1的频度:2,