priority queues.pptVIP

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
priority queues

Heapsort Chapter 5 Heapsort 用 downheap( ) 建 heap (例 3/7) 2 4 7 6 5 9 1 3 用 downheap( ) 建 heap (例 4/7) 2 9 7 6 5 4 1 3 用 downheap( ) 建 heap (例 5/7) 9 2 7 6 5 4 1 3 用 downheap( ) 建 heap (例 6/7) 9 4 7 6 5 2 1 3 用 downheap( ) 建 heap (例 7/7) 9 4 7 6 5 3 1 2 用 downheap( ) 建 heap 分析 (1) F(k) { if ( k n/2 ) return; F(2k); F(2k+1); downheap(k); } An equivalent and recursive implementation to construct a heap of size n: Use the following recursive subroutine and then call F(1). a[k] a[2k] a[2k+1] 用 downheap( ) 建 heap 分析 (2) Without loss of generality, assume that the heap is a complete binary tree; i.e. n = 2m? 1 for some integer m and let T(n) denote the number of comparisons needed to construct a heap of size n. According to the recursive implementation, we have: T(n) = 2 T(n/2) + 2 log n for n 1 = 0 for n = 1 Hence, T(n) = O(n). Heap sort ? construct(n) + n removes # comparisons = O(n log n) Implement change( ) delete( ) Indirect heaps and indirect priority queues How to implement join( ) efficiently? Notes 根據 queue 內項目的 key 值大小來決定該項目在 queue 的次序,key 值在 queue 內次序是由小到大或是由大到小都可以,視應用而定。這種結構有點像排隊時,權限高的人可以排在前面優先接受服務,因此,此種資料結構稱為 priority queue。 上述 priority queue 的結構特性,只是邏輯、抽象性的概念,在實做時不一定真的在資料結構內部將項目依 key 值排序,而且實際上也有好幾種實做方式,我們後面會再討論。 一般的 queue 可看成每一項目的 key 值為其進來的次序,值越小權限越大, stack 則剛好反過來,因此我們說 priority queue 為一般 queue及 stack 的推廣。 Priority queue 是相當多重要演算法內的主要資料結構,使用不同的實做方式可以得到不同的效率表現,例如解 minimum spanning tree 的 Prim’s algorithm (請參見 minimum spanning tree 一章的投影片)、 解最短路徑的 Dijkstra’s algorithm、Huffman code 等。 這裡介紹幾種 priority queue 上的操作,我們這裡只介紹副程式的名稱與大致功能。在實做時,參數的設定、功能的改變或增加、甚至名稱的變動,可依實際狀況與個人喜好,做不同的設定或改變。 這裡假設項目的 key 值越大權限越高。 Construct( ): 為建構一個大小為 n 的 priority queue。項目的 key 值可以是內定,也可以另定參數來設定。 Insert( ): 加入一個新的項目。 Remove( ): 回傳並刪除 priority queue 中權限最高之項目。此操作即相當於請出排在隊伍中排在最前面的人,並由 server 加以後續的服務。這個操作也有文獻命名為 Extract-Max。當然當 key 值越小代表權限越高時,就改命名為 Extract-Min。 Replace( ): 將 priority queue 內權限最高的項目 u 置換為新項目 v,只要 v 的權限較 u 來的低,亦即當 v 的權限較高時不做任何動

文档评论(0)

l215322 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档