我一直试图弄清楚如何为K路合并实现以下算法。
Algorithm:
1)Initialize an array of size n*k.
2) Initialize a min heap of size k, to hold the smallest element of each array.
3) Add the smallest element from the minHeap into the output array.
4)Move the next element from the array from which the min element was derived onto the heap. // How would one implement this?
5) Repeat step 4 until all the arrays are empty and the minHeap is empty.
我已经能够实现除算法的第4步以外的所有算法。如何跟踪从中提取最小元素的数组?
答案 0 :(得分:2)
尝试将元素和数组保存在pair中。元素将是键,数组(指向它的指针)将是值。配对应该可以通过它的键进行排序 当您从堆中提取最小的一对时,您将该对中的键作为所需的元素,该对中的值将是包含该元素的数组。
重要提示:根据您正在使用的语言,不要将数组复制为值,而只保存指向它们的指针(在C ++中说出来)或其引用(即爪哇)。