【问题标题】:Practical uses of different data structures [closed]不同数据结构的实际用途[关闭]
【发布时间】:2010-12-05 01:47:40
【问题描述】:

关于数据结构的讨论很多,但我找不到数据结构及其实际用途的简单列表。我正在努力学习面试,我认为这对我和其他许多人都有帮助。我正在寻找这样的东西:

数据结构 - 示例/用于

哈希表 - 快速数据查找...然后举个例子

数组 - ...

二叉树 - ...

如果某处有这样的资源,请告诉我。

谢谢!

编辑:我的意思是维基百科很好,但在大多数页面上,它们实际上并没有列出实际用途。我正在寻找更多的东西。

【问题讨论】:

    标签: data-structures


    【解决方案1】:

    在 StackOverflow 上的类似问题中找到了该列表:

    哈希表 - 用于快速数据查找 - 编译器的符号表, 数据库索引、缓存、唯一数据表示。

    Trie - 字典,例如在移动电话上找到的 自动完成和拼写检查。

    后缀树 - 大多数文字处理器中使用的快速全文搜索。

    堆栈 - 文字处理器中的撤消\重做操作,表达式评估 和语法解析,很多像JVM这样的虚拟机都是面向栈的。

    队列 - 各种实体所在的传输和运筹学研究 存储并保持以供以后处理,即队列执行 缓冲区的功能。

    优先级队列 - 内核中的进程调度

    树 - 解析器、文件系统

    基数树 - IP 路由表

    BSP 树 - 3D 计算机图形

    图表 - 社交网站中的连接/关系、路由 、通信网络、数据组织等。

    堆 - lisp 中的动态内存分配

    这是RV Pradeep最初发布的答案

    其他一些不太有用的链接:

    Applications are only listed for some data structures

    Not application focused, by good summary and relevant

    【讨论】:

    • 你的第一个链接坏了
    • 谢谢@DanBeaulieu。我删除了死链接。
    • 非常好的总结。用法列表可能永无止境,但要明白这一点。
    • 撤消/重做真的是一个堆栈吗?如果撤消从堆栈顶部弹出,那么您将无法重做。
    • @TonyL。我知道这是一个较老的问题,但我相信使用了 2 个堆栈或撤消/重做。当您撤消一个动作时,它会从动作堆栈中弹出并放置在重做堆栈上。如果您重做,则将其从重做堆栈中弹出并将其推送到操作堆栈中。我可能有错误的术语,但应该有例子。
    【解决方案2】:

    数据结构的更多实际应用

    红黑树(在频繁插入/删除时使用 并且很少搜索)- 使用红黑树的 K-mean 聚类、数据库、头脑简单的数据库、在字典中搜索单词、在网络上搜索

    AVL Trees (More Search and Less of Insertion/Deletion) - 数据分析和数据挖掘以及涉及更多搜索的应用

    最小堆 - 聚类算法

    【讨论】:

      【解决方案3】:

      我和你在同一条船上。我需要学习技术面试,但记住一个列表并没有什么帮助。如果您有 3-4 小时的空闲时间,并且想要进行更深入的潜水,我建议您查看

      mycodeschool
      我查看了 Coursera 和其他资源,例如博客和教科书, 但我发现它们要么不够全面,要么位于频谱的另一端,过于密集的必备计算机科学术语。

      视频中的老兄有很多关于数据结构的讲座。不要介意那些愚蠢的图画,或轻微的口音。您不仅需要了解选择哪种数据结构,还需要了解人们在考虑数据结构时要考虑的其他几点:

      • 常用数据结构的优缺点
      • 每个数据结构存在的原因
      • 它是如何在内存中实际工作的
      • 具体问题/练习并决定使用哪种结构以实现最大效率
      • 清醒大0解释

      I also posted notes on github if you are interested.

      【讨论】:

        【解决方案4】:

        根据我的理解,数据结构是驻留在可以有效管理的任何电子系统内存中的任何数据。很多时候,这是一场记忆游戏或更快地访问数据。再次在内存方面,根据最终产品公司的成本,对数据管理进行了权衡。有效管理告诉我们如何根据最终产品的主要要求最好地访问数据。这是一个非常高级的解释,但数据结构是一个广泛的主题。大多数面试官会根据他们所拥有的时间深入研究他们能够负担得起在面试中讨论的数据结构,这些数据结构是链表和相关主题。

        现在,这些数据类型可以根据逻辑构造和访问的方式分为原始、抽象、复合。

        • 原始数据结构是所有数据结构的基本构建块,它们具有连续的内存:boolean、char、int、float、double、string。
        • 复合数据结构是由多个原始数据类型组成的数据结构。类、结构、联合、数组/记录。
        • 抽象数据类型是复合数据类型,可以有效地访问它们,这被称为算法。根据访问数据的方式,数据结构分为线性和非线性数据类型。链表、堆栈、队列等都是线性数据类型。堆、二叉树和哈希表等都是非线性数据类型。

        我希望这可以帮助您深入了解。

        【讨论】:

          【解决方案5】:

          Skienna 的优秀书籍“Algorithm Design Manual"”包含一个庞大的算法和数据结构库。

          针对大量问题,对数据结构和算法进行了描述、比较并讨论了实际用法。作者还提供了实现和原始研究论文的参考。

          如果您搜索要解决的问题的最佳数据结构,那么将这本书放在您的办公桌上是非常棒的。对面试准备也很有帮助。

          另一个很棒的资源是NIST Dictionary of Data structures and algorithms

          【讨论】:

            【解决方案6】:

            各种数据结构的任何排名都至少部分与问题上下文相关联。这将有助于学习如何分析算法的时间和空间性能。通常,使用“大 O 表示法”,例如二进制搜索在 O(log n) 时间内,这意味着搜索元素的时间是元素数​​量的 log(以 2 为底,隐式)。直观地说,由于每一步都会将剩余数据的一半丢弃为不相关的,因此将元素数量增加一倍将使时间增加 1 步。 (二分搜索的扩展性相当好。)空间性能涉及更大数据集的内存量如何增长。另外,请注意,大 O 表示法忽略了常数因子 - 对于较小的数据集,O(n^2) 算法可能仍然比具有更高常数因子的 O(n * log n) 算法更快。复杂的算法在启动时往往需要做更多的工作。

            除了时间和空间,其他特征包括数据结构是否排序(树和skiplists排序,哈希表没有),持久性(二叉树可以重用旧版本的指针,而哈希表被原地修改),等等

            虽然您需要了解几种数据结构的行为才能对它们进行比较,但要了解它们的性能差异原因,一种方法是仔细研究其中的几种。我建议比较单链表、二叉搜索树和skip lists,它们都比较简单,但特性却截然不同。想想查找一个值、添加一个新值、按顺序查找所有值等需要多少工作。

            人们推荐各种关于分析算法/数据结构性能的文章,但真正让它们对我有意义的是学习 OCaml。处理复杂的数据结构是 ML 的强项,当您可以像在 C 中那样避免指针和内存管理时,它们的行为会更加清晰。(不过,学习 OCaml 只是为了理解数据结构几乎可以肯定是很长的路要走。:))

            【讨论】:

              猜你喜欢
              • 2021-06-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-12-22
              • 2011-06-09
              • 1970-01-01
              相关资源
              最近更新 更多