最近我遇到了SkipList数据结构。这真的帮助我解决了难以解决的难题。我正在努力使用平衡二叉树来解决它,但它变得非常复杂,因为树需要始终保持平衡,我想知道不仅存在特定值而且存在某个范围内的值。 SkipList帮助我有效地解决了这个问题。
我想知道我还需要知道哪些其他数据结构?我知道 - 数组,列表,堆栈,队列,链表,哈希表,树及其不同的形式,如B树,特里等。 想知道您是否发现其他一些有趣的数据结构/概念以及在常规开发周期中有用。
答案 0 :(得分:3)
你没有提到非常强大的图表,如果你不了解它们,你一定要阅读它们。查看Dijkstra的算法和A *搜索算法以及一般的深度优先搜索和广度优先搜索。
您还遗漏了堆,这些堆通常用作优先级队列的基础结构。二进制堆是最简单的,但您也可以查看min-max-median堆,二项式堆(快速合并)和Fibonacci堆(快速减少键 - 对某些图算法很有用)。
其他有趣的数据结构包括Patricia尝试,它们是节省空间的尝试(键入子串而不是字符),splay树,它们是平衡的并且可以被编程为持久的。还要检查Bloom过滤器,它是一种概率数据结构,允许您确定元素是否是集合的成员。它可能有误报但不是假阴性,并且空间/时间有效。
最后,您可以使用功能路由并查看不可变和持久的数据结构。其中许多只是您已经知道的数据结构的功能版本。如果您对此感兴趣,那么我建议您查看Okasaki的 Purely Functional Datastructures 。
答案 1 :(得分:1)
您同时拥有“列表”和“链接列表”,并且根本不清楚您打算在两者之间存在什么差异(如果有的话)。无论如何,你跳过的一个明显的结构是堆(你可能将它归类为一种树类型,但这种情况最不确定)。最终,树木是图形的一个子集,所以如果你没有研究图形(一般来说),这可能是一个值得探索的领域。
我会注意到,这些都不是特别“近期” - 它们几十年来都已被人们所知。大多数这些真正的一般结构已经知道了很长一段时间。最近发现的那些往往涉及更具体的主题领域。