Data structures 最先进的数据结构

Data structures 最先进的数据结构,data-structures,Data Structures,关于现代数据结构,你能说些什么?我们都知道经典的,比如树、尝试、堆栈、列表、B-树等等(我认为Cormen的书是一个非常好的“经典的”列表)。但是最近的研究呢?我至少能说出其中两个:和。我想知道更多。有数百种专门的数据结构。 这是一个良好的开端。一些相对较新的(如过去30年)数据结构创新是概率性的,如。我觉得这些特别有趣,但我没有继续研究。阅读最近的文章可能会帮助你找到一些有趣的前沿研究 但是,大多数“新”的东西都是高度专业化的。只有很长一段时间才会创建一个新的但具有根本重要性的算法/结构(如列

关于现代数据结构,你能说些什么?我们都知道经典的,比如树、尝试、堆栈、列表、B-树等等(我认为Cormen的书是一个非常好的“经典的”列表)。但是最近的研究呢?我至少能说出其中两个:和。我想知道更多。

有数百种专门的数据结构。
这是一个良好的开端。

一些相对较新的(如过去30年)数据结构创新是概率性的,如。我觉得这些特别有趣,但我没有继续研究。阅读最近的文章可能会帮助你找到一些有趣的前沿研究


但是,大多数“新”的东西都是高度专业化的。只有很长一段时间才会创建一个新的但具有根本重要性的算法/结构(如列表、树等)。

这取决于您对“最近”的定义。CLR包含大量数据结构,但就其本质而言,它不可能涵盖多年来发展起来的所有伟大思想和技术。以下是一些研究领域的样本以及由此得出的一些结果:

二叉搜索树 在“经典”方面,最近开发的WAVL树是一种简单的平衡树结构,在仅插入的情况下,它的行为类似于AVL树(紧密平衡),当插入和删除混合时,它的性能永远不会比红色/黑色树差。还有,这是一种将概率skiplist编码为二叉搜索树的方法,它有一组非常简单的规则

是第一个通过在查找过程中重新排列节点而获得优异性能的二叉搜索树。它们具有许多优良的理论性质。虽然它们在20世纪80年代首次被开发出来的意义上并不“现代”,但它们开启了一个新的研究领域:探索是否有一个单一的二元搜索树,从某种意义上说,它是可能的“最佳”二元搜索树。理想情况下,这种树可以提供O(logn)查找,但也有其他可取的特性,如“查找最近搜索的项目所需的时间较少”和“查找最近查询的项目附近的项目应该很快”。在2000年代,我们看到了tango树和MultiPlay树的发展,这就保证了在这些树上执行一系列操作的成本永远不会比在任何二叉搜索树上执行这些操作慢一倍

在20世纪10年代早期,研究人员发现二叉搜索树算法与二维平面上的点集之间存在联系。这种“二元搜索树的几何结构”已被用于寻找BST结构的新下界,并为BST生成了一个新的候选者,对于“尽可能好”的某些定义,它可能是“尽可能好”

其他需要检查的平衡树和树状结构包括skiplist、treap和替罪羊树,它们是在20世纪90年代开发的

素描和抽样 许多最新的数据结构设计用于数据流,其中项目一次仅可见一个元素。目标是在使用远低于存储所有元素所需空间的情况下计算数据流的统计信息。(想想谷歌跟踪流行搜索查询或推特搜索趋势标签——一次出现的东西太多了,无法实时跟踪发布的所有内容)。可以估计在数据流中看到各种项目的频率,并可用于查找在数据流中频繁出现的项目。HyperLogLog估计器使用很少的空间,可以估计看到了多少不同的项目。像AMS估计器这样的估计器可以用来估计数据分布的倾斜程度

内存优化结构 有很多关于缓存无关数据结构的研究。无缓存结构背后的思想是,计算机中的内存通常涉及多层缓存,并且基于这些缓存的大小调整数据结构以提供性能提升(例如,请参见B-树)。在缓存无关模型中,数据结构需要在不知道缓存大小的情况下利用缓存的最佳优势。令人惊讶的是,这是可能的,我们有满足这一目标的二进制搜索树和优先级队列

散列表 布谷鸟哈希是在21世纪初开发的,它提供了一种构建哈希表的方法,其中查找需要最坏情况下的时间O(1)。他们在实践中很快,他们的分析导致了对随机超图性质的研究

自20世纪60年代以来,人们就知道线性探测在假设随机散列函数的情况下表现良好,但从理论上看,它需要5个独立的散列函数才能保持快速

在20世纪10年代,一些谷歌工程师开发了“瑞士表”,这是一种基于线性探测的极快哈希表,它利用SIMD指令实现额外的性能提升

布卢姆过滤器的更换 Bloom filter自20世纪70年代就已经出现了,它提供了一种在少量空间中存储集合的极好方法,前提是误报可以接受。在2000年代、2010年代和2020年代,开发了许多实用的数据结构,在实践中对其进行了改进。支持插入和删除,大约有2倍的空间。较新版本比传统的Bloom过滤器使用更少的空间(用于合理的错误率),并支持插入和删除。而且在所有情况下,假设要存储的项目是预先知道的,则使用的空间都比布卢姆过滤器少

XOR过滤器与Bloomier过滤器相关,这是一种存储字典近似值的方法,类似于BloomFilter存储集合近似值的方式。它们在20世纪10年代末的一篇论文中被用来压缩