自适应Fibonacci和配对堆
Adaptive Fibonacci and Pairing Heaps
摘要:
本文简要介绍了两种自适应堆数据结构和运行时间说明。
英文摘要:
This brief note presents two adaptive heap data structures and conjectures on running times.
机构、总结、中文摘要均由AI分析而来,可能存在错误,请以论文正文为准。
Adaptive Fibonacci and Pairing Heaps
Andrew Frohmader
本文简要介绍了两种自适应堆数据结构和运行时间说明。
This brief note presents two adaptive heap data structures and conjectures on running times.
机构、总结、中文摘要均由AI分析而来,可能存在错误,请以论文正文为准。
继续探索
Layered Heaps Beating Standard and Fibonacci Heaps in Practice
我们考虑设计堆的经典问题。标准的二进制堆在实践中比斐波那契堆运行得更快,但时间保证较差。在这里,我们提出了一种新类型的堆,分层堆,在实践中运行速度比标准的二进制和斐波那契堆,但渐近插入时间优于二进制堆。我们的堆是递归定义的,当使用递归深度1时,即堆的堆,运行时间加速最大。
The Violation Heap: A Relaxed Fibonacci-Like Heap
我们给出了一个优先级队列,实现了与斐波那契堆相同的摊销界限。也就是说,find-min需要O(1)的最坏情况时间,insert,meld和decrease-key需要O(1)的摊销时间,delete-min需要$O(\log n)$摊销时间。我们的结构是简单的,并承诺一个有效的实际行为相比,其他已知的Fibonacci类堆。我们构造的主要思想是传播秩更新,而不是在decrease键操作之后执行级联切割,从而实现宽松的结构。
Replacing Mark Bits with Randomness in Fibonacci Heaps
斐波那契堆是一种确定性的数据结构,它实现了具有最佳摊销操作成本的优先级队列。斐波那契堆的一个不幸的方面是,它们必须维护一个“标记位”,这只用于确保堆操作的效率,而不是正确性。Karger提出了斐波那契堆的一个简单的随机变体,其中标记位被硬币翻转所取代。此变体仍然具有插入、减少键和合并的预期摊销成本$O(1)$。Karger解释说,该数据结构预期delete-min的摊销成本为$O(\log s)$,其中$s$是堆操作的数量。我们给出了一个严格的分析Karger的随机斐波那契堆,解决Karger的猜想。具体来说,我们得到匹配的上,下界的$Θ(\log^2 s / \log \log s)$的delete-min的运行时。我们还证明了一个紧的下界的$Ω(\sqrt{n})$ delete-min的堆元素的数量$n$。用于证明此界限的请求序列也解决了Fredman关于级联切割是否必要的公开问题。最后,我们对这些堆进行了一个简单的附加修改,它为delete-min生成了一个紧凑的运行时$O(\log^2 n / \log \log n)$。
Fibonacci Heaps Revisited
斐波那契堆是一个经典的数据结构,它支持在对数摊销时间内执行删除操作,并支持在O(1)摊销时间内执行所有其他堆操作。我们探索这种数据结构的设计空间。我们提出了一个版本,与原来的以下改进:(i)每个堆是由一个单一的堆排序树,而不是一组树。(ii)每个减键操作只进行一次切割和一系列等级变化,而不是进行一系列切割。(iii)由算法完成的所有比较的结果都明确地表示在数据结构中,因此没有浪费。通过一个例子说明,在没有级联剪切或秩变化的情况下,原数据结构和新版本都不能达到预期的效率,解决了Fredman的一个公开问题.最后,我们说明了丰富的设计空间,提出了几种替代方法来做级联排名的变化,包括一个随机化的策略,以前提出的卡格。我们把对这些替代方案的分析作为有趣的开放问题。
Fast Fibonacci heaps with worst case extensions
我们专注于减少堆的开销,基于与最佳最坏情况行为的比较。本文的灵感来自严格斐波那契堆[1],其中G. S. Brodal,G. Lagogiannis,和R. E. Tarjan用DecreaseKey和Meld接口在渐近最优的最坏情况下实现了堆(基于键比较)。在文献[2]中,详细阐述了这些思想,并表明可以用从先前比较中丢失更少信息的策略来实现相同的渐近时间。在这些堆中,违规列表的重复会产生很大的开销。我们提出了简单的替代减少这种开销。它允许我们实现快速摊销的斐波那契堆,用户可以在变体中调用一些方法,以避免最坏情况的时间。如果他这样做,堆不会被转换为Fibonacci,直到调用方法的摊销版本。当然,我们可以一直调用最坏情况下的版本,但是由于保证会产生开销,如果我们不关注单独操作的复杂性,那么调用摊销版本是首选。我们已经展示了,我们可以实现完整的DecreaseKey-Meld接口,但是Meld接口对于这些堆来说并不自然,所以如果不需要Meld,那么简单的实现就足够了。由于我不知道需要融合的应用程序,我们将集中在noMeld变体上,但我们将展示这些更改也可以应用于融合,包括变体。文献[1]、[2]表明堆可以在指针机模型上实现。对于快速的实际实现,我们宁愿使用数组。我们的目标是减少指针操作的数量。通过指向秩列表的指针来维护秩将是不必要的开销。
Padovan heaps
我们分析了Fibonacci族的优先队列。本文受Violation heap [1]的启发,其中A. Elmasry保存一个指针来表示Fibonacci堆节点,同时实现与M的Fibonacci堆[2]相同的摊销边界。L. Fredman和R. E.塔扬不幸的是,作者强迫堆很宽,这违背了最佳堆原则。我们的目标是实现相同的结果,但堆要窄得多。我们遵循超级比较的原则,所以我们试图记住所有比较的结果,并且从不比较不能最小的元素。我们尽可能地推迟比较。其实我一直想分享超昂贵的比较原理的想法,帕多万堆的发现让我这样做。当然,节省一个指针并不是一个很大的目标,但是我希望所给出的推理和对结果堆的摊还分析值得发表。
A Comparison of Dijkstra's Algorithm Using Fibonacci Heaps, Binary Heaps, and Self-Balancing Binary Trees
本文描述了加权图中的最短路径问题,并研究了使用Dijkstra算法与Fibonacci堆,二叉堆和自平衡二叉树时发生的效率差异。使用这些算法变体的C++实现,我们发现最快的方法并不总是具有最低渐近复杂度的方法。对此原因进行了讨论,并与经验证据支持。
Improved Upper Bounds for Pairing Heaps
配对堆被证明有固定的摊销时间插入和合并,从而表明配对堆有相同的摊销运行时间的斐波那契堆的所有操作,但减少键。
Pure Pairing Heaps
研究提出纯配对堆,通过消除删除最小元素操作中的合并步骤简化配对堆。给出其操作的摊还时间界,与多遍配对堆匹配,除减小键值界外也与自调整堆下界相符。分析方法是分组分析,该方法也适用于惰性配对堆。
A Linear Potential Function for Pairing Heaps
本文给出了线性值域对堆的第一势函数。这意味着短操作序列的运行时间比以前已知的要快。它也比已知的唯一能给出插入的摊余常数摊余时间的势函数简单。
A Simpler Proof that Pairing Heaps Take O(1) Amortized Time per Insertion
配对堆是堆(优先级队列)的一个简单的“自调整”实现。在最坏情况下,将一个项插入到配对堆中或减少一个项的键需要O(1)时间,合并两个堆也是如此。但删除一个最小键的项目可能需要时间,在最坏的情况下,堆大小成线性关系。引入配对堆的论文证明了每个堆操作的摊销时间限制为O(log n),其中n是堆中的项目数或操作中涉及的堆,通过将每个删除操作的时间收取O(log n),每个操作的时间为O(log n)。后来Iacono找到了一种方法,将每次插入的摊销时间减少到O(1),将meld的摊销时间减少到零,同时为其他更新操作保留O(log n)的摊销时间边界。我们给出了一个简单的证明Iacono的结果与显着较小的常数因子。我们的分析使用配对堆的自然表示,而不是转换到原来的分析和Iacono的二叉树。
Pairing heaps: the forward variant
配对堆是一种经典的堆数据结构,由Fredman、Sedgewick、Sleator和Tarjan在1986年提出。这是显着的,因为它的简单性和它在实践中的出色表现。配对堆的“魔力”在于删除最小项后发生的重组。所得到的树集合被合并成两轮:从左到右的配对轮,然后是从右到左的累积轮。Fredman等人通过与展开树的巧妙对应表明,在大小为$n$的配对堆中,所有操作都需要$O(\log{n})$分摊时间。他们还提出了一个可以说是更自然的变体,其中配对和累积都在组合的从左到右轮中执行(称为配对堆的前向变体)。在这种情况下,与张开的类比就不成立了,对前向变量的分析也就没有定论了。在本文中,我们表明,插入一个项目和删除的最小值在一个前向变量的配对堆都需要摊销时间$O(\log{n} \cdot 4^{\sqrt{\log{n}}} )$。这是相对于Fredman等三十年前所显示的$O(\sqrt{n})$结合的第一次改进。我们的分析依赖于一个新的势函数,它跟踪堆中的父子秩差。
Pairing Heaps with Costless Meld
改进\cite{elm0}中的结构和分析,我们给出了配对堆的变体,该变体具有摊销的每合并成本为零(与\cite{elm0}中的$O(\log \log{n})$相比),并且对于所有其他操作具有相同的摊销界限。更准确地说,新的配对堆要求:每个meld没有成本,每个find-min和insert的O(1),每个delete-min的$O(\log{n})$,以及每个decrease-key的$O(\log\log{n})$。这些边界是任何自调整堆中最著名的,并且与Fredman证明的此类堆族的下限相匹配。此外,我们所做的更改使我们的结构比\cite{elm0}中的结构更简单。
Heaps Simplified
堆是一种基本的数据结构,广泛用于各种应用程序,包括最短路径和最小生成树算法。在本文中,我们将探讨基于比较的,摊销效率堆实现的设计空间。从考虑动态单淘汰比赛,我们得到了二项式队列,一个经典的堆实现,在一个简单而自然的方式。我们给出了四个等价的方式表示堆所产生的比赛,我们得到两个新的变种的二项式队列,一棵树的版本和一个通过版本。我们扩展了一次通过版本以支持密钥减少操作,获得{ \em rank-pairing heap}或{ \em rp-heap}。秩配对堆结合了斐波那契堆的性能保证和接近配对堆的简单性。与配对堆一样,秩配对堆由任意结构的树组成,但这些树是按秩而不是按列表位置组合的,并且在密钥减少操作期间,秩变化而不是结构变化级联。
Analysis of Smooth Heaps and Slim Heaps
光滑堆是最近引入的自调整堆[Kozma,Saranurak,2018],类似于配对堆[Fredman,Sedgewick,Sleator,Tarjan,1986]。光滑堆是作为Greedy BST的堆对应物获得的,Greedy BST是一种二叉搜索树更新策略,被证明是\emph{instance-optimal} [Lucas,1988],[Munro,2000]。光滑堆的几个自适应特性来自于这种联系;此外,光滑堆本身已经被证明是特定类别堆中的实例最优。然而,到目前为止,还没有对平滑堆的一般分析,只有以前的分析表明,当在\emph{sorting mode}中使用时($n$插入,然后是$n$删除-min操作),平滑堆在$O(n\lg n)$时间内对$n$数进行排序。在本文中,我们描述了一个更简单的变体的光滑堆,我们称之为\emph{slim heap}。我们给出了一个新的,自包含的分析光滑堆和超薄堆在不受限制的操作,获得摊销的界限,匹配已知的最佳界限的自调整堆。先前的实验工作已经发现,在各种设置中,配对堆在这类中主导其他数据结构。我们的测试表明,平滑堆和瘦堆与配对堆相比具有竞争力,在某些情况下表现优于它们,同时易于实现。
Hollow Heaps
我们引入空心堆,一个非常简单的数据结构,具有与经典斐波那契堆相同的摊销效率。除了delete和delete-min之外,所有堆操作都需要$O(1)$时间,最坏情况下也需要分摊时间;在$n$项堆上,delete和delete-min需要$O(\log n)$分摊时间。空心堆是迄今为止实现这一目标的最简单的结构。空心堆结合了两个新颖的想法:使用惰性删除和重新插入来进行减键操作,以及使用dag(有向无环图)代替树或树集来表示堆。惰性删除会产生空心节点(没有项的节点),从而为数据结构命名。
A Tale of Two Trees: New Analysis for AVL Tree and Binary Heap
在本文中,我们提供了新的见解和分析的两个基本的基于树的数据结构-AVL树和二叉堆。我们提出了两个简单的性质,给出了一个更直接的方法来关联AVL树的大小和斐波那契递归来建立AVL树的对数高度。然后,我们给出了一个潜在的基于函数的分析自底向上堆结构,以获得一个更简单和严格的界限,其最坏情况下的运行时间。
Efficiency of Self-Adjusting Heaps
针对自调整堆是否支持O(log log n)时间decrease-key操作的开放问题,本文证明slim堆和平滑堆的decrease-key为O(log log n),多遍配对堆为O(log log n log log log n),显著改进了现有边界且前两者的边界是紧的。
A rearrangement step with potential uses in priority queues
基于链接的数据结构,例如链表和二叉搜索树,具有许多公知的重排步骤,允许插入、删除和其他操作的有效实现。我们描述了一个重排原语设计的基于链接的,堆排序的优先级队列中的比较模型,如那些类似于斐波那契堆或二项式堆。在其最基本的形式中,原语重新排列堆有序的完美二叉树的集合。这样做提供了一种数据结构,可以控制这样一个集合中涉及的树的数量,特别是保持这个数量在元素数量上是对数。重排步骤是免费的摊销复杂性的观点(使用适当的潜在功能)。
Task-based Augmented Contour Trees with Fibonacci Heaps
本文提出了一种新的算法,用于快速,共享内存,多核计算的增广轮廓树的三角剖分。与大多数现有的并行算法相比,我们的技术计算增强树,使全范围的轮廓树为基础的应用程序,包括数据分割。我们的方法完全重温传统的,顺序的轮廓树算法重新制定的所有步骤的计算作为一组独立的本地任务。这包括一个新的计算过程的基础上,斐波那契堆的连接和分裂树,两个中间数据结构用于计算的轮廓树,其建设有效地进行了并行的动态调度任务。我们还介绍了一个新的并行算法,这两个树的组合成输出的全球轮廓树。总体而言,得益于OpenMP任务运行时,这在实践中实现了卓越的时间性能,无论是在顺序还是并行模式下。我们报告的性能数字,比较我们的方法,以参考顺序和多线程实现的增强合并和轮廓树的计算。这些实验证明了我们的方法的运行时的效率和其在常见的工作站上的可扩展性。我们证明了我们的方法在数据分割应用程序的实用性。
Improved bounds for multipass pairing heaps and path-balanced binary search trees
我们重新审视多遍配对堆和路径平衡二叉搜索树(BST),两个经典的算法数据结构维护。配对堆是一种简单而有效的“自调整”堆,由Fredman、Sedgewick、Sleator和Tarjan在1986年提出。在多通道变体(Fredman等人描述的原始配对堆变体之一)中,最小项目是通过重复的配对循环提取的,在该循环中,相邻的兄弟被链接。Sleator(Subramanian,1996)提出的路径平衡BST是Splay树(Sleator和Tarjan,1983)的自然替代品。在路径平衡的BST中,每当访问一个项时,指向该项的搜索路径被重新排列到一个平衡树中。尽管它们很简单,但这两种算法都很难分析。Fredman等人表明,多遍配对堆中的操作需要分摊的$O(\log{n} \cdot \log\log{n} / \log\log\log{n})$时间。为了在路径平衡的BST中搜索,Balasubramanian和Raman在1995年使用不同的参数展示了$O(\log{n} \cdot \log\log{n} / \log\log\log{n})$相同的摊销时间界限。在本文中,我们显示了这两个算法之间的显式连接,并提高了两个边界$O\left(\log{n} \cdot 2^{\log^{\ast}{n}} \cdot \log^{\ast}{n}\right)$,分别为$O\left(\lo…
A Tight Analysis of Slim Heaps and Smooth Heaps
平滑堆和与之密切相关的瘦堆是最近发明的堆(优先级队列)数据结构的自调整实现。我们分析了这些数据结构的效率。我们获得了每个操作的时间的摊销界限:$O(1)$用于make-heap、insert、find-min和meld; $O(\log\log n)$用于decrease-key; $O(\log n)$用于delete-min和delete,其中$n$是堆中的当前项数。这些界限不仅对平滑和苗条的堆是严格的,而且对Iacono和Özkan的纯堆模型中的任何堆实现都是严格的,旨在捕获所有可能的“自调整”堆实现。苗条和光滑堆是第一个已知的数据结构,以匹配Iacono和Özkan的下限,并满足其模型的约束。我们的分析建立在Pettie对配对堆(一种经典的自调整堆实现)效率的见解之上。
A New Single-Source Shortest Path Algorithm for Nonnegative Weight Graph
单源最短路问题是图算法研究领域的经典问题。提出了一种新的非负权图单源最短路径算法。该算法可以将多轮Fibonacci堆操作压缩到一轮,相对于Dijkstra使用Fibonacci堆的算法节省运行时间。该算法的时间复杂度在最坏情况下也是O(m+nlogn),其中m是边数,n是节点数。然而,在某些情况下,例如,当一个图的边的权重都是相同的,最长的最短路径的跳数是远远小于n的边界可以是线性的。基于理论分析,我们证明了该算法是快速的Dijkstra的算法使用Fibonacci堆在平均情况下,当n是足够大的。
Smooth heaps and a dual view of self-adjusting data structures
我们提出了一个新的连接自调整二叉搜索树(BST)和堆,两个基本的,广泛研究,和实际相关的家庭数据结构。粗略地说,我们将自然模型中的任意堆算法映射到相应的BST算法,该算法在双操作序列上具有相同的成本(即时间和密钥空间角色切换的相同序列)。这是两个数据结构族之间的第一个通用转换。有一个丰富的理论动态优化BST(即BST算法之间的竞争理论)。在文献中已经注意到堆缺乏类似的理论。通过我们的连接,我们转移到一个通用的堆模型的BST已知的所有实例特定的下限,启动堆的动态优化理论。在算法方面,我们得到了一个新的,简单而有效的堆算法,我们称之为光滑堆。我们表明,光滑堆是贪婪,BST算法与最强的证明,并从文献中,被广泛认为是实例最优的属性堆对应。假设贪婪的最优性,平滑堆在我们的堆算法模型中也是最优的。作为推论的贪婪已知的结果,我们获得特定于实例的上界的光滑堆,自适应排序中的应用。有趣的是,平滑堆虽然是从一个不实用的BST算法中派生出来的,但它简单且易于实现(例如,除了键和树指针之外,它不存储任何辅助数据)。它可以被看作是流行的配对堆数据结构的变体,用"两个选择的幂"类型的启发式扩展它。
扫码添加微信好友,提出您的宝贵建议 👇
💡 备注请填写:网站反馈
发表机构由 AI 从论文文本抽取,如发现错误,欢迎反馈修正建议。