算法导论习题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)。

我的理解是这样的,不知道是不是正确的。

posted @ 2010-11-05 21:54  hailong  阅读(419)  评论(5编辑  收藏  举报