Я читаю CLRS и имею некоторые проблемы с упражнением 6.5-8.
Дайте алгоритм O (n lg k) -time для объединения k отсортированных списков в один отсортированный список, где n - общее количество элементов во всех входах списки. (Подсказка: используйте min0heap для слияния k-way.)
Решение, как говорят все,
1) постройте мини-кучу k-элементов, используя первый элемент из k-списков,
2) extract-min(), чтобы получить наименьший элемент из кучи и добавить его в список результатов,
3) выберите следующий элемент из того же списка, что и тот, который мы только что извлекли из кучи. Вставьте его в кучу и перейдите 2).
Я могу понять, что время O (n lg k), но я не получаю правильности выбора на шаге 3). Кажется очевидным, но есть ли какие-то формальные доказательства?