この記事はWeChatの公開アカウント「Beta Learns JAVA」から転載したもので、著者はSilently9527です。この記事を転載する場合は、Beta Learning JAVA パブリック アカウントにお問い合わせください。 前回の記事では、深さ優先探索と、深さ優先探索を使用してグラフ内のパスを見つける方法について学習しました。この記事では、深さ優先探索アルゴリズムの他の適用シナリオについて引き続き学習します。 接続されたコンポーネントグラフからすべての接続コンポーネントを見つけることも、深さ優先探索の応用シナリオです。連結成分とは何でしょうか? この定義は、前回の記事「ソーシャル ネットワークで 2 人の人が友人であるかどうかを検出する方法 (結合検索アルゴリズム)」で説明しました。 この記事では、結合検索アルゴリズムによって接続性チェックを実装します。この記事では、深さ優先探索法を使用して、グラフ内のすべての接続コンポーネントを検索します。 接続コンポーネントのAPI定義
接続コンポーネントのAPI実装 以前と同様に、頂点をスキャンしない場合はマークする必要があるため、marked[]配列を定義する必要があります。 グラフ内の連結成分の総数を数えるには、変数countを定義する必要がある。 2 つの頂点が接続されているかどうかを判断するには、接続されている頂点の対応する識別値を同じ値として記録する必要があります。接続メソッドを呼び出すときに、2 つの頂点の識別値を直接取り出して比較します。同じ場合は接続されており、そうでない場合は接続されていません。 使用する識別値はカウント値です。各頂点には識別値を格納する必要があるため、ids[]配列も必要です。
ユニットテスト このようなグラフを構築すると、連結成分の総数は3になるはずです。
深さ優先探索に基づく接続性チェックは、理論的には、以前に実装された和集合検索アルゴリズムよりも高速です。これは、深さ優先探索で実装された接続性チェックは一定時間で完了することが保証されるのに対し、和集合検索アルゴリズムではそれができないためです。 しかし、union-find にも独自の利点があります。グラフを完全に構築して表現する必要がなく、さらに重要なことに、union-find アルゴリズムは動的にノードを追加します。 無向グラフにサイクルがあるかどうかを確認する実装の複雑さを軽減するために、グラフには自己ループや平行エッジが存在しないものと仮定します。 頂点 v から始まるループがある場合、頂点 v から始まる接続コンポーネント内の頂点の隣接頂点が v であることを意味し、検索プロセス中に頂点 v が必ず再び発生します。 実装のアイデア:
メソッド dfs のパラメーター v は検索する頂点を表し、pV は v に到達する頂点を表します。したがって、v の隣接リストにマークされた頂点があり、この頂点が v に到達する頂点と等しくない場合、グラフにサイクルが存在します。 無向グラフが二部グラフであるかどうかを確認する二部グラフとは何ですか? グラフ内の各辺は、以下に示すように、異なる部分に属する頂点を接続します。 赤いノードは 1 つのセットを表し、白いノードは別のセットを表し、各エッジで接続された 2 つの頂点は異なるセットに属します。 実際の例で理解するのは簡単です。映画と俳優の関係。映画は頂点であり、俳優は頂点です。映画と俳優の間には直接のエッジはなく、俳優の間にも直接のエッジはありません。これは二部グラフです。
この記事のすべてのソースコードは、github リポジトリに保存されています: https://github.com/silently9527/JavaCore |
<<: 新しい3Dバイオプリンティング技術は皮膚と骨の損傷を同時に修復できる
>>: チューリング賞受賞者:人工知能を実装したものは、もはや人工知能とは呼ばれない
[[374354]]パーセプトロンは、バイナリ分類タスク用の線形機械学習アルゴリズムです。これは、人...
最近、皆さんは次のような H5 に悩まされていると思います。広告ポスター500枚の予算は2,000元...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
パターン認識や機械学習のファンであれば、機械学習では避けられない重要な問題であるサポートベクターマシ...
同研究機関はAIインフラの需要について徹底的な調査を実施し、AIシステムに必要なエネルギーは本格導入...
昨年末の ChatGPT の登場により、生成 AI の流行が巻き起こり、現在ではほぼすべての主要ソフ...
現在、スマートシティや無人店舗からスマートブレスレットやスマート温度調節器まで、私たちの身の回りには...
[[217139]]この記事では、k-means アルゴリズムを使用して画像の色を復元することを提案...
[[399115]]事前トレーニングにより、下流のタスクのパフォーマンスが大幅に向上することが示され...
1. 機械学習プラットフォームまず、Du Xiaomanの機械学習プラットフォームの背景、開発プロセ...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...