试图计算算法的运行时间

时间:2015-02-01 17:10:18

标签: c++ algorithm runtime big-o time-complexity

我有以下算法:

for(int i = n; i > 0; i--){
    for(int j = 1; j < n; j *= 2){
        for(int k = 0; k < j; k++){
            ... // constant number C of operations
        }
    }
}

我需要计算算法的运行时复杂度,

我很确定外循环运行O(n)次,中间循环运行O(log(n))次,内循环运行O(log(n))次,但我不是这样确定无疑。

运行时复杂度的最终结果是O(n^2),但我不知道如何。

希望有人可以给我一个简短的解释,谢谢!

1 个答案:

答案 0 :(得分:5)

对于每个i,第二个循环通过2的幂运行j,直到它超过n:1,2,4,8,...,2 h ,其中h = int(log 2 n)。因此,最内部环路的主体运行2 0 + 2 1 + ... + 2 h = 2 h + 1 -1次。并且2 h + 1 -1 = 2 int(log 2 n)+1 -1,即O(n)。

现在,外循环执行n次。这给出了整个事物O(n * n)的复杂性。