假设我们有一个虚构的合并排序,其中合并操作花费O(n^2)
而不是O(n)
。然后从主定理出发,我们有:
T(n) <= aT(n/b) + O(n^d)
T(n) <= 2T(n/2) + O(n^2)
从a < b^d
开始,我们发现:
T(n) = O(n^d)
T(n) = O(n^2)
然而,直观地说,由于每次递归都将对数字执行二次(n^2
)搜索,因此大O将是T(n) = O(n^2 logn)
也是有意义的。例如,在线性搜索的情况下,合并排序为O(n logn)
。有人知道为什么界限不是O(n^2 logn)
吗?这可能与每次递归的搜索减半有关吗?
发布于 2016-06-27 01:17:38
我们可以将正常合并排序所需的时间考虑如下(合并2个大小为n/2
的列表,合并4个大小为n/4
的列表,合并8个大小为n/8
的列表,依此类推):
2(n/2) + 4(n/4) + 8(n/8) + 16(n/16) + ... + n(1)
这可以简化为:
n + n + n + ... + n = O(nlogn)
对于您的新合并排序,我们有:
2(n/2)^2 + 4(n/4)^2 + 8(n/8)^2 + 16(n/16)^2 + ... + n(1)^2
这可以简化为:
n^2/2 + n^2/4 + n^2/8 + n^2/16 + ...
然后就变成了:
n^2(1/2 + 1/4 + 1/8 + 1/16 + ...) = O(n^2)
我希望这能吸引你的直觉。
https://stackoverflow.com/questions/38043988
复制