algorithm - 在虚构的归并排序示例中使用主定理进行渐近分析

标签 algorithm big-o mergesort asymptotic-complexity master-theorem

假设我们有一个虚构的合并排序,其中合并操作的成本为 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) .有谁知道为什么绑定(bind)不是 O(n^2 logn) ?这可能与每次递归时搜索量减半有关吗?

最佳答案

我们可以将正常合并排序所花费的时间想象如下(我们合并 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)

我希望这能引起您的直觉。

关于algorithm - 在虚构的归并排序示例中使用主定理进行渐近分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38043988/

相关文章:

c++ - 在给定每行按钮数的情况下查找需要多少行?

algorithm - 如何分类但不使用分类或聚类算法?

algorithm - block 语句的 "big-oh"

c - 递归 C mergesort 在使用管道/叉读取时挂起

sorting - QuickSort 用于排序部分 Mergesort?

Java归并排序实现

algorithm - 在拓扑排序的加权有向无环图上进行最长路径搜索,但有效路径的边数最大

performance - 证明时间复杂度函数的效率等级

algorithm - 分析具有递归 T(n) = T(n - 1) + T(n - 2) + T(n -3) 的算法?

algorithm - 在常数时间内复制一个字符串?