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


139

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

回答:


150

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

ツリーには方向(親/子関係)があり、循環は含まれません。それらは、有向非巡回グラフ(またはDAG)のカテゴリーに適合します。したがって、ツリーはDAGであり、子は親を1つだけ持つことができるという制限があります。

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

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


8
グラフは非常に便利で、膨大な量のモデル化に使用できます。他の多くのデータ構造は、制限付きのグラフとして見ることができます。たとえば、単一リンクリストはDAGの特殊なケースです。
JRガルシア、

7
@ user785287 一元化されたマップ表現とはどういう意味ですか?
オタク

36
「ツリーは再帰的なデータ構造ではない」は誤解を招きやすく、間違っています。ツリー非再帰的なデータ構造で表現できます(たとえば、エッジの配列。バイナリヒープの基礎となるような完全なツリーは、配列で非常にコンパクトに表現できます。他の簡潔な表現などもあります)。しかし、おそらくそれらを表現する最も一般的で有用な方法は、再帰的なポインタベースの構造を使用することです。表現は根のない木の一意ではありませんが、それは重要ではありません。
j_random_hacker 2014

2
結構です。木の方向性は必ずしもありません。en.wikipedia.org/wiki/Tree_(graph_theory) は、方向のない木の例を示しています。これらは生物学的文脈で頻繁に使用されます。
Michal Palczewski、2015年

2
@ harshpatel991の木は、「XとYが親子関係にある」という方向性がないという意味で方向付けられていません。ただし、「XはYの子」、「YはXの子」という個別の関係は有向関係です。方向はそれを示しています。「動き」の方向。樹木では、意味がある場合を除いて、方向付けのアイデアは実際には必要ありません(樹木で最もよくあるケースです)。そのように私はそれを少なくとも見る方法です。
Kostas Mouratidis

105

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

リアルタイムの木

リアルタイムの木

実生活でのグラフ

リアルタイムグラフ

はい、地図はグラフのデータ構造として視覚化できます。

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

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

電気回路図、家の計画、コンピュータネットワーク、河川システムなどは、グラフの例としてはこれ以上ありません。実世界の例の多くはグラフと見なすことができます。

技術図はこのようになります

木 :

ここに画像の説明を入力してください

グラフ:

ここに画像の説明を入力してください

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

参照:

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


7

他の回答も役に立ちますが、それぞれのプロパティがありません。

グラフ

無向グラフ、画像ソース:ウィキペディア

有向グラフ、画像ソース:ウィキペディア

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

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

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

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

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


3

ツリーでは、各ノード(ルートノードを除く)には、1つの先行ノードと1つまたは2つの後続ノードがあります。インオーダー、プレオーダー、ポストオーダー、幅優先トラバーサルを使用してトラバースできます。ツリーは、DAG(有向非巡回グラフ)と呼ばれる、サイクルのない特別な種類のグラフです。ツリーは階層モデルです。

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


2

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

マップ(別名ディクショナリ)はキーと値のペアです。マップにキーを指定すると、関連付けられた値が返されます。

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

更新:「グラフ」と「マップ」を混同すると非常に混乱します。

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

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

まともなデータ構造のテキスト(たとえば、「アルゴリズム設計マニュアル」)をざっと検索すると、SOの回答の数よりも多くの情報が得られると思います。パッシブなルートをとらず、自分でいくつかの調査を始めることをお勧めします。


1
すみません、私はグラフを意味します、私はマップをタイプしました。
user918304 2011

「マップ」と「グラフ」を混同することは非常に混乱します。」:)
cpz 2014

1
「グラフは木よりも複雑」と言うのは、「カラスは鳥よりも専門的である」と言うようなものです。代わりに、「すべての木はグラフであるが、すべてのグラフが木であるとは限らない」と言うべきではないでしょうか。
dudewad 2017年

6年後は気にしない。きっとここであなたの時間をよりよく使うことができます。
duffymo 2017年

2

ツリーは特別な形式のグラフです。つまり、最小接続グラフであり、任意の2つの頂点間に1つのパスしかありません。

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

また、あなたはより多くの詳細を見ることができます:http : //freefeast.info/difference-between/difference-between-trees-and-graphs-trees-vs-graphs/


0

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


0

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


0

ツリーは次のようなダイグラフです。

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

ツリーは基本的に無向グラフであり、循環を含まないので、ツリーはグラフのより制限された形式であると言えます。ただし、ツリーとグラフには、プログラミングでさまざまなアルゴリズムを実装するための異なるアプリケーションがあります。たとえば、グラフはモデルロードマップに使用でき、ツリーは階層データ構造の実装に使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.