📜  门|门CS 2013 |第 31 题

📅  最后修改于: 2021-09-26 03:49:11             🧑  作者: 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
(乙)
(C)
(四)答案:(乙)
说明:这里我们要告诉返回的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 的值,当内循环运行 logn 次时,将 n 加到 k 上,logn 次。
因此,总时间复杂度是内部乘以外部循环复杂度,其中(n 为外部,nlogn 为内部)n*logn。

因此内循环运行一次后k的值为n^2logn。
见 http://geeksquiz.com/algorithms-analysis-of-algorithms-question-5/
该解决方案由Parul Sharma 提供。

这个问题的测验