用链表建堆

Leguroky 2010-07-19 08:55:28
我在网上查不多这方面的资料,我能想到的,都是以快速排序方法为基础来实现合并、查找、插入等操作,大家有更好的方法吗?
...全文
91 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kindlucy 2010-07-21
参考算法导论的 二项堆,对堆的合并的复杂度是O(lgn)
回复
Leguroky 2010-07-21
[Quote=引用 5 楼 aaa20090987 的回复:]

引用 4 楼 leguroky 的回复:
主要是找最大值,提出最大值(就像堆排序那样),还有就是两个堆的合并。


用一个左偏树就行
[/Quote]
这里仅仅是讨论链表建堆,应该用不上左偏树吧。
回复
Leguroky 2010-07-21
[Quote=引用 9 楼 kindlucy 的回复:]没看到那呢……看来也只能这样了,多谢。
参考算法导论的 二项堆,对堆的合并的复杂度是O(lgn)
[/Quote] 0
回复
超级大笨狼 2010-07-20
链表要有索引,就想数组一样用。
i是根的话,2i+1右节点,2i左节点,参考算法导论前几章排序的部分建堆的办法。
有下降操作,可以保证堆的顺序。
回复
AAA20090987 2010-07-20
[Quote=引用 4 楼 leguroky 的回复:]
主要是找最大值,提出最大值(就像堆排序那样),还有就是两个堆的合并。
[/Quote]

用一个左偏树就行
回复
Leguroky 2010-07-20
主要是找最大值,提出最大值(就像堆排序那样),还有就是两个堆的合并。
回复
Leguroky 2010-07-20
[Quote=引用 6 楼 superdullwolf 的回复:]

链表要有索引,就想数组一样用。
i是根的话,2i+1右节点,2i左节点,参考算法导论前几章排序的部分建堆的办法。
有下降操作,可以保证堆的顺序。
[/Quote]
这样是不错,不过要是两个堆合并呢?怎么处理,尤其是两个堆没有交叉的时候?我能想到的也只有重复插入操作了,有更好的思路吗?
回复
flylee 2010-07-19
需要支持多大的数据量,有哪些功能需求
回复
aduxiaozi 2010-07-19
啥意思啊,链表建堆?
回复
低调走过 2010-07-19
友情帮顶
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告