n ^ 2或n * lgn * lgn中哪个更有效?

时间:2018-10-03 23:08:07

标签: algorithm recursion time-complexity non-recursive

可以通过n^2次非递归算法解决的问题。可以使用n lg(n)操作中的递归算法将输入分为两个相等的部分,并使用lg(n)操作来组合相同的问题来解决相同的问题。 两种解决方案在一起。您认为哪种算法更有效?

编辑:基本情况:如果n = 1,则T(n)= 1。

这意味着nlgn lgnn^2更有效率。对吧?

1 个答案:

答案 0 :(得分:2)

有一个问题是,与“简单” O(n^2)版本相比,递归算法还需要完成多少工作。例如,在递归实现中检查n<32并在这种情况下使用O(n^2)子算法可能是个好主意。但是对于足够大的 nO(n*log(n)*log(n))最终将比O(n^2)快。

用于说明增长差异的表格(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
因此,基本上,即使您的递归算法的每个“步骤”有1000倍的运算量,当n超过一百万时,结果仍然更快。