目次
次に、Boruvka アルゴリズムで最小スパニング ツリーを見つける手順の概要を説明します。 -
各サブセットについて、すべてのエッジをトラバースし、それを別のサブセットに接続する最小のエッジを見つけます。
説明
find 関数は、パス圧縮を使用して要素のサブセットを検索するヘルパー関数です。要素が属するサブセットの代表 (親ノード) を再帰的に検索し、パスを圧縮して将来のクエリを最適化します。
unionSets 関数は、ランクベースのマージを使用して 2 つのサブセットをマージするもう 1 つの補助関数です。 2 つのサブセットの代表を見つけて、ランクに基づいてそれらをマージし、バランスの取れたツリーを維持します。
boruvkaMST 関数は、エッジ ベクトルと頂点の数 (V) を入力として受け取ります。 MST を見つけるために Boruvka アルゴリズムを実装します。
boruvkaMST 関数内で、MST のエッジを保存するベクトル selectedEdges を作成します。
最も安価な配列を使用する代わりに、エッジ優先キュー (pq) を作成します。グラフの端で初期化します。
メイン ループは、前のメソッドと同様に、numTrees が 1 になるまで実行されます。
各反復で、優先キューから最小重みエッジ (minEdge) を抽出します。
次に、検索関数を使用して、minEdge のソースとターゲットが属するサブセットを検索します。
Boruvka のアルゴリズムは、重み付きグラフの最小スパニング ツリーを見つけるための効率的なソリューションを提供します。私たちのチームは、C でアルゴリズムを実装する際に、従来のアプローチまたは「単純な」アプローチという 2 つの異なるパスを詳しく調査しました。もう 1 つは優先キューを利用するものです。当面の問題の特定の要件によって異なります。各方法には特定の利点があり、それに応じて実装できます。 Boruvka のアルゴリズムを理解して実装することで、C プロジェクトの最小スパニング ツリー問題を効率的に解決できます。
ホームページ バックエンド開発 C++ 最小スパニング ツリー用の C++ の Boruvka アルゴリズム

最小スパニング ツリー用の C++ の Boruvka アルゴリズム

Aug 27, 2023 pm 02:53 PM
c 最小スパニングツリー ボルブカアルゴリズム

最小スパニング ツリー用の C++ の Boruvka アルゴリズム

グラフ理論では、接続された重み付きグラフの最小スパニング ツリー (MST) を見つけることが一般的な問題です。 MST は、すべての頂点を接続し、合計エッジの重みを最小化するグラフ エッジのサブセットです。この問題を解決する効率的なアルゴリズムが Boruvka アルゴリズムです。

###文法### リーリー ###アルゴリズム###

次に、Boruvka アルゴリズムで最小スパニング ツリーを見つける手順の概要を説明します。 -

MST を空のセットに初期化します。

  • 各頂点のサブセットを作成します。各サブセットには頂点が 1 つだけ含まれます。

  • 最小スパニング ツリー (MST) に V-1 個のエッジができるまで次の手順を繰り返します (V はグラフ内の頂点の数です) −

  • 各サブセットについて、他のサブセットに接続する最も安価なエッジを見つけます。

    • 選択したエッジを最小スパニング ツリーに追加します。

    • 選択したエッジのサブセットに対して結合操作を実行します。

    • 最小スパニングツリーを出力します。
  • ###方法###

    Boruvka アルゴリズムでは、各サブセットを接続する最も安価なエッジを見つける方法が複数あります。以下に 2 つの一般的な方法を示します。 -

  • 方法 1: 簡単な方法

各サブセットについて、すべてのエッジをトラバースし、それを別のサブセットに接続する最小のエッジを見つけます。

選択したエッジを追跡し、ジョイント操作を実行します。

###例### リーリー ###出力### リーリー

説明

の中国語訳は次のとおりです:

説明

最初に、エッジとサブセットという 2 つの構造を定義します。エッジは、エッジのソース、宛先、重みを含むグラフ内のエッジを表します。サブセットは、親およびランキング情報を含むユニオン クエリ データ構造のサブセットを表します。

find 関数は、パス圧縮を使用して要素のサブセットを検索するヘルパー関数です。要素が属するサブセットの代表 (親ノード) を再帰的に検索し、パスを圧縮して将来のクエリを最適化します。

unionSets 関数は、ランクベースのマージを使用して 2 つのサブセットをマージするもう 1 つの補助関数です。 2 つのサブセットの代表を見つけて、ランクに基づいてそれらをマージし、バランスの取れたツリーを維持します。

boruvkaMST 関数は、エッジ ベクトルと頂点の数 (V) を入力として受け取ります。 MST を見つけるために Boruvka アルゴリズムを実装します。

boruvkaMST 関数内で、MST のエッジを保存するベクトル selectedEdges を作成します。

サブセットを表す Subset 構造体の配列を作成し、デフォルト値で初期化します。

また、各サブセットの最も安価なエッジを追跡するために、最も安価な配列も作成します。

変数 numTrees は頂点の数に初期化され、MSTWeight は 0 に初期化されます。

アルゴリズムは、すべてのコンポーネントがツリー内に収まるまでコンポーネントを繰り返し結合することによって進められます。メイン ループは、numTrees が 1 になるまで実行されます。

メイン ループの各反復で、すべてのエッジを反復し、各サブセットの最小重み付きエッジを見つけます。エッジが 2 つの異なるサブセットを接続する場合、最も重みの低いエッジのインデックスで最も安価な配列を更新します。

Next, we traverse all subsets. サブセットに最小の重みを持つエッジがある場合、それを selectedEdges ベクトルに追加し、MSTWeight を更新し、サブセットの和集合演算を実行して、numTrees の値を減らします。

最後に、MST 重みと選択したエッジを出力します。

main 関数は、ユーザーに頂点とエッジの数を入力するよう求めます。次に、各エッジの入力 (ソース、ターゲット、重み) を取得し、その入力を使用して boruvkaMST 関数を呼び出します。

方法 2: 優先キューを使用する

重みでソートされた優先キューを作成してエッジを保存します。

各サブセットについて、優先キューから別のサブセットに接続する最小重みエッジを見つけます。

選択したエッジを追跡し、ジョイント操作を実行します。

###例### リーリー ###出力### リーリー

説明

の中国語訳は次のとおりです:

説明

このアプローチでは、優先キューを使用して、各サブセットの最小重み付きエッジを見つけるプロセスを最適化します。以下はコードの詳細な説明です-

コード構造とヘルパー関数 (find や UnionSets など) は、前のメソッドと同じままです。

boruvkaMST 関数は、優先キューを使用して各サブセットの最小加重エッジを効率的に見つけるように変更されました。

最も安価な配列を使用する代わりに、エッジ優先キュー (pq) を作成します。グラフの端で初期化します。

メイン ループは、前のメソッドと同様に、numTrees が 1 になるまで実行されます。

各反復で、優先キューから最小重みエッジ (minEdge) を抽出します。

次に、検索関数を使用して、minEdge のソースとターゲットが属するサブセットを検索します。

サブセットが異なる場合は、minEdge を selectedEdges ベクトルに追加し、MSTWeight を更新し、サブセットのマージを実行して、numTrees を減らします。

プロセスは、すべてのコンポーネントがツリー内に配置されるまで続行されます。

最後に、MST 重みと選択したエッジを出力します。

主な機能は前の方法と同じですが、テスト目的で事前定義された入力があります。

###結論は###

Boruvka のアルゴリズムは、重み付きグラフの最小スパニング ツリーを見つけるための効率的なソリューションを提供します。私たちのチームは、C でアルゴリズムを実装する際に、従来のアプローチまたは「単純な」アプローチという 2 つの異なるパスを詳しく調査しました。もう 1 つは優先キューを利用するものです。当面の問題の特定の要件によって異なります。各方法には特定の利点があり、それに応じて実装できます。 Boruvka のアルゴリズムを理解して実装することで、C プロジェクトの最小スパニング ツリー問題を効率的に解決できます。

以上が最小スパニング ツリー用の C++ の Boruvka アルゴリズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C 言語の定数とは何ですか?例を挙げていただけますか? C 言語の定数とは何ですか?例を挙げていただけますか? Aug 28, 2023 pm 10:45 PM

定数は変数とも呼ばれ、一度定義されると、その値はプログラムの実行中に変更されません。したがって、変数を固定値を参照する定数として宣言できます。テキストとも呼ばれます。定数は、Const キーワードを使用して定義する必要があります。構文 C プログラミング言語で使用される定数の構文は次のとおりです - consttypeVariableName; (または) consttype*VariableName; さまざまなタイプの定数 C プログラミング言語で使用されるさまざまなタイプの定数は次のとおりです: 整数定数 - 例: 1,0 、34、4567 浮動小数点定数 - 例: 0.0、156.89、23.456 8 進数および 16 進数の定数 - 例: 16 進数: 0x2a、0xaa.. 8 進数

VSCode および VS C++ IntelliSense が機能しない、またはライブラリを選択しない VSCode および VS C++ IntelliSense が機能しない、またはライブラリを選択しない Feb 29, 2024 pm 01:28 PM

VS Code および Visual Studio C++ IntelliSense は、特に大規模なプロジェクトで作業している場合、ライブラリを選択できない場合があります。 #Include<wx/wx.h> の上にマウスを移動すると、「ソース ファイル 'string.h' を開けません」というエラー メッセージが表示され (「wx/wx.h」に応じて異なります)、オートコンプリート関数が応答しなくなることがあります。この記事では、VSCode および VSC++ IntelliSense が機能しない場合、またはライブラリを抽出できない場合の対処法を説明します。私のインテリセンスが C++ で動作しないのはなぜですか?大きなファイルを扱う場合、IntelliSense が機能しないことがあります。

C++ で Prim のアルゴリズムを使用する方法 C++ で Prim のアルゴリズムを使用する方法 Sep 20, 2023 pm 12:31 PM

タイトル: C++ での Prim アルゴリズムの使用とコード例 はじめに: Prim アルゴリズムは、一般的に使用される最小スパニング ツリー アルゴリズムであり、主にグラフ理論の最小スパニング ツリー問題を解決するために使用されます。 C++ では、合理的なデータ構造とアルゴリズムの実装を通じて、Prim のアルゴリズムを効果的に使用できます。この記事では、C++ で Prim のアルゴリズムを使用する方法を紹介し、具体的なコード例を示します。 1. Prim アルゴリズムの概要 Prim アルゴリズムは貪欲なアルゴリズムであり、頂点から開始し、最小スパニング ツリーの頂点セットを徐々に拡張していきます。

Xboxエラーコード8C230002を修正 Xboxエラーコード8C230002を修正 Feb 27, 2024 pm 03:55 PM

エラー コード 8C230002 が原因で、Xbox でコンテンツを購入または視聴できませんか?一部のユーザーは、本体でコンテンツを購入または視聴しようとすると、引き続きこのエラーが発生します。申し訳ありませんが、Xbox サービスに問題があります。後でもう一度お試しください。この問題のヘルプが必要な場合は、www.xbox.com/errorhelp にアクセスしてください。ステータス コード: 8C230002 このエラー コードは通常、サーバーまたはネットワークの一時的な問題によって発生します。ただし、アカウントのプライバシー設定や保護者による制限など、他の理由により、特定のコンテンツの購入または表示が妨げられる場合があります。 Xbox エラー コード 8C230002 を修正する Xbox 本体でコンテンツを視聴または購入しようとしたときにエラー コード 8C が表示された場合

C++ で配列の最小要素と最大要素を見つける再帰的プログラム C++ で配列の最小要素と最大要素を見つける再帰的プログラム Aug 31, 2023 pm 07:37 PM

整数配列 Arr[] を入力として受け取ります。目標は、再帰的メソッドを使用して配列内の最大要素と最小要素を見つけることです。再帰を使用しているため、長さ = 1 に達するまで配列全体を反復処理し、基本ケースを形成する A[0] を返します。それ以外の場合、現在の要素は現在の最小値または最大値と比較され、その値は後続の要素に対して再帰的に更新されます。この場合のさまざまな入出力シナリオを見てみましょう −入力 −Arr={12,67,99,76,32}; 出力 −配列内の最大値: 99 説明 &mi

中国東方航空、C919旅客機が間もなく実運用に入ると発表 中国東方航空、C919旅客機が間もなく実運用に入ると発表 May 28, 2023 pm 11:43 PM

5月25日のニュースによると、中国東方航空は性能説明会でC919旅客機の最新の進捗状況を明らかにした。同社によると、COMACと締結したC919購入契約は2021年3月に正式に発効し、最初のC919航空機は2022年末までに引き渡される予定だという。近く正式に実運用が開始される見通しだ。中国東方航空は上海をC919の商業運航の主拠点とし、2022年と2023年に計5機のC919旅客機を導入する計画だ。同社は、今後の導入計画については、運行実態や路線網計画を踏まえて決定するとしている。編集者の理解によれば、C919は世界で完全に独立した知的財産権を有する中国の新世代の単通路本線旅客機であり、国際的に認められた耐空基準に準拠している。すべき

数字の螺旋パターンを出力する C++ プログラム 数字の螺旋パターンを出力する C++ プログラム Sep 05, 2023 pm 06:25 PM

数値をさまざまな形式で表示することは、学習における基本的なコーディング問題の 1 つです。条件文やループ文などのさまざまなコーディング概念。アスタリスクなどの特殊文字を使用して三角形や四角形を印刷するさまざまなプログラムがあります。この記事では、C++ の正方形と同じように、数値をスパイラル形式で出力します。行数 n を入力として受け取り、左上隅から開始して右、次に下、次に左、次に上、そして再び右、というように移動します。数字付きスパイラル パターン 123456724252627282982340414243309223948494431102138474645321120373635343312191817161514

C言語におけるvoidキーワードの機能 C言語におけるvoidキーワードの機能 Feb 19, 2024 pm 11:33 PM

C の void は、空の型、つまり特定の型を持たないデータを表すために使用される特別なキーワードです。 C言語ではvoidは主に以下の3つの場面で使われます。関数の戻り値の型は void です。C 言語では、関数は int、float、char などのさまざまな戻り値の型を持つことができます。ただし、関数が値を返さない場合は、戻り値の型を void に設定できます。これは、関数が実行された後、特定の値を返さないことを意味します。例: voidhelloWorld()

See all articles