通过简单的操作提供算法O(n ^ 3 log n)?

时间:2013-08-22 06:23:28

标签: algorithm big-o time-complexity asymptotic-complexity

提供算法计算性能O(n 3 log n)。该算法应该只包含简单的操作。

如何解决这个问题?...我正在攻读计算机科学GRE。谢谢!

1 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是编写一个运行O(n 3 )次的外循环和一个运行O(log n)次的内循环:

for (int i = 0; i < n * n * n; i++) {
   for (int j = 1; j <= n; j *= 2) {
       // ... do nothing ... //
   }
}

请注意,内循环运行log n次,因为循环k次迭代后j的值为2 k ,并且一旦k≥lgn,我们将有j = 2 k ≥n。

另一种选择是编写一个递归函数,其运行时通过Master Theorem计算出O(n 3 log n)。一种方法是使一个函数对大小为n / 2的子问题进行8次递归调用,并且每次调用都可以使用Θ(n 3 ):

void silly(int n) {
    if (n > 0) {
        for (int i = 0; i < n * n * n; i++) {
            // ... waste time ... //
        }
        for (int i = 0; i < 8; i++) {
            silly(n / 2);
        }
    }
}

编辑:正如@Nuclearman所指出的,您还可以通过对大小为n 3的数组进行排序来获得运行时O(n 3 log n)使用像quicksort或heapsort这样的算法。更一般地,在大小为n 3 的输入上运行其运行时为O(n log n)的任何算法产生O的运行时间(n 3 log n)。这使用了log(n 3 )= 3 log n = O(log n)的事实。

希望这有帮助!