intcal(int n){int ret =0;int i =1;for(; i < n;++i){
ret = ret +f(i);}}intf(int n){int sum =0;int i =1;for(; i < n;++i){
sum = sum + i;}return sum;}
整个 cal() 函数的时间复杂度是,T(n)=T1(n)*T2(n)=O(n*n)
二、几种常见时间复杂度实例分析
主要是几种多项式时间复杂度
1.O(1):代码如下
int i =8;int j =6;int sum = i + j;
一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是Ο(1)。
根据复杂度分析方法,第三行代码是循环执行次数最多的。
所以,只要能计算出这行代码被执行了多少次,就能知道整段代码的时间复杂度。
从代码中可以看出,变量 i 的值从 1 开始取,每循环一次就乘以2。当大于 n 时,循环结束。
实际上,变量 i 的取值就是一个等比数列。如果我把它一个一个列出来,就应该是这个样子的:
所以,我们只要知道 x 值是多少,就知道这行代码执行的次数了。通过 2x=n 求解 x,x=log2n
所以,这段代码的时间复杂度就是 O(log2n)。
这段代码的时间复杂度是多少?
i=1;while(i <= n){
i = i *3;}
根据上面的分析思路,这段代码的时间复杂度为 O(log3n)。
总结:不管是以 2 为底、以 3 为底,可以把所有对数阶的时间复杂度都记为 O(logn)。
因为O(log3n)=O(C * log2n)可以互相转换。
而在采用大 O 标记复杂度的时候,可以忽略系数,即 O(Cf(n))=O(f(n))。
注:归并排序、快速排序的时间复杂度都是 O(nlogn)