用戶:Cutekibry/沙盒
此條目需要擴充。 (2018年4月13日) |
配對堆是一種實現簡單、均攤複雜度優越的堆數據結構,由Michael Fredman、羅伯特·塞奇威克、Daniel Sleator、羅伯特·塔揚於1986年發明。[1] 配對堆是一種多叉樹,並且可以被認為是一種簡化的斐波那契堆。對於實現例如普林姆最小生成樹算法等算法,配對堆是一個更優的選擇[2],且支持以下操作(假設該堆是最小堆):
- 查找最小值:返回堆頂。
- 合併:比較兩個堆頂,將堆頂較大的堆設為另一個的孩子。
- 插入:創建一個只有一個元素的堆,並合併至原堆中。
- 減小元素(可選):將以該節點為根的子樹移除,減小其權值,並合併回去。
- 刪除最小值:刪除根並將其子樹合併至一起。這裏有各種不同的方式。
配對堆時間複雜度的分析靈感來源於伸展樹。[1] 其刪除最小值操作的時間複雜度為O(log n),而查找最小值、合併和插入操作的均攤時間複雜度均為O(1)。[3]
確定配對堆每次進行減小元素操作的均攤時間複雜度是困難的。最初,基於經驗,這個操作的時間複雜度被推測為是O(1),[4]但Fredman證明了對於某些操作序列,每次減小元素操作的時間複雜度至少為。[5] 在那之後,通過不同的均攤依據,Pettie證明了插入、合併及減小元素操作的均攤時間複雜度均為,近似於。[6] Elmasry後來介紹了一種配對堆的變體,令其擁有所有斐波那契堆可以實現的操作,且減小元素操作的均攤時間複雜度為,[7]但對於原始的數據結構,仍未知準確的運行下限。[6][3]此外,能否使刪除最小值在均攤時間複雜度為的同時,令插入操作的均攤時間複雜度為,目前也仍未得到解決。[8]
儘管這比其他的,例如能實現均攤時間的減小元素的斐波那契堆,這樣的優先隊列算法更差,在實踐中配對堆的表現仍然很不錯。Stasko和Vitter,[4] Moret和Shapiro,[9] 以及Larkin、Sen和Tarjan[8] 進行過配對堆和其他堆數據結構的實驗。 他們得出的結論是, 配對堆通常比基於數組的二叉堆和D叉堆的實際操作速度更快,而且在實踐中幾乎總是比其他基於指針的堆更快,其中包括諸如[[斐波納契堆]這樣的理論上更有效率的數據結構。
操作
[編輯]刪除最小值
[編輯]配對堆達成其時間複雜度段關鍵在於將被刪除的堆頂的孩子按次合併這一部分。最初的方式是將子樹從左到右兩兩合併為原個數一半的樹,再從右往左將所有新樹合併到一起。
參考文獻
[編輯]- ^ 1.0 1.1 Fredman, Michael L.; Sedgewick, Robert; Sleator, Daniel D.; Tarjan, Robert E. The pairing heap: a new form of self-adjusting heap (PDF). Algorithmica. 1986, 1 (1): 111–129. doi:10.1007/BF01840439.
- ^ Mehlhorn, Kurt; Sanders, Peter. Algorithms and Data Structures: The Basic Toolbox (PDF). Springer. 2008: 231.
- ^ 3.0 3.1 引用錯誤:沒有為名為
Iacono
的參考文獻提供內容 - ^ 4.0 4.1 Stasko, John T.; Vitter, Jeffrey S., Pairing heaps: experiments and analysis (PDF), Communications of the ACM, 1987, 30 (3): 234–249, CiteSeerX 10.1.1.106.2988 , doi:10.1145/214748.214759
- ^ Fredman, Michael L. On the efficiency of pairing heaps and related data structures (PDF). Journal of the ACM. 1999, 46 (4): 473–501. doi:10.1145/320211.320214.
- ^ 6.0 6.1 Pettie, Seth, Towards a final analysis of pairing heaps (PDF), Proc. 46th Annual IEEE Symposium on Foundations of Computer Science: 174–183, 2005, ISBN 0-7695-2468-0, doi:10.1109/SFCS.2005.75
- ^ Elmasry, Amr, Pairing heaps with decrease cost (PDF), Proc. 20th Annual ACM-SIAM Symposium on Discrete Algorithms: 471–476, 2009, CiteSeerX 10.1.1.502.6706 , doi:10.1137/1.9781611973068.52
- ^ 8.0 8.1 Larkin, Daniel H.; Sen, Siddhartha; Tarjan, Robert E., A back-to-basics empirical study of priority queues, Proceedings of the 16th Workshop on Algorithm Engineering and Experiments (PDF): 61–72, 2014, CiteSeerX 10.1.1.638.5198 , arXiv:1403.0252 , doi:10.1137/1.9781611973198.7
- ^ Moret, Bernard M. E.; Shapiro, Henry D., An empirical analysis of algorithms for constructing a minimum spanning tree, Proc. 2nd Workshop on Algorithms and Data Structures, Lecture Notes in Computer Science 519, Springer-Verlag: 400–411, 1991, CiteSeerX 10.1.1.53.5960 , ISBN 3-540-54343-0, doi:10.1007/BFb0028279