在虚构的归并排序示例中使用主定理进行渐近分析
Posted
技术标签:
【中文标题】在虚构的归并排序示例中使用主定理进行渐近分析【英文标题】:Asymptotic analysis using the master theorem on a fictitious mergesort example 【发布时间】:2016-10-28 21:05:47 【问题描述】:假设我们有一个虚构的合并排序,其中合并操作花费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)
但是,直观地说,大 O 为 T(n) = O(n^2 logn)
也是有道理的,因为每次递归都会对数字执行二次 (n^2
) 搜索。例如,在线性搜索的情况下,归并排序是O(n logn)
。有谁知道为什么绑定不是O(n^2 logn)
?这可能与每次递归时搜索减半的事实有关吗?
【问题讨论】:
【参考方案1】:我们可以认为正常合并排序所花费的时间如下(我们合并 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)
我希望这能吸引你的直觉。
【讨论】:
但这并不能解释为什么 b = 2, d = 1 的情况是 O(n log n) @willywonkadailyblah:我的回答并没有试图解释主定理。它只是试图以直观的方式解释归并排序的两种变体的时间复杂度,以回答最初的问题“为什么用O(n^2)
而不是O(n^2 logn)
?”以上是关于在虚构的归并排序示例中使用主定理进行渐近分析的主要内容,如果未能解决你的问题,请参考以下文章