【问题标题】:What are the complicated data structures you should have heard of? [closed]你应该听说过哪些复杂的数据结构? [关闭]
【发布时间】:2010-10-08 06:25:23
【问题描述】:

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

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

这是一个开始的列表:

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

【问题讨论】:

标签: performance algorithm data-structures


【解决方案1】:

【讨论】:

    【解决方案2】:

    【讨论】:

    • 不相交集确实很容易实现。很难分析。
    【解决方案3】:

    【讨论】:

      【解决方案4】:

      这是一个好的开始; wikipedia 上有一份完整的数据结构列表,其中一些应该检查一下。但至于你需要哪些,这取决于你打算在哪个领域......做你正在做的任何事情。

      嵌入式系统人员的想法与 Web 人员的想法截然不同,后者强烈反对业务逻辑人员。弄清楚你想做什么;语言和平台也会影响您需要的列表。

      【讨论】:

        【解决方案5】:

        引用Martin Kay

        Suffix trees构成一口井 理解,非常优雅,但是 令人遗憾的是,数据评价不佳 具有潜在许多的结构 应用程序(...)

        另见:What are the lesser known but cool data structures?

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                【解决方案9】:

                Binary Decision Diagrams,特别是降阶二元决策图 (ROBDD)。当有人决定创建自己的过滤系统时,这些会被重新发明(很差)。

                【讨论】:

                  【解决方案10】:

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

                  【讨论】:

                    【解决方案11】:

                    Deterministic finite automata (DFA) 或finite state machines,用于表达许多事物,例如基本词法分析器、正则表达式、状态转换等。另请参阅相关的directed acyclic word graphs,这对于紧凑地存储字典很有用。

                    【讨论】:

                      【解决方案12】:

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

                      【讨论】:

                        【解决方案13】:

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

                        通常,查询树很容易。也可能有一个简单的批量加载(对于 R-Trees,STR 通常做得很好)。棘手的部分通常是跨更新维护一棵好树。

                        【讨论】:

                          【解决方案14】:

                          你可以试试:

                          • y-fast 树
                          • 近似有序集
                          • 选择堆
                          • 紧凑数组
                          • 单片列表
                          • 简洁列表

                          【讨论】:

                            猜你喜欢
                            • 2019-05-14
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2020-01-25
                            • 1970-01-01
                            • 2020-05-11
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多