素人の用語でグラフとは何ですか


18

コンピューターサイエンスにおけるグラフとは何ですか?素人の用語で好ましくは。

私はウィキペディアで定義を読みました:

コンピューターサイエンスでは、グラフは抽象データ型であり、数学からグラフとハイパーグラフの概念を実装することを目的としています。

グラフデータ構造は、ノードまたは頂点と呼ばれる特定のエンティティの、エッジまたはアークと呼ばれる順序付けられたペアの有限(および場合によっては可変)のセットで構成されます。数学のように、エッジ(x、y)はxからyを指すか、またはxからyに向かうと言われます。ノードはグラフ構造の一部であっても、整数インデックスまたは参照によって表される外部エンティティであってもかまいません。

しかし、私はあまり形式的ではなく、理解しやすい定義を探しています。


データ構造のグラフを意味しますか?
システムダウン

1
うん、ごめん。ここで説明されているグラフen.wikipedia.org/wiki/Graph_(abstract_data_type)、私は、あまり形式的ではなく、理解しやすい定義を探しています。
ConditionRacer

@ Justin984カッコ付きのウィキペディアリンク(およびそれらの多くがあります)は機能しません。カッコはリンクのマークダウン形式ではうまく機能しません。さて、今後の参照のために、コメントではなく質問自体に質問に説明を追加してください。コメントはそれほど見えず、見逃しがちです。質問の上記のコメントを編集します
...-yannis

@ Justin984また、Computer Science Stack Exchange 、プログラマよりもこのような質問に少し適している場合があることに注意してください。誤解しないでください、質問はここで完全にトピックになっており、素晴らしい答えが得られましたが、私たちよりもコアなコンピュータサイエンスの概念に少し焦点を合わせているコミュニティをチェックアウトしても害はありません(しないでください)同じ質問を複数のサイトに投稿してください。間違ったサイトに投稿した場合は、自動的に正しい質問に移動できます)。
ヤニス

回答:


26

素人の完璧な例はFacebookです。あなた、あなたの友人、そして彼らの友人などのネットワークは、まとめてソーシャルグラフと呼ばれます

この「グラフ」では、人々はグラフのノードと見なされ、エッジ友情リンクです。

Facebookでは、友人は双方向の関係(AはBの友人=> BはAの友人)であるため、グラフは無向グラフです。Google+やTwitterのようなネットワークは、ここでは関係の方向に意味があるため、有向グラフと見なされます。

ノード間の関係がサイクルを形成する可能性があるため、これらのグラフはすべて循環グラフと呼ばれます。A ファミリーツリーは、一方で、他のものの間で、ある、グラフの特別な種類である非環式は家族の木relatioshipでサイクルがあることができないため。(技術的には、有向非巡回グラフ(DAG)と呼ばれます)

これはグラフに関連するすべての基本的な専門用語を網羅しているはずなので、フィールドの残りの資料を追跡できるようになります。


1
それがfacebook graph apiと呼ばれることは私には起こらなかったとは信じられません。良い例え!
ConditionRacer

4
家系図は周期的ではない?それはすべきではないが、それは残念ながら...である
マージャンVenema氏

1
@MarjanVenema、家系図は周期的ですか?(それは有向グラフなので、方向はサイクルを決定する上で重要であり、おそらくステップ関係は実際にはカウントされません。)
huon

@dbaupp:ここで詳細を説明するつもりはないので、近親相姦という言葉を1つだけ挙げておきます。
マルジャンヴェネマ

5
@MarjanVenema、あなたは私のポイントを逃しています。有向グラフのサイクルは、A -> B -> C -> A(たとえば、矢印の輪)、近親相姦が与えるパターン(A -> B -> CおよびA -> D -> Cダイヤモンド)です。家系図のサイクルにはタイムトラベルが必要です。
huon

16

グラフは、コンピューターサイエンスで使用される最も重要な数学的概念の1つです。

あなたは何度もグラフを見てきました。ある都市から別の都市へ飛行機で飛んでいると想像してください。必然的に、航空会社の素晴らしい光沢のある雑誌が目の前の座席ポケットにあります。その雑誌の裏の近くには、ほとんどの場合、その航空会社がサービスを提供する都市を円で表したマップがあり、それらの都市を結ぶフライトは曲線で表されています。それはグラフです!円で表される都市はこのグラフのノードであり、曲線で表されるフライトはエッジです。グラフは、ノードとノードを接続するエッジを備えたものです。

これらの単純なグラフをさまざまな方法で装飾できます。その地図を見ているときに、たくさんの円や線を見たくありません。それらの都市には名前があります。これらの都市にラベルを付けると、ラベル付きグラフになります。(たとえば、フライト1234などのエッジにラベルを付けることもできます。)コンピューターサイエンスは、多くの場合、データをノードに関連付け、場合によってはエッジに関連付けますが、これはラベルの単なる拡張です。ラベル付きグラフのままです。都市Aから都市Bに直接飛ぶことができるが、都市Bから都市Aに直接飛べない場合、別の装飾が生じます。これを描写する明白な方法は、都市を結ぶ線に矢印を置いて、この一方向の関係を表すことです。これで、有向グラフができました。

リンクリスト、ツリー、状態遷移図、および他の多くのコンピューターサイエンスデータ構造はすべて、グラフの例です。これは非常に強力な概念です。


実際にその例を拡張して、あなたの例で説明したすべてのエンティティをグラフ(都市、飛行機、雑誌、地図など)の頂点として描くことができ、地図自体はただ1つの頂点であることに注意してください。
デミアンブレヒト

14

より良い質問は、「グラフは何のために使用されないのですか?」です。コンピューターサイエンスは、多くの点でグラフの研究です。

グラフは、素人の用語では、接続点を表す「ノード」または「頂点」と呼ばれる任意の抽象オブジェクトのコレクションです。次に、それらは「パス」または「エッジ」を介して接続されます。抽象データ型「Graph」は、数学的な「Graph」の実装です。したがって、基本的にはフィールドとしてノードとエッジがあり、それらに対して実行できるさまざまな操作があります。たとえば、グラフのコレクションに新しいノードを追加できます(これは、言語に応じてリスト、配列、またはその他の構造になります)。次に、そのノードを既存のノードにリンクできます。操作には、グラフのトラバース、2つのノードがエッジを共有する(接続されている)かどうかの確認、ノードまたはエッジからの値の取得、グラフからのノードまたはエッジの削除も含まれます。

使用率に関する限り、グラフは至る所で使用されます。ネットワーキングはそれらを特に頻繁に使用しますが、それらは人工知能、データマイニング、ゲーム開発、ジオインフォマティクス、および他の多くの分野で見られます。正式なコンピューターサイエンスでは、さらに多くの使用法、つまり状態を表す方法として使用されます。

事実上、一連の接続として表すことができるものはすべてグラフとして表すことができ、そのADTを介して何らかの形式で実装できます。

これが私が作ったグラフィックの例です:

グラフの例


3

グラフは、頂点と呼ばれる線で接続されたオブジェクトのコレクションです。

「グラフ」という用語は、ソフトウェア開発で使用される多くのデータ構造の抽象化および一般化です。リンクリスト、バイナリツリー、ASTはすべてグラフです。

基本的に、オブジェクトを相互に関連付けるポインターを持つオブジェクトのコレクションはグラフです。グラフを作成したら、グラフ理論の原理を適用して特定の問題解決できます。

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