web-dev-qa-db-ja.com

素人の言葉でグラフとは何ですか

コンピュータサイエンスでのグラフとは何ですか。素人の言葉ではできれば。

私は Wikipedia の定義を読みました:

コンピュータサイエンスでは、グラフは、数学からのグラフとハイパーグラフの概念を実装するための抽象的なデータ型です。

グラフのデータ構造は、ノードまたは頂点と呼ばれる特定のエンティティーの、エッジまたはアークと呼ばれる順序付けられたペアの有限の(場合によっては変更可能な)セットで構成されます。数学の場合と同様に、エッジ(x、y)は、xからyへのポイントまたは移動と呼ばれます。ノードは、グラフ構造の一部である場合もあれば、整数インデックスまたは参照で表される外部エンティティである場合もあります。

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

19
ConditionRacer

完璧な素人の例はFacebookかもしれません。あなた、あなたの友人、彼らの友人などのネットワークは、まとめて social graph と呼ばれます。

この「グラフ」では、peopleはグラフのnodesと見なされ、 エッジ友情リンクです。

Facebookではfriendは双方向の関係(AはBの友達=> BはAの友達)なので、グラフは無向グラフ。 Google+やTwitterなどのネットワークは、関係の方向がここで意味を持つため、有向グラフと見なされます。

ノード間の関係が循環を形成する可能性があるため、これらのグラフはすべてcyclicグラフと呼ばれます。一方、ファミリーツリーは、とりわけ、非循環である特別な種類のグラフです家系図の関係には循環がないため。 (技術的には有向非巡回グラフ(DAG)と呼ばれます。

これは、グラフに関連するすべての基本的な専門用語をカバーするはずです。これで、フィールドの残りの資料をたどることができるはずです。

27
Karthik T

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

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

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

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

16
David Hammen

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

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

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

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

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

Graph Example

14
World Engineer

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

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

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

3
Robert Harvey