摘要: 问题描述:请给出一个时间为O(nlgk)、用来将k个链表合并为一个链表的算法。此处n为所有输入链表中的元素总数。(提示:用一个最小堆来做k路合并)解答:(1)把k个链表的第一个元素放入数组A,利用数组A建立最小堆。时间复杂度是lg(K);(2)在返回A[1],在数组中寻找到之后,插入新链表;(3)然后移除A[1],heap_size-1,在把剩下的排成最小堆; (4)重复步骤(2)直至heap_s... 阅读全文
posted @ 2010-11-05 21:54 hailong 阅读(419) 评论(5) 推荐(0) 编辑
摘要: 因为优先级队列是一种用来维护由一组元素构成的集合S的数据结构,执行的操作包含:对于最大优先级队列:insert(S,x)把元素x插入S,仍然保持最大优先级队列maximum(S)取得最大关键字的值,也就是优先级最高的extract_max(S):去的最大关键字的值并删除,剔除优先级最高的increase_key(S,x,k):在第i的元素上换成K并保持S的性质,是此元素优先级提高对于最小优先级队列... 阅读全文
posted @ 2010-11-05 17:08 hailong 阅读(1203) 评论(0) 推荐(0) 编辑
摘要: 根据书上的伪代码实现的最大堆,以及在最大堆基础上实现的优先级队列: 阅读全文
posted @ 2010-11-05 15:04 hailong 阅读(270) 评论(0) 推荐(0) 编辑