この記事は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バイオプリンティング技術は皮膚と骨の損傷を同時に修復できる
>>: チューリング賞受賞者:人工知能を実装したものは、もはや人工知能とは呼ばれない
顔認識技術がさまざまな分野で持つ大きな可能性は、ほとんど想像できないほどです。ただし、使用する前に、...
新年の初めに、酉年の運勢を計算することは、多くの若者が夕食後に好んで行うことです。 「占い」はどちら...
回答者の大多数 (59.4%) は明確なインシデント管理プロセスを導入しており、自動化のレベルはニー...
仕事の環境は、主に GenAI の進歩によって、前例のない変化を遂げています。ほんの数年前には初期段...
最近、スイスのグラウビュンデン応用科学大学のチームが、円周率の62.8兆桁の計算を101日と9時間で...
1. GANの紹介「食べるために一生懸命働く人、食べるために一生懸命働く人こそが人々の中で最も優れて...
編集・執筆:Yifeng制作:51CTO テクノロジースタック(WeChat ID:blog) 3月...
たった今、百度が公式発表しました。自動運転車は2018年に量産される予定です。 Subversion...
[[266327]]人工知能とオープンソースのハードウェアツールを組み合わせることで、深刻...
弱い人工知能の時代が到来し、人々の日常生活はアルゴリズムが提供するサービスと切り離せないものとなって...
最近、「遺伝的アルゴリズムの紹介とデータ サイエンスにおけるその応用」というタイトルの記事が Ana...
[[428679]] Tesla、Google、Microsoft、Facebook などのテクノ...