繁体   English   中英

合并排序中合并操作的复杂性

[英]Complexity of merge operation in merge sort

我正在阅读Cormen的算法简介。
我不明白为什么将n/k数组与每个元素中的k元素合并具有O(n*log(n/k))的复杂性。
我在这里缺少的是我们有n/k数组。 因此,我们必须使用O(n)上限执行n/(k-1)次合并。
但是,我们有一个对数,因此我想我对Merge复杂性的理解中缺少一些东西。

欢迎任何帮助。

假设您只能使用merge(a,b)合并两个数组,然后可以构建合并的“树”:

a    b      c     d
  ab           cd
       abcd

现在,确实使用此操作您确实在进行n/k - 1合并-但请注意,大多数合并都是用很少的元素完成的,每个数组的元素数明显少于n个。

如果仔细计算,您将获得:

2*(n/k)/2 * k + 2*(n/k)/4 * 2k + .... + 1*n

如果您做代数,您会注意到这确实是n*log(n/k)


顺便说一句,进行k路合并的另一种方法是持有大小为n/k的堆,并让其持有每个数组中尚未用尽的最小数目,并在迭代时-获得堆到结果数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM