[英]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.