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