用链表建堆

Leguroky 2010-07-19 08:55:28
我在网上查不多这方面的资料,我能想到的,都是以快速排序方法为基础来实现合并、查找、插入等操作,大家有更好的方法吗?
...全文
161 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
啥意思啊,链表建堆?
饭fan有引力 2010-07-19
  • 打赏
  • 举报
回复
友情帮顶

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧