Чета CLRS и имах проблем с упражнението 6.5-8.
Дайте алгоритъм за O(n lg k)-време за обединяване на k сортирани списъка в един сортиран списък, където n е общият брой елементи във всички списъци с входове. (Съвет: използвайте min0heap за k-way сливане.)
Решението е, както всички казват,
1) изградете k-елемент min-heap, като използвате първия елемент от k списъка,
2) extract-min(), за да получите най-малкия елемент от купчината и да го добавите към списъка с резултати,
3) изберете следващия елемент от същия списък като този, който току-що извлякохме от купчината. Поставете го в купчината и отидете на 2).
Мога да разбера, че времето е O(n lg k), но не разбирам правилността на избора в стъпка 3). Изглежда очевидно, но има ли официално доказателство?