跳转到内容

User:Cutekibry/沙盒

维基百科,自由的百科全书

配对堆是一种实现简单、均摊复杂度优越的数据结构,由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]

尽管这比其他的,例如能实现均摊时间减小元素斐波那契堆,这样的优先队列算法更差,在实践中配对堆的表现仍然很不错。StaskoVitter[4] Moret和Shapiro,[9] 以及Larkin、Sen和Tarjan[8] 进行过配对堆和其他堆数据结构的实验。 他们得出的结论是, 配对堆通常比基于数组的二叉堆D叉堆的实际操作速度更快,而且在实践中几乎总是比其他基于指针的堆更快,其中包括诸如[[斐波纳契堆]这样的理论上更有效率的数据结构。

操作

[编辑]

删除最小值

[编辑]

配对堆达成其时间复杂度段关键在于将被删除的堆顶的孩子按次合并这一部分。最初的方式是将子树从左到右两两合并为原个数一半的树,再从右往左将所有新树合并到一起。

参考文献

[编辑]
  1. ^ 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. 
  2. ^ Mehlhorn, Kurt; Sanders, Peter. Algorithms and Data Structures: The Basic Toolbox (PDF). Springer. 2008: 231. 
  3. ^ 3.0 3.1 引用错误:没有为名为Iacono的参考文献提供内容
  4. ^ 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 
  5. ^ 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. ^ 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 
  7. ^ 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. ^ 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 
  9. ^ 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