データ構造 - 図。

マップ

ツリーデータ構造があまりにも、図非線形テーブルであり、図ツリーを比較して、より複雑な非線形テーブルのデータ構造です。

そのような二部グラフのような地図検索、最短経路、最小スパニングツリーのような非常に複雑な図は、関係する多くのアルゴリズムが存在します。

 

ツリーの要素は、ノードと呼ばれ、図中の要素は、頂点と呼ばれます。

グラフの頂点は、他の頂点との接続関係を確立することができます。

この関係は、側面(エッジ)の確立と呼ばれています。

 

 

マイクロブロギング、文字や他のソーシャルネットワーク等の友情は非常に典型的なグラフ構造です。

 

あなたは二人のユーザー間で共通の友人を追加した場合、それは2間のエッジを確立します。だから、全体の友情マイクロチャネルは、表現するためにマップを使用することができます。

各ユーザは、接続された頂点を有するストリップのエッジの数に対応することができるどのように多くの友人、前記頂点は度(度)と呼ばれています。

 

有向グラフと無向グラフ

 

実際には、そのようなマイクロブログなど、いくつかの異なるソーシャルソフトウェア、。Weiboは単方向、ユーザAがユーザBに興味を持っているされた懸念、しかし、ユーザBがユーザAに焦点を当てることができないことができ

 

また、これは一方向の図との社会的関係を表すことができます。実際には、側面方向があることができ

 

ユーザAがユーザBに関心がある場合、我々は、エッジの方向を表すために、図中の矢印で、BにAからエッジを描きます。

ユーザAとユーザBとが互いに心配ならば、我々は、Aから点B側に線を引き、次いでAから点B側に線を引きます。

私たちは、と呼ばれる指向性図のこちら側を呼び出す「有向グラフを。」図ないエッジ方向を「無向グラフ」と呼ばれています

 

 

有向グラフでは、我々は(IN-度)浸透度および程度(アウト度)に分割しました。

頂点のうち、ポイント頂点どのように多くの側面を示しています。

頂点の程度は、エッジが他の頂点に出発点であるどのように多くの頂点を示しています。

 

それと同じように、それは、それは多くの人々の関心の程度を意味するか、ファンの多くを示しています。

 

加重グラフ

 

QQ、機能のQQの親密:ソーシャル・ソフトウェアもあります。

QQは、ユーザー間のバディ関係を記録するだけでなく、二人のユーザー間の親密度を記録するだけでなく。

2人のユーザーが頻繁に旅行する場合は、その親密さは比較的高く、ない、頻繁な旅行者は、親密さが比較的低い場合。

 

この関係のバディ親密さを記録したレコードの図に、重量(重み付きグラフ)を描画重み付きグラフを使用する必要があります。

 

重み付けされたグラフでは、それぞれの側がウェイト(重り)を持って、我々は再びこの権利を通じてQQの友人との親密さを示すことができます。

 

 

図の保存。

 

 隣接行列(隣接行列)

図の隣接行列は、最も直感的な保存方法です。

隣接従属下層の2次元アレイをマトリックス。

無向グラフのために、頂点iとjの頂点の間にエッジが存在する場合、我々条A [I] [J]とA [j] [i]を1としてマークされます。

図のために、A頂点jの間の頂点へのIエッジの頂点から頂点I Jを指す矢印がある、場合には、我々は、A [i]が[j]は1としてマークされるであろう。

重み付きグラフのために、アレイ対応する重みに格納されます。

 

 

短所

隣接行列がグラフで表され、単純かつ直感的であるが、より多くのメモリ空間が浪費されます。

 

無向グラフのために、A [i] [j]は1に等しく、そしてA [j]が[I]は確かに1に等しくなる場合。実際には、我々は唯一の缶を保存する必要があります。

我々は、それが二つの部分に分割対角線使用する場合には、二次元アレイ無向グラフです。

その後、我々はこれだけの十分な、無駄に他の半分の上または下半分のスペースを使用する必要があります。

 

私たちは保存する場合、場合にも、スパース言うことですグラフ(スパース行列)、頂点の多くは、各頂点側が、あまりないです。

その隣接行列の格納方法は、さらに多くのスペースの無駄です。

 

このようなマイクロチャネルユーザーの数百万、図の数百万の頂点への対応があります。しかし、各ユーザの友人にのみまた、一般的に、3または500の多くではありません。

我々は隣接行列ストレージ、およびストレージスペースのほとんどを使用する場合は無駄になっています。

 

利点

直接シンプルストレージ隣接行列、2つの頂点を取得する際の関係に基づいて、アレイので、非常に効率的であることからです。

これは、簡単に隣接行列ストレージ図の別の利点を使用して計算されます。

図に記憶された隣接行列は、行列の間で多くの図の算出動作に変換することができるからです。

 

隣接リスト(隣接リスト)

 

ビットをリスト乱視隣接テーブルは、リンクされたリストに対応する各頂点は、頂点に格納され、他の頂点が接続されています。

図頂点が向けられている記憶各頂点リストに対応する、隣接マップに記憶テーブルがあります。

 

無向グラフについても同様であるが、この頂点が接続する頂点その縁部を有すると共に、各頂点のリストが格納されています。

 

我々は4の頂点2、頂点からエッジが存在するかどうかを決定したい場合は、リストを参照するに頂点4が存在する場合、我々は、リストの頂点2対応部分を横断しなければなりません。

隣接行列ストレージを比較し、テーブル内の2つの隣接する頂点間のクエリの関係は、それほど効率的ではありません。

 

隣接行列は、スペースのより多くの廃棄物を保存し、より多くの時間を節約を使用しています。

これとは対照的に、隣接するテーブル記憶がより多くのスペースを節約するが、非常に時間のかかるを使用しています。

 

チェーンが長すぎる場合、隣接テーブルには、リスト法に基づく紛争を解決するために、ハッシュテーブルのようなハッシュテーブルを見ました。

検索効率を改善するために、我々は、このような平衡二分探索木などの他のより効率的なデータ構造によって置き換えられて一覧表示することができます。

また、ハッシュテーブルのような隣接テーブルは、「改善するためにアップグレードしました。」ことができます 私たちは、平衡二分探索木への表に隣接することができます。例えば、赤黒木

2つの頂点間に辺がある場合私たちは、より迅速に見つけることができます。

バイナリ検索ツリーは、ジャンプテーブル、ハッシュテーブルなどなど、他の動的データ構造に置き換えることができます。

加えて、我々はまた、リストの順序動的配列を変更することができ、二分探索法を迅速はい2つの頂点の間にエッジが存在する位置を確認するために使用することができます。

 

 

 

 

 

 

 

公開された113元の記事 ウォン称賛25 ビュー30000 +

おすすめ

転載: blog.csdn.net/qq_42006733/article/details/104732888