【问题标题】:What's the difference between the data structure Tree and Graph?数据结构 Tree 和 Graph 有什么区别?
【发布时间】:2011-11-17 09:55:53
【问题描述】:

从学术上讲,数据结构 Tree 和 Graph 的本质区别是什么?那么基于树的搜索和基于图的搜索呢?

【问题讨论】:

    标签: search data-structures map tree


    【解决方案1】:

    树只是图的一种受限形式。

    树有方向(父/子关系)并且不包含循环。 它们符合有向无环图(或 DAG)的类别。 所以树是有限制的有向无环图,一个孩子只能有一个父母。

    需要指出的重要一点是,树不是递归数据结构。 由于上述限制,它们不能实现为递归数据结构。但也可以使用通常不是递归的任何 DAG 实现。 我首选的 Tree 实现是集中式地图表示,并且是非递归的。

    图通常搜索广度优先或深度优先。树也是如此。

    【讨论】:

    • 图表非常有用,可用于对大量事物进行建模。许多其他数据结构可以看作是有限制的图。例如,单链表是 DAG 的一种特殊情况。
    • @user785287 你说的集中地图表示是什么意思?
    • “树不是递归数据结构”是误导和错误的。一棵树可以用非递归数据结构表示(例如,边的数组;一棵完整的树,就像二叉堆底层的树一样,可以非常紧凑地表示在一个数组中;还有其他简洁表示等),但可能最流行和最有用的表示它们的方法是使用基于递归指针的结构。无根树的表示不是唯一的,但这并不重要。
    • 不完全。树不一定有方向。 en.wikipedia.org/wiki/Tree_(graph_theory) 显示了一个没有方向的树的示例。这些在生物学环境中经常使用。
    • @harshpatel991 树没有方向,因为“X 和 Y 处于父子关系”没有方向。但是,“X 是 Y 的孩子”和“Y 是 X 的孩子”的个体关系是有向关系。方向表明了这一点; “运动”的方向。在树中,方向的概念并不是真正需要的,除非它是有意义的(这是树最常见的情况)。至少我是这么看的。
    【解决方案2】:

    比起解释,我更喜欢用图片来展示它。

    一棵实时的树

    现实生活中使用的图表

    是的,地图可以可视化为图形数据结构。

    这样看他们会让生活更轻松。树用于我们知道每个节点只有一个父节点的地方。但是图可以有多个前辈(图通常不使用术语父级)。

    在现实世界中,您几乎可以使用图表来表示任何东西。例如,我使用了地图。如果将每个城市视为一个节点,则可以从多个点到达。通向该节点的点称为前驱点,该节点将通向的点称为后继点。

    电路图、房屋平面图、计算机网络或河流系统是图表的更多示例。许多现实世界的例子都可以看作是图表。

    技术图可能是这样的

    树:

    图表:

    请务必参考以下链接。这些将回答您关于树和图表的几乎所有问题。

    参考资料:

    1. http://www.introprogramming.info/english-intro-csharp-book/read-online/chapter-17-trees-and-graphs/#_Toc362296541

    2. http://www.community-of-knowledge.de/beitrag/data-trees-as-a-means-of-presenting-complex-data-analysis/

    3. 维基百科

    【讨论】:

      【解决方案3】:

      其他答案很有用,但缺少每个答案的属性:

      图表

      无向图,image source: Wikipedia

      有向图,image source: Wikipedia

      • 由一组顶点(或节点)和一组连接部分或全部顶点的边组成
      • 任何边都可以连接尚未通过相同边连接的任意两个顶点(在有向图的情况下,在同一方向上)
      • 不必连接(边不必将所有顶点连接在一起):单个图可以由几组不连接的顶点组成
      • 可以是有向的或无向的(适用于图中的所有边)
        根据Wikipedia

        例如,如果顶点代表聚会上的人,如果两个人握手有边,则此图是无向图,因为只有当 B 也握手时,任何人 A 才能与人 B 握手与 A 形成对比。如果从人 A 到人 B 的任何一条边对应于 A 崇拜 B,则此图是有向图,因为崇拜不一定是互惠的。

      Image source: Wikipedia

      • 一种图表
      • 顶点通常称为“节点”
      • 边是有向的并表示“是子级”(或“是父级”)关系
      • 每个节点(根节点除外)只有一个父节点(以及零个或多个子节点)
      • 只有一个“根”节点(如果树至少有一个节点),即没有父节点的节点
      • 必须连接
      • 是非循环的,这意味着它没有cycles:“循环是由边和顶点组成的路径 [AKA 序列],其中顶点可以从自身到达”

      以上属性有一些重叠。具体来说,最后两个属性隐含在其余属性中。但所有这些都值得一提。

      【讨论】:

      • 图片让我们很容易理解!
      【解决方案4】:

      是图的一种特殊形式,即最小连通图,在任意两个顶点之间只有一条路径。

      在图中可以有多个路径,即图可以在节点之间具有单向或双向路径(边)

      您还可以查看更多详细信息: http://freefeast.info/difference-between/difference-between-trees-and-graphs-trees-vs-graphs/

      【讨论】:

        【解决方案5】:
        TREE :
         1. Only one path exist between two vertices (Nodes).
         2. Root node is the starting node of the tree.
         3. Tree doesn't have loops.
         4. Number of edges: n-1 (where n is number of nodes)
         5. Tree looks like Hierarchical
         6. All trees are graph.
        
        GRAPH :
         1. More than one path is allowed between two vertices.
         2. There is no root node concept (we can start from any node).
         3. There can be loop in graph.
         4. Number of edges are not defined.
         5. Graph looks like Network.
         6. All graphs are not tree.
        

        你可以在这个视频中找到更详细的解释 -> https://www.youtube.com/watch?v=KVHrjVTp9_w

        【讨论】:

          【解决方案6】:

          在树中,每个节点(根节点除外)只有一个前驱节点和一个或两个后继节点。它可以通过使用中序、前序、后序和广度优先遍历来遍历。树是一种特殊的图,没有循环,因此被称为 DAG(有向无环图)。树是一个层次模型。

          在图中,每个节点都有一个或多个前驱节点和后继节点。使用深度优先搜索 (DFS) 和广度优先搜索 (BFS) 算法遍历该图。图有循环,所以它比树更复杂。图是一种网络模型。图有两种:有向图和无向图。

          【讨论】:

          • 树节点可以有零个或多个后继节点,而不仅仅是一两个。二叉树将后继者/子节点的数量限制为 2,但每棵树都有没有子节点的叶节点。
          【解决方案7】:

          树基本上是不包含循环的无向图,因此我们可以说树是更受限制的图形式。 然而,树和图在编程中实现各种算法有不同的应用。 例如图可用于模型路线图,树可用于实现任何分层数据结构。

          【讨论】:

            【解决方案8】:

            树很明显:它们是由具有子节点的递归数据结构。

            Map(又名字典)是键/值对。给地图一个键,它会返回相关的值。

            地图可以使用树来实现,我希望你不会觉得这很混乱。

            更新:将“图表”与“地图”混淆是非常令人困惑的。

            图比树更复杂。树意味着递归的父/子关系。遍历树有很自然的方法:深度优先、广度优先、级别顺序等。

            图可以在节点之间具有单向或双向路径,可以是循环的或非循环的等。我认为图会更复杂。

            我认为在任何体面的数据结构文本(例如“算法设计手册”)中粗略搜索会比任何数量的 SO 答案提供更多更好的信息。我建议你不要走被动路线,而是开始自己做一些研究。

            【讨论】:

            • 对不起,我指的是图表,我输入了地图。
            • "混淆 "graph" 对于 "map" 非常令人困惑。" :)
            • 说“图比树更复杂”就像说“乌鸦比鸟更专业”。我们不应该说“所有的树都是图,但不是所有的图都是树”吗?
            【解决方案9】:

            一棵树是这样的有向图:

            a) 去掉边缘方向后,它是连通的且非循环的

            1. 您可以删除它是非循环的假设
            2. 如果它是有限的,您也可以删除它是连通的假设

            b) 除根外的每个顶点的入度为 1

            c) 根的入度为 0

            1. 如果只有有限多个节点,您可以删除根的入度为 0 的假设或 根以外的节点的度数为 1

            参考:http://www.cs.cornell.edu/courses/cs2800/2016sp/lectures/lec27-29-graphtheory.pdf

            【讨论】:

              【解决方案10】:

              简单的概念是树没有循环形成,它是单向的,而图形形成循环,在某些情况下是双向的,在另一种情况下是单向的

              【讨论】:

                【解决方案11】:

                在数学中,图是一组对象的表示,其中一些对象对通过链接连接。互连的对象由称为顶点的数学抽象表示,连接一些顶点对的链接称为边。 [1]通常,图形以图表的形式被描述为顶点的一组点,边由直线或曲线连接。图是离散数学的研究对象之一。

                【讨论】:

                  【解决方案12】:

                  树中有一个根节点,一个孩子只有一个父节点。但是,没有根节点的概念。另一个区别是,树是层次模型,而图是网络模型。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2015-05-04
                    • 2014-06-17
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-01-20
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多