k向合并的时间复杂度是多少?

时间:2018-11-04 03:39:04

标签: algorithm merge time-complexity mergesort

我正在尝试了解使用堆进行k合并的时间复杂性,尽管上面有大量文献可用,但我找不到能分解分析以使我能够理解的文献

Wikipedia article声称“在O(k)预处理步骤中,堆是使用标准的heapify过程创建的”。但是,堆插入为O(log(n)),find-min为O(1)。我们首先将每个数组的第一个元素插入堆中。这需要∑log(i)时间, i = 0 to k - 1O(klog(k))时间,这驳斥了Wikipedia的复杂性分析。 (实际上是O(log(k!))

然后我们删除min元素,并从数组中插入下一个元素 min元素最初来自何处。这需要O(1) + O(log(k))时间,我们需要重复n - 1次。 总时间:

O(klog(k)) + O(n - 1) + O((n - 1)log(k)) ≅ O(klog(k)) + O(n) + O(nlog(k))

维基百科声称:“总运行时间为O(n log k)”。怎么样?

0 个答案:

没有答案