📜  算法|算法分析|问题18

📅  最后修改于: 2021-06-29 19:30:03             🧑  作者: 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;
 }

上面函数的返回值是多少? (GATE CS 2013)

(一种) \Theta(n^2) (B) \Theta(n^2Logn) (C) \Theta(n^3) (D) \Theta(n^3Logn)

(A) A
(B) B
(C) C
(D) D答案: (B)
说明:在以下说明中,“ ^”用于表示指数:
外循环运行n / 2或Theta(n)次。
内部循环运行(登录)时间(请注意,每次迭代j均乘以2)。
因此,语句“ k = k + n / 2;”运行Theta(nLogn)次。
该语句将k的值增加n / 2。
因此k的值变为n / 2 * Theta(nLogn),即Theta((n ^ 2)* Logn)。这个问题的测验