State-of-the-art data structures
关于现代数据结构,你能说些什么?我们都知道经典的,像树,尝试,堆栈,列表,B树等等(我认为一本科尔曼的书是一个非常好的列表,一个"经典的")。但是最近的研究呢?我至少能说出其中的两个:指状树和朱迪阵列。我想知道更多。
这真的取决于你对"最近"的定义。CLRS包含大量的数据结构,但从本质上讲,它不能涵盖多年来开发的所有伟大的思想和技术。
许多现代的研究都是关于缓存遗忘数据结构的,这些数据结构在某些合理的假设下,利用了内存层次结构的最佳优势。布罗达尔是这一领域的一位研究人员,他已经制造出许多这种类型的优秀结构。
简洁的数据结构——设计用于在保持良好时间界限的情况下尽可能使用最少位数的数据结构——也是一个活跃的研究领域。例如,查看小波树。
纯功能数据结构,可用于功能语言(或命令式语言,以保证持久性),也是一个活跃的研究课题。例如,克里斯·冈崎(ChrisOkasaki)在这一领域的工作导致了新树和优先级队列的发展。
目前,分布式数据结构非常重要。谷歌的Bigtable就是一个很好的例子。类似地,并发的或无锁的数据结构已经找到了许多编程语言的方式(例如,参见Java的CONCURNESHASMAP或CopyWordRealRayLIST)。
CLRS中对基于摊销的数据结构进行了切题的介绍,它的重点是斐波那契堆。然而,八字树和斜堆结构也在同一时期发展起来,虽然它们在今天很重要,但没有提到。在splay树的主题上,现在有很多工作正在寻找一个动态最优的bst-一个单一的二进制搜索树,它在给定的数据流上表现出渐进的以及任何手动调节的bst。探戈树和多重奏树是这个地区有趣的读物。
概率结构如treap和skip list已经有了大量的研究活动,是一个不断探索的好地方。在相关方面,像布谷鸟散列表或动态完美散列表这样的强大散列表肯定值得研究。它们的变体,如布谷鸟过滤器和商过滤器,也非常成功。
过去几年来,计算几何的数据结构已经成为人们关注的焦点,但遗憾的是,我对它们的了解还不足以提出任何特定的结构。
字符串处理的数据结构,即后缀树,在生物计算和网络搜索中具有极其重要的意义。我认为CLR甚至没有提到他们的存在。不过,你一定要研究它们,因为它们负责基因组学的大部分新工作。后缀数组构造算法最近有一些非常酷的发展,像sa-is这样的算法弥补了理论和实际快速算法之间的差距。
许多研究人员致力于构建数据结构,利用现代机器可以并行操作多个位的事实。一些结构,如融合树、指数树或y-fast树,利用这些属性以比简单比较模型中的O(n lg n)屏障更快的速度对整数数组进行排序和搜索。融合树及其后代(指数树等)已经表明,通过字级并行,你可以得到一些令人印象深刻的理论加速,尽管这些结构在实践中并不是非常快。
在总结、草图和概要数据结构方面也有很多工作要做,这些工作试图在不显式存储整个数据集的情况下回答有关数据集的问题。count-min草图是这些数据结构之一的一个很好的例子,正如hyperloglog基数估计量一样。
这只是一个小样本的新的和凉爽的结构在那里。希望这是一个好的起点!
一些相对较新(如过去30年)的数据结构创新是概率的,比如跳过列表。我觉得这些特别有趣,但我不跟上研究的步伐。阅读有关算法的最新ACM事务可能会帮助您找到一些有趣的前沿研究。
但是,大多数"新"事物都将高度专业化。在很长一段时间内,只创建一个新的但基本上很重要的算法/结构(如列表、树等)。
Cuckoo hashing is a scheme in computer
programming for resolving hash
collisions of values of hash functions
in a table. Cuckoo hashing was first
described by Rasmus Pagh and Flemming
Friche Rodler in 2001.
号
http://en.wikipedia.org/wiki/cuckoo-hashing
然后是新的:缓存遗忘的数据结构
有数百种专门的数据结构。http://en.wikipedia.org/wiki/list_-data_-structures是一个好的开始。