TIL6. グラフィックとグラフィックの参照
6223 ワード
Today I Learned
今日はグラフを整理し,グラフを探索するアルゴリズムを整理した.
グラフ#グラフ#
グラフは、ノードとノード、ノードとノードを接続する幹線からなる非線形データ構造です.
グラフィックのフィーチャーとツリーの比較
グラフは、ノードとノード、ノードとノードを接続する幹線からなる非線形データ構造です.
グラフィックのフィーチャーとツリーの比較
グラフィックの表示
グラフには大きく2つの表現があります.(もちろん、もっとあるかもしれませんが)
隣接リストと隣接マトリクス
隣接表は次のとおりです.
// adj[from][to] 형식의 인덱스로 나타낼 수 있다.
const adjacentList: Array<Array<number>> = [
[],
[2, 4],
[1, 3],
[1, 2],
[3],
[],
];
この表現は、幹線(u,v)を検出するのにO(n)の時間がかかるが、すべてのノードに対して、この表現はより有利である可能性がある.また、メモリの使用はほとんどありません.隣接行列は以下のように表される.
/* adj[from][to] 형식의 인덱스로 나타낼 수 있다.
* 연결된 간선은 1로, 그렇지 않으면 0으로 표현한다.
*/
const adjMatrix: Array<Array<number>> = [
[0, 1, 0, 0, 0],
[1, 0, 1, 1, 0],
[0, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[0, 0, 0, 1, 0],
];
この表現の利点は,幹線(u,v)をO(1)にナビゲートできる時間であるが,ノードの数が多いほどメモリの消費量が多くなることである.そのため、場合によっては適当に使ったほうがいいです.グラフィックナビゲーションアルゴリズム
次は幅優先探索の原理です.
1.最初のノードにアクセスします.
2.現在位置の幹線に接続されているすべての隣接ノードに移動します.
3.まだアクセスされていない隣接ノードが存在する場合、アクセス処理後、次のノードにアクセスします.
図から分かる重要な点は、図中の線がどんなに大きくても、図探索アルゴリズムによってアクセスする線を接続すれば、生成生成生成ツリーを生成できることである.
BFS、DFSの時間的複雑さ
通常最も多く用いられるBFS,DFSの時間的複雑度は隣接リストで表され,O(ノード数)+E(幹線数)の時間的複雑度を持つ.隣接行列で表すとO(N^2)の時間的複雑さがある.
実装の複雑さは、システムスタックを使用するdfsとは異なり、bfsは再帰的ではなくキューデータ構造を使用するため、少し複雑になる可能性がありますが、どのノードを参照してもスタックオーバーフローは発生しませんので、メモリの面で役立ちます.
Reference
この問題について(TIL6. グラフィックとグラフィックの参照), 我々は、より多くの情報をここで見つけました https://velog.io/@mrbartrns/TIL6.-그래프와-그래프-탐색テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol