您应该听说过哪些复杂的数据结构?

时间:2009-02-18 03:38:58

标签: performance algorithm data-structures

这是一个衍生问题,但我正在询问您至少应该熟悉的数据结构的有用性。但是,如果没有一些专业知识,这些结构就难以实施。

我想说两者之间有一个很好的界限就是堆 - 你应该能够编写一个堆,但这需要你一天。不合适的是BST等。编辑:我认为这取决于你在做什么。我认为列出一个包含总结您使用它的原因的短语会很棒!

这是一个开始的清单:

  1. B + trees:单个键上的通用索引结构很好
  2. K-d树:空间数据
  3. 红黑树:自平衡BST;还有AVL或splay tree
  4. 跳过列表:随机或(伪)顺序访问的良好混合结构
  5. Trie:线性时间字符串搜索

14 个答案:

答案 0 :(得分:9)

答案 1 :(得分:4)

答案 2 :(得分:3)

答案 3 :(得分:2)

这是一个好的开始; wikipedia上有一个全面的数据结构列表,其中一些应该进行检查。但至于你需要哪些 1 ,这取决于你想要的区域......做你正在做的事情。

嵌入式系统人员会有很多不同于网络人员的想法,他们会强烈反对业务逻辑人员。弄清楚你想做什么;语言和平台也会影响您需要的列表。

答案 4 :(得分:2)

引用Martin Kay

  

Suffix trees构成了一个井   理解,非常优雅,但是   令人遗憾的是,数据不佳   结构可能很多   应用程序(...)

另请参阅:What are the lesser known but cool data structures?

答案 5 :(得分:2)

van Emde Boas trees。我并不认为你“应该”听说过它们,但我相信它们是一个有趣的例子,说明你可以通过“点滴技巧”实现什么样的复杂性 - 即O(log log n),指数优于二叉树!

答案 6 :(得分:1)

答案 7 :(得分:1)

与你提到的B +树密切相关:B*-tree。除了称为“跳舞树”方法的平衡方法外,这些方法构成了Reiser4的基础。

答案 8 :(得分:1)

Binary Decision Diagrams,特别是降阶二进制决策图(ROBDD)。当有人决定创建自己的过滤系统时,这些会被彻底改造(很差)。

答案 9 :(得分:1)

Cuckoo hashing,一种在预期的固定时间内解决哈希表冲突的简单而优雅的方法。

答案 10 :(得分:1)

Deterministic finite automata(DFA)或finite state machines,用于表达许多内容,例如基本词法分析器,正则表达式,状态转换,。另请参阅相关的directed acyclic word graphs,它可以用于紧凑地存储字典。

答案 11 :(得分:0)

我会将Hash Tables添加到列表中。它们在概念上非常简单,但是一旦你看到如何实现良好的散列函数和有效的探测方法,就会很复杂。

答案 12 :(得分:0)

R-Tree及其变体,例如R*-TreeX-Tree,金字塔树。各种M-Tree变体,例如Slim-Tree。

通常,查询树很容易。也可能有轻松的批量加载(对于R-Trees,STR通常做得很好)。棘手的部分通常是在更新中维护好树。

答案 13 :(得分:0)

您可以尝试:

  • y-fast trees
  • 近似有序集
  • 选择堆
  • 紧凑型阵列
  • 单片列表
  • 简洁列表