web-dev-qa-db-ja.com

データ構造ツリーとグラフの違いは何ですか?

学問的に言えば、データ構造ツリーとグラフの本質的な違いは何ですか?ツリーベースの検索とグラフベースの検索はどうですか?

122
user918304

ツリーは、グラフの制限された形式です。

ツリーには方向(親/子関係)があり、サイクルは含まれません。これらは、有向非巡回グラフ(またはDAG)のカテゴリに適合します。したがって、ツリーはDAGであり、子には1つの親しか持てないという制限があります。

指摘する重要なことの1つは、ツリーは再帰的なデータ構造ではないことです。上記の制限のため、再帰的なデータ構造として実装することはできません。ただし、通常は再帰的ではないDAG実装も使用できます。私が好むTree実装は、集中マップ表現であり、非再帰的です。

グラフは通常、検索ブレス優先または深さ優先です。同じことがツリーにも当てはまります。

132
user785287

説明する代わりに、写真で見せることを好みます。

リアルタイムのツリー

A tree in real time

実生活で使用するグラフ

A real time graph

はい、マップはグラフデータ構造として視覚化できます。

このようにそれらを見ると、生活が楽になります。ツリーは、各ノードに親が1つしかないことがわかっている場所で使用されます。ただし、グラフには複数の先行がある場合があります(通常、用語の親はグラフには使用されません)。

現実の世界では、グラフを使用してほとんど何でも表すことができます。たとえば、地図を使用しました。各都市をノードと見なす場合、複数のポイントから到達できます。このノードにつながるポイントは先行ノードと呼ばれ、このノードにつながるポイントは後続ノードと呼ばれます。

電気回路図、家の計画、コンピューターネットワーク、または河川システムは、グラフの他のいくつかの例です。多くの実世界の例は、グラフと見なすことができます。

テクニカルダイアグラムは次のようになります

ツリー:

enter image description here

グラフ:

enter image description here

以下のリンクを必ず参照してください。それらは、ツリーとグラフに関するほとんどすべての質問に答えます。

参照:

  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. ウィキペディア

94
mk..

ツリーでは、各ノード(ルートノードを除く)には、ちょうど1つの先行ノードと1つまたは2つの後続ノードがあります。 In-order、Pre-order、Post-order、およびBreadth Firstのトラバーサルを使用してトラバースできます。ツリーは、サイクルを持たない特別な種類のグラフであり、DAG(Directed Acyclic Graph)として知られています。ツリーは階層モデルです。

グラフでは、各ノードに1つ以上の先行ノードと後続ノードがあります。グラフは、深さ優先検索(DFS)および幅優先検索(BFS)アルゴリズムを使用して走査されます。グラフにはサイクルがあるため、ツリーよりも複雑です。グラフはネットワークモデルです。グラフには、有向グラフと無向グラフの2種類があります。

3
user10514540

Treeは、グラフの特別な形式、つまり最小接続グラフであり、任意の2つの頂点間に1つのパスのみがあります。

グラフには複数のパスが存在する可能性があります。つまり、グラフはノード間に単方向または双方向のパス(エッジ)を持つことができます

また、詳細を確認できます: http://freefeast.info/difference-between/difference-between-trees-and-graphs-trees-vs-graphs/

2
Bipon Biswas

ツリーは明らかです。ツリーは、子を持つノードで構成される再帰的なデータ構造です。

マップ(別名辞書)はキー/値のペアです。マップにキーを与えると、関連付けられた値が返されます。

マップはツリーを使用して実装できますが、混乱しないようにしてください。

更新:「マップ」と「グラフ」の混同は非常に紛らわしい。

グラフはツリーよりも複雑です。ツリーは、再帰的な親子関係を意味します。ツリーをトラバースする自然な方法があります:深さ優先、幅優先、レベル順など。

グラフは、ノード間に単方向または双方向のパスを持つことができ、周期的または非周期的などです。グラフはより複雑であると考えます。

まともなデータ構造テキスト(たとえば、「アルゴリズム設計マニュアル」)で大まかな検索を行うと、SOの回答の数よりも多くの優れた情報が得られると思います。受動的なルートを取り、自分で調査を開始しないことをお勧めします。

1
duffymo

他の回答は便利ですが、それぞれのプロパティが欠落しています。

グラフ

無向グラフ、 画像ソース:Wikipedia

有向グラフ、 画像ソース:Wikipedia

  • 頂点(またはノード)のセットと、それらの一部またはすべてを接続するエッジのセットで構成されます
  • どのEdgeも、同じEdgeによってまだ接続されていない2つの頂点を接続できます(有向グラフの場合は同じ方向に)
  • 接続する必要はありません(エッジですべての頂点を接続する必要はありません):単一のグラフは、いくつかの接続されていない頂点のセットで構成できます。
  • 有向または無向(グラフのすべてのエッジに適用されます)
    ごと Wikipedia

    たとえば、頂点がパーティーの人々を表し、2人の人々が手を振る場合に2つのエッジの間にエッジがある場合、このグラフは無向です。なぜなら、BはAとも手を振る場合にのみ、Bとも手を振ることができるからです。対照的に、人物Aから人物BへのエッジがBを賞賛するAに対応する場合、賞賛は必ずしも往復しないので、このグラフは有向です。

画像ソース:ウィキペディア

  • グラフの種類
  • 頂点はより一般的に「ノード」と呼ばれます
  • エッジは方向付けられ、「の子」(または「の親」)関係を表します
  • 各ノード(ルートノードを除く)には、ちょうど1つの親(および0個以上の子)があります
  • (ツリーに少なくとも1つのノードがある場合)ちょうど1つの「ルート」ノードがあります。これは親のないノードです
  • 接続する必要があります
  • 非循環、つまり、 cycles :「サイクルは、頂点がそれ自体から到達可能なエッジと頂点のパス[AKAシーケンス]です」

上記のプロパティにはいくつかの重複があります。具体的には、最後の2つのプロパティは、残りのプロパティによって暗示されます。しかし、それらはすべて注目に値します。

1
Dukeling

ツリーは、次のような有向グラフです。

a)エッジ方向を削除すると、接続され、非周期的になります

  1. 非循環であるという仮定を削除できます
  2. 有限である場合、代わりに接続されているという仮定を削除することができます

b)1つを除くすべての頂点、ルート、次数1

c)根の次数が0

  1. ノードの数が有限である場合、ルートの次数が0であるという仮定、またはルート以外のノードの次数が1であるという仮定のいずれかを削除できます。

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

0
BPL

数学では、グラフはオブジェクトのセットの表現であり、オブジェクトのいくつかのペアはリンクで接続されています。相互接続されたオブジェクトは、頂点と呼ばれる数学的な抽象化によって表され、いくつかの頂点のペアを接続するリンクはエッジと呼ばれます。[1]通常、グラフは、頂点の点の集合として図式形式で描かれ、エッジの線または曲線で結合されます。グラフは、離散数学の研究対象の1つです。

0
Narender sharma

ツリー内の1つのルートノードと1つの子に対して1つの親のみ。ただし、ルートノードの概念はありません。もう1つの違いは、ツリーは階層モデルですが、グラフはネットワークモデルです。

0