- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
fibheaps背景与分析.pdf
6.854 高级算法
第 1 讲:2005 年 9 月 7 日 教师: David Karger
记录员:David G. Andersen, Ioana Dumitriu, John Dumagan, Akshay Patil(2003)
斐波那契堆
1.1 动机和背景
优先队列是理论计算机科学中一个经典的话题。我们能看到,斐波那契堆提供了一个快
速优秀的解决方法。寻找一个快速优先队列的应用最初是由两个网络优化算法引起的:最短
路径和最小生成树(MST) 。
1.1.1 最短路径和最小生成树
V l
已知图G (V , E ) , 和 E 分别为该图的顶点和边的集合;另已知一度量函数 :
E →R + 。我们分别定义最短路径和MST 问题如下:
最短路径:对于一个固定的源s ∈V ,找到一条包含所有顶点v ∈V 的最短路径。
最小生成树 (MST) :寻找一个长度最短的边集F E ,其中F 中包含所有的顶点。
注意到,除了源点未固定外,最小生成树问题等同于最短路径问题。所以,不用奇怪这
两种问题也能通过非常相似的算法来解决:Prime 算法能解决最小生成树,Djikstra 算法
能解决最短路径问题,算法如下:
1. 以图中的点为对象构造优先队列;
S S
2. 将最短路径中的源点 或最小生成树中的任意一顶点放入一队列中,为 赋值为 0;
3. 重复删除队列中具有最小键值的节点V ,并将其标记为‘已扫描’;
对于V 的每个邻居W :
如果W 不在队列中,且尚未扫描,为其赋上以下键值:
最短路径:key(V) +length(V →W)
最小生成树:length(V →W)
如果W 已在队列中,根据W 的当前键值按照上述方法计算W 能得到的最小键值。
1.1.2 堆
在点集上构造一个优先队列的经典方法是使用二项堆。因为堆在下述操作中有很好的时
间界限,故其也经常被使用:
插入 O( lg n)
删除最小值 O( lg n)
减小键值 O( lg n)
如果一个节点有n 个顶点和m 条边,则在Prime 和Djikstra 算法中执行插入和删除操
作均只需要O(n* lg n) 的时间。但是,在最坏情况下,当每次遇到一条新边我们都需要进行
一次键值更新的话,则需要执行m 次减小节点键值的操作,这种情况下将需要O(m* lg n) 的
时间。因为图是连通图,故有m n ,所以总的时间上界为O(m* lg n) 。
正因为m n ,应当降低 “减小节点键值”操作的代价。解决这一问题的一种简单方法
便是d −堆 。
1.1.3 D-堆
d −堆 能降低“减小节点键值”操作的代价,但同时它也将增加删除操作的代价。通
过用d −堆 代替二项堆我们便能实现这种代价转换。d −堆 中的分支数(任意节点的最大孩
子数)为 2 到d 。树的深度为log d (n) 。但是,“删除最小键值节点”操作必须遍历一个节点
的 所 有 孩 子 , 所 以 该 操 作 的 代 价 增 加 到 d* log d (n) 。 故 该 算 法 的 复 杂 度 为
O(n*d* log d (n) +m* log d (n)) 。选择最优的d m / n
文档评论(0)