We present highly optimized data structures for the dynamic predecessor problem, where the task is to maintain a set $S$ of $w$-bit numbers under insertions, deletions, and predecessor queries (return the largest element in $S$ no larger than a given key). The problem of finding predecessors can be viewed as a generalized form of the membership problem, or as a simple version of the nearest neighbour problem. It lies at the core of various real-world problems such as internet routing. In this work, we engineer (1) a simple implementation of the idea of universe reduction, similar to van-Emde-Boas trees (2) variants of y-fast tries [Willard, IPL'83], and (3) B-trees with different strategies for organizing the keys contained in the nodes, including an implementation of dynamic fusion nodes [P\v{a}tra\c{s}cu and Thorup, FOCS'14]. We implement our data structures for $w=32,40,64$, which covers most typical scenarios. Our data structures finish workloads faster than previous approaches while being significantly more space-efficient, e.g., they clearly outperform standard implementations of the STL by finishing up to four times as fast using less than a third of the memory. Our tests also provide more general insights on data structure design, such as how small sets should be stored and handled and if and when new CPU instructions such as advanced vector extensions pay off.
翻译:我们为动态的前身问题展示了高度优化的数据结构,我们的任务是在插入、删除和前问题(将最大元素以美元返回不大于给定键的最大元素)下维持一套价值为WW美元比特数字的固定数据结构。寻找前身的问题可以被视为会员问题的一种普遍形式,或近邻问题的一种简单版本。它是互联网路径等各种现实世界问题的核心。我们在此工作中设计了(1) 简单落实宇宙缩小概念,类似于范恩德-波阿斯树(2) 和快速尝试的变种[Willard, IPL'83],以及(3) B-Tree,采用不同的战略来组织节点中所含的钥匙,包括执行动态融合节点[P\v{a}tra\c{cu}和Throup,FOCS'14]。我们实施的数据结构是$w=32,40,64美元,涵盖最典型的情景。我们的数据结构完成工作量比以往更快,同时大大加快了[Willard, IPL'83] 和(3) Bree-t 方法,采用不同的战略来组织节键,用于组织节点的钥匙,包括执行动态组合[Plast develop deview] 标准,如果我们的数据在快速运行中,那么快速测试中,那么精确地进行,那么,那么,那么快速地将数据结构应提供快速的测试,如果在快速的测试,那么快速的顺序上,在快速的顺序上,如果在快速的顺序上,那么在快速的顺序上,那么,应该提供更精确的缩压式的操作式的顺序上,在快速的顺序上进行。