这种递归算法的复杂性是什么

时间:2018-04-13 22:53:02

标签: time-complexity code-complexity

如何计算像这样复杂的递归算法的复杂性 在这种情况下,什么是复杂的东西(0,n)

void something(int b, int e) {
     if (b >= e) return;
     int a = 0;
     for(int i=b; i < e; i++)
     a++;
     int k = (b+e)/2;
     something(b, k);
     something(k+1, e);
     }

我试图分析这个算法并认为它的复杂性是n * ln(n),但仍然无法获得正式的证明。

1 个答案:

答案 0 :(得分:1)

最初,循环将运行(e-b)次,它将自己称为 2次,但将循环的大小减少一半

因此,((e-b)/2)将运行2次迭代;一次由(b,(b+e)/2)再次由((b+e)/2+1,e)

同样,两次迭代将再次调用自己2次,但将迭代长度减少一半。

所以`((e-b)/ 4)将运行4次,依此类推。

递归树的高度为log(b-e),(每个节点有2个孩子)

所以,time complexity = (b-e) + 2*((b-e)/2) + 4*((b-e)/4) + .....(log(b-e) times)

此表达式的计算结果为(b-e)*log(b-e)

因此,时间复杂度= O(nlogn)