【问题标题】:Time Complexity for random call随机调用的时间复杂度
【发布时间】:2020-11-23 09:52:17
【问题描述】:

给定代码的时间复杂度是多少

int func(int n){
     int i;
     if(n<=0)
       return 0;
     else
     {
         i=random(n-1);
         return func(i)+func(n-1-i);
     }
       
 }

我认为是 O(n),但我该如何证明呢?

【问题讨论】:

    标签: c++ time time-complexity


    【解决方案1】:

    为了证明你的时间复杂度是O(n),你需要证明

    return func(i)+func(n-1-i);
    

    不会被调用超过 n 次。 只要每次调用时 n 至少减少 1(i 是一个 int,从 0 到 n,并且 n 每次减少 i+1),那么您将最多使用这条线 n 次。

    而且,因为没有递归调用,你的时间复杂度是 O(1),那么,使用递归调用,你的时间复杂度是 O(n),你将无法计算出更好的random 每次都可以给 0。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-10
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 2020-07-01
    • 2017-11-28
    • 2017-01-24
    相关资源
    最近更新 更多