这是一个衍生问题,但我正在询问您至少应该熟悉的数据结构的有用性。但是,如果没有一些专业知识,这些结构就难以实施。
我想说两者之间有一个很好的界限就是堆 - 你应该能够编写一个堆,但这需要你一天。不合适的是BST等。编辑:我认为这取决于你在做什么。我认为列出一个包含总结您使用它的原因的短语会很棒!
这是一个开始的清单:
答案 0 :(得分:9)
答案 1 :(得分:4)
答案 2 :(得分:3)
答案 3 :(得分:2)
这是一个好的开始; wikipedia上有一个全面的数据结构列表,其中一些应该进行检查。但至于你需要哪些 1 ,这取决于你想要的区域......做你正在做的事情。
嵌入式系统人员会有很多不同于网络人员的想法,他们会强烈反对业务逻辑人员。弄清楚你想做什么;语言和平台也会影响您需要的列表。
答案 4 :(得分:2)
引用Martin Kay:
Suffix trees构成了一个井 理解,非常优雅,但是 令人遗憾的是,数据不佳 结构可能很多 应用程序(...)
答案 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*-Tree,X-Tree,金字塔树。各种M-Tree变体,例如Slim-Tree。
通常,查询树很容易。也可能有轻松的批量加载(对于R-Trees,STR通常做得很好)。棘手的部分通常是在更新中维护好树。
答案 13 :(得分:0)
您可以尝试: