おそらく、この質問は以前に聞かれます。CLRS(2nd Ed)problem 6.5-8からのものです-
得マージに時間アルゴリズムをK 1つのソートされたリストの中にリストをソートし、N、すべての入力リスト内の要素の総数です。(ヒント:k方向のマージには最小ヒープを使用します。)
あるとしてリストをソートし、合計n個の値、私たちはそれぞれのリストが含まれていると仮定しましょうn個番号、また各リストのは、厳密に昇順にソートされ、そして結果はまた、昇順に格納されます。
私の擬似コードはこのように見えます-
list[k] ; k sorted lists
heap[k] ; an auxiliary array to hold the min-heap
result[n] ; array to store the sorted list
for i := 1 to k ; O(k)
do
heap[i] := GET-MIN(list[i]) ; pick the first element
; and keeps track of the current index - O(1)
done
BUILD-MIN-HEAP(heap) ; build the min-heap - O(k)
for i := 1 to n
do
array[i] := EXTRACT-MIN(heap) ; store the min - O(logk)
nextMin := GET-MIN(list[1]) ; get the next element from the list 1 - O(1)
; find the minimum value from the top of k lists - O(k)
for j := 2 to k
do
if GET-MIN(list[j]) < nextMin
nextMin := GET-MIN(list[j])
done
; insert the next minimum into the heap - O(logk)
MIN-HEAP-INSERT(heap, nextMin)
done
私の全体的な複雑さは。私は避けるためにどのような方法を見つけることができませんでした O (K )内のループを O (n個の)k個のリストから次の最小要素を見つけるためにループします。他の方法はありますか?アルゴリズムを取得する方法は?