📜  门| GATE CS 2013 |第31章

📅  最后修改于: 2021-07-02 17:01:00             🧑  作者: Mango

考虑以下函数:

int unknown(int n) {
    int i, j, k = 0;
    for (i  = n/2; i <= n; i++)
        for (j = 2; j <= n; j = j * 2)
            k = k + n/2;
    return k;
 }
(A)

\Theta(n^2)

(B)

\Theta(n^2Logn)

(C)

\Theta(n^3)

(D)

\Theta(n^3Logn)

(A) A
(B) B
(C) C
(D) D答案: (B)
解释:

在这里,我们必须告诉返回的k值,而不是时间复杂度。

for (i  = n/2; i <= n; i++)
        for (j = 2; j <= n; j = j * 2)
            k = k + n/2;
    return k;

外循环运行n / 2次
内部循环运行logn次(2 ^ k = n => k = logn)
现在看内部循环中的k值,将n加到k(logn次),因为内部循环正在运行logn次。
因此,在内循环运行一次之后,k的值为n * logn。
因此,总时间复杂度是内部乘以外部循环复杂度(n表示外部,nlogn表示内部)n ^ 2logn。

看到http://geeksquiz.com/algorithms-analysis-of-algorithms-question-5/

该解决方案由Parul Sharma提供。
这个问题的测验