n^2 和 n*lgn*lgn 哪个更有效率?

Which is more efficient n^2 or n*lgn*lgn?

一个非递归算法可以在n^2次内解决的问题。同样的问题可以在 n lg(n) 操作中使用递归算法来解决,将输入分成两个相等的部分,并在 lg(n) 操作中组合输入 两个解决方案在一起。你觉得哪种算法效率更高?

编辑: 基本情况:T(n) = 1 如果 n = 1.

这意味着 nlgn lgn 将比 n^2 更有效率。对吗?

与 "simple" O(n^2) 版本相比,您的递归算法需要做多少额外工作是个问题。例如,在递归实现中检查 n<32 并在这种情况下使用 O(n^2) 子算法可能是个好主意。但是足够大 nO(n*log(n)*log(n))最终会比O(n^2)快。

A table 来证明增长的差异(log 是以 2 为底的对数):
n n^2 n*log(n) n*[log(n)]^2 1000*n*[log(n)]^2 32 1024 160 800 800 000 1024 ~10^6 ~10^4 ~10^5 ~10^8 10^4 ~10^8 ~10^5 ~2*10^6 ~2*10^9 10^5 ~10^10 ~2*10^6 ~3*10^7 ~3*10^10 10^6 ~10^12 ~2*10^7 ~4*10^8 ~4*10^11
所以,基本上,即使你的递归算法的每个 "step" 有 1000 倍的操作,当你的 n 超过一百万时,结果仍然更快。