【问题标题】:What problems can be solved, or tackled more easily, using graphs and trees? [closed]使用图和树可以解决或更容易解决哪些问题? [关闭]
【发布时间】:2010-09-05 09:40:47
【问题描述】:

这两种数据结构可以解决的最常见问题是什么?

如果我也推荐以下书籍对我有好处:

  • 实现结构
  • 实施并解释使用它们的算法的推理

【问题讨论】:

    标签: algorithm data-structures tree computer-science graph-theory


    【解决方案1】:

    当我读到这个问题时,我首先想到的是:什么类型的东西使用图表/树?然后我回想我应该如何使用它们。

    以树的两种常见用法为例:

    • DOM
    • 文件系统

    DOM 和 XML 类似于树结构。

    这也是有道理的。 这是有道理的,因为需要如何排列这些数据。一个文件系统,也是。在 UNIX 系统上有一个根节点,并向下分支。当您挂载一个新设备时,就是将它附加到树上。

    您还应该问自己:数据是否属于这种类型的结构?创建对问题有意义的数据结构,其余的将随之而来。

    就更容易而言,我认为这是相对的。您是否擅长使用递归函数来遍历树/图?如果需要平衡树怎么办?

    考虑一个解决单词搜索难题的程序。您可以将单词搜索的所有字母映射到图表中,并检查周围的节点以查看该字符串是否与任何单词匹配。但是你不能对单个数组做同样的事情吗?你真正需要做的就是移动一个索引来检查左右字母,并通过宽度来检查上下字母。用图表解决这个问题并不难,但如果你不习惯使用它们,它会带来很多额外的工作和困难——当然这不应该阻止你这样做,特别是如果你正在学习他们。

    我希望这可以帮助您思考这些结构。至于书籍推荐,我必须选择 Introduction to Algorithms

    【讨论】:

      【解决方案2】:

      电路图。

      编译(有向无环图)

      地图。非常紧凑的图形。

      网络流量问题。

      专家系统的决策(原文如此)

      用于故障查找、流程改进、安全分析的鱼骨图。对于奖励积分,将您的错误恢复代码实现为鱼骨图的对象。

      【讨论】:

        【解决方案3】:

        几乎每个问题都可以用图论重写。我不是在开玩笑,看看任何关于 NP 完全问题的书,有一些非常古怪的问题会变成图论,因为我们有很好的工具来处理图......

        【讨论】:

          【解决方案4】:

          The Algorithm Design Manual 包含一些创造性地使用图表的有趣案例研究。尽管它的名字,这本书非常易读,有时甚至很有趣。

          【讨论】:

            【解决方案5】:

            我的大学有这样的课程:CSE 326。我不认为这本书太有用了,但是这些项目很有趣,并且教你一些关于实现一些更简单的结构的知识。

            例如,用树解决的最常见问题之一(按使用它的人数)是手机文本输入问题。您可以使用树(不一定是二元树)来表示可能的单词空间,这些单词可以来自用户快速输入的任何给定数字列表。

            【讨论】:

              【解决方案6】:

              Algorithms for Java: Part 5 by Robert Sedgewick 是关于图算法和数据结构的。如果您想实现一些图算法,这将是一本很好的第一本书。

              【讨论】:

                【解决方案7】:

                用于在游戏和多媒体应用程序中绘制图形的场景图大量使用树和图。节点表示要渲染的对象、变换、控件、组...

                场景图通常具有多个图层和属性,这意味着您只能以指定的顺序(图层)绘制图的某些节点(属性)。根据您拥有的场景图类型,它可以有两种并行结构:声明和实例化。钍

                【讨论】:

                  【解决方案8】:

                  @DavidJoiner / 全部:

                  FWIW:Algorithm Design Manual 的新版本即将发布。

                  Skiena 教授开发本书的整个课程也可以在网上找到:

                  http://www.cs.sunysb.edu/~algorith/video-lectures/2007-1.html

                  【讨论】:

                    【解决方案9】:

                    由于它们的递归性质,树在函数式编程语言中被更多地使用。

                    此外,图表和树是对大量 AI 问题进行建模的好方法。

                    【讨论】:

                      【解决方案10】:

                      游戏经常使用图表来帮助查找游戏世界中的路径。世界的图形表示可以使用广度优先搜索或 A* 等算法来找到穿过它的路线。

                      他们还经常使用树来表示世界中的实体。如果您有数千个实体并且需要在某个位置找到一个,那么线性迭代列表可能效率低下,特别是如果您需要经常这样做。因此,可以将该区域细分为一棵树,以便更快地对其进行搜索。就像线性空间可以通过二分搜索有效地搜索(从而划分为二叉树)一样,2D 空间可以划分为quadtree,3D 空间可以划分为octree

                      【讨论】:

                        猜你喜欢
                        • 2018-01-05
                        • 1970-01-01
                        • 1970-01-01
                        • 2010-10-16
                        • 1970-01-01
                        • 1970-01-01
                        • 2021-01-17
                        • 2015-10-25
                        • 2017-07-31
                        相关资源
                        最近更新 更多