算法导论习题6.5-8“K路已排序链表合并成一个链表”
问题描述:请给出一个时间为O(nlgk)、用来将k个链表合并为一个链表的算法。此处n为所有输入链表中的元素总数。(提示:用一个最小堆来做k路合并)
解答:
(1)把k个链表的第一个元素放入数组A,利用数组A建立最小堆。时间复杂度是lg(K);
(2)在返回A[1],在数组中寻找到之后,插入新链表;
(3)然后移除A[1],heap_size-1,在把剩下的排成最小堆;
(4)重复步骤(2)直至heap_size==0;
步骤(2)进行了K次,每次的时间复杂度是lgK,所以总共的时间复杂度为O(nlgK)。
我的理解是这样的,不知道是不是正确的。