algorithm - 提供一个操作简单的算法O(n^3 log n)?

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

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

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

最佳答案

一种方法是编写一个运行 O(n3) 次的外循环和一个运行 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 的值为 2k,一旦 k ≥ lg n,我们将得到 j = 2 k ≥ n.

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

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 指出的那样,您还可以通过对大小为 n33 log n) sup> 使用像快速排序或堆排序这样的算法。更一般地说,在大小为 n3 的输入上运行运行时间为 O(n log n) 的任何算法都会产生 O(n3 log n) 的运行时间。这使用了 log (n3) = 3 log n = O(log n) 的事实。

希望这对您有所帮助!

关于algorithm - 提供一个操作简单的算法O(n^3 log n)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18373064/

相关文章:

java - 为什么这个 O(N^2) 算法运行得这么快?

algorithm - big-O 时间复杂度中的指数分母(分数指数)从何而来?

algorithm - 如何使用环路查找算法找到欧拉路径?

c - C(gcc) 编译器中的递增和递减

c++ - 动态数值系列

java - Mergesort 实现.. 计算数组中的反转次数

algorithm - 对数函数求和的复杂度是多少

algorithm - 设计数据结构就像改进堆栈一样

寻找数量为 n 的最小精确平方数的算法

java - 乘法后得到最后 2 位数字