Таким образом, проблема состоит в том, чтобы объединить k отсортированных списков (предположим, что они отсортированы в порядке возрастания) в 1 список из n элементов, используя минимальную кучу. Теперь я нашел решение для него, но я не уверен, может ли он иметь время работы nlogk. Вот мой псевдокод, что вы, ребята, думаете?Алгоритм K-Way Merge. Будет ли это решение O (n log k)?
Algorithm kWayMerge(S)
t ← 0
Result ← ∅
while t ≤ n do
choosenHeap ← min(S1[1], … Sk[1])
t ← t + 1
Result[t] ← DeleteMin(choosenHeap)
end loop
end
Function DeleteMin(H)
Min ← A[1]
A[1] ← A[size[H]]
size[H] ← size[H] - 1
DownHeap(H, 1)
return Min
end
Function DownHeap(A, t)
c ← 2*t
if c > size[A] then
return
if c+1 > size[A] && A[c] > A[c + 1] then
c ← c + 1
temp ← A[t]
A[t] ← A[c]
A[c] ← temp
DownHeap(A, c)
end
В основном мое решение для поиска K списки и найти Min вороха с наименьшим значением корня и поместить его в результирующий массив. В основном внешний цикл в kWayMerge будет повторяться n раз за счет удаления всех элементов из k отсортированных списков.
Вы неопределенную функцию 'min'. Если он работает в линейном времени, чем ваш код работает в _O (k n) _. – kgeorgiy