【问题标题】:What are some lesser known data structures and algorithms that one should know of?应该知道哪些鲜为人知的数据结构和算法?
【发布时间】:2011-03-05 11:19:54
【问题描述】:

最近我遇到了 SkipList 数据结构。它确实帮助我解决了一个原本难以解决的问题。我一直在努力使用平衡二叉树来解决它,但它变得非常复杂,因为树需要始终保持平衡,我不仅想知道特定值的存在,而且还想知道某个范围内的值。 SkipList 帮助我有效地解决了这个问题。

我想知道我还需要了解哪些其他数据结构?我知道 - 数组、列表、堆栈、队列、链表、哈希表、树及其不同的形式,如 B-tree、Trie 等。 想知道您是否发现其他一些有趣且在常规开发周期中有用的数据结构/概念。

【问题讨论】:

标签: algorithm data-structures


【解决方案1】:

您没有提到非常强大的图表,如果您不了解它们,您绝对应该阅读它们。查阅 Dijkstra 算法和 A* 搜索算法以及一般的深度优先搜索和广度优先搜索。

您还省略了堆,它们通常用作优先级队列的底层结构。二叉堆是最简单的,但您也可以查看 min-max-median heaps、binomial heaps(快速合并)和 Fibonacci heaps(快速减少键 - 对某些图形算法有用)。

其他有趣的数据结构包括 Patricia 尝试,它是节省空间的尝试(以子字符串而不是字符为键),展开树,它们是平衡的并且可以被编程为持久的。还可以查看 Bloom 过滤器,这是一种概率数据结构,可让您确定元素是否是集合的成员。它可以有误报,但不能有误报,并且具有空间/时间效率。

最后,您可以走函数式路线,研究不可变和持久的数据结构。其中许多只是您已经知道的数据结构的功能版本。如果您对此感兴趣,那么我建议您查看 Okasaki 的 Purely Functional Datastructures

【讨论】:

  • 这是一份不错的清单。我在图论方面很差 - 大学毕业后从未真正实践过它们。您想在 Graph 上向我推荐任何书籍或学习资料吗?
  • 刚开始时,我使用的是 CLRS,也就是 算法简介,但是我记得在使用它时遇到了一些困难——书中使用的伪代码并不总是很清楚.不幸的是,我真的没有任何其他建议。
【解决方案2】:

您同时拥有“列表”和“链接列表”,并且完全不清楚您打算在两者之间有什么区别(如果有的话)。无论如何,您已经跳过的一个明显结构是堆(您可能会将其归类为一种树,但这充其量是非常不确定的)。归根结底,树是图的一个子集,所以如果你没有研究过图(一般来说),那可能是一个值得探索的领域。

我会注意到,这些都不是特别“新近”的——它们都已经为人所知几十年了。这些真正通用的结构中的大多数已经为人所知很长一段时间了。最近发现的往往与更具体的主题领域相关。

【讨论】:

  • 谢谢,是的,我错过了堆和优先队列。
猜你喜欢
  • 2010-10-04
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 2011-05-05
  • 2012-12-08
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多