Javaを使用して最小スパニングツリーアルゴリズムを実装する方法
Java を使用して最小スパニング ツリー アルゴリズムを実装する方法
最小スパニング ツリー アルゴリズムは、グラフ理論の古典的な問題であり、重み付けされた最小値を解くために使用されます。接続されたグラフスパニングツリー。この記事では、Java 言語を使用してこのアルゴリズムを実装する方法を紹介し、具体的なコード例を示します。
- 問題の説明
各エッジに重みがある接続グラフ G が与えられた場合、T 内のすべてのエッジの重みの合計が次のような最小スパニング ツリー T を見つける必要があります。は最小です。 - Prim アルゴリズム
Prim アルゴリズムは、最小スパニング ツリー問題を解決するために使用される貪欲なアルゴリズムです。その基本的な考え方は、頂点から開始してスパニング ツリーを徐々に拡張し、すべての頂点がスパニング ツリーに追加されるまで、既存のスパニング ツリーに最も近い頂点を毎回選択することです。
以下は、Prim のアルゴリズムの Java 実装例です:
import java.util.ArrayList; import java.util.List; import java.util.PriorityQueue; import java.util.Queue; class Edge implements Comparable<Edge> { int from; int to; int weight; public Edge(int from, int to, int weight) { this.from = from; this.to = to; this.weight = weight; } @Override public int compareTo(Edge other) { return Integer.compare(this.weight, other.weight); } } public class Prim { public static List<Edge> calculateMST(List<List<Edge>> graph) { int n = graph.size(); boolean[] visited = new boolean[n]; Queue<Edge> pq = new PriorityQueue<>(); // Start from vertex 0 int start = 0; visited[start] = true; for (Edge e : graph.get(start)) { pq.offer(e); } List<Edge> mst = new ArrayList<>(); while (!pq.isEmpty()) { Edge e = pq.poll(); int from = e.from; int to = e.to; int weight = e.weight; if (visited[to]) { continue; } visited[to] = true; mst.add(e); for (Edge next : graph.get(to)) { if (!visited[next.to]) { pq.offer(next); } } } return mst; } }
- Kruskal アルゴリズム
Kruskal アルゴリズムは、最小スパニング ツリー問題を解決するために使用される貪欲なアルゴリズムでもあります。 。その基本的な考え方は、グラフ内のすべてのエッジを重みに従って小さいものから大きいものまで並べ替え、それらを順番にスパニング ツリーに追加することです。エッジを追加するとき、エッジの 2 つの端点が同じに属していない場合は、接続コンポーネントを作成すると、これらのエッジをスパニング ツリーに追加でき、2 つのエンドポイントが接続コンポーネントにマージされます。
以下は、Kruskal アルゴリズムの Java 実装例です:
import java.util.ArrayList; import java.util.Collections; import java.util.List; class Edge implements Comparable<Edge> { int from; int to; int weight; public Edge(int from, int to, int weight) { this.from = from; this.to = to; this.weight = weight; } @Override public int compareTo(Edge other) { return Integer.compare(this.weight, other.weight); } } public class Kruskal { public static List<Edge> calculateMST(List<Edge> edges, int n) { List<Edge> mst = new ArrayList<>(); Collections.sort(edges); int[] parent = new int[n]; for (int i = 0; i < n; i++) { parent[i] = i; } for (Edge e : edges) { int from = e.from; int to = e.to; int weight = e.weight; int parentFrom = findParent(from, parent); int parentTo = findParent(to, parent); if (parentFrom != parentTo) { mst.add(e); parent[parentFrom] = parentTo; } } return mst; } private static int findParent(int x, int[] parent) { if (x != parent[x]) { parent[x] = findParent(parent[x], parent); } return parent[x]; } }
- 使用例
以下は簡単な使用例です:
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<List<Edge>> graph = new ArrayList<>(); graph.add(new ArrayList<>()); graph.add(new ArrayList<>()); graph.add(new ArrayList<>()); graph.add(new ArrayList<>()); graph.get(0).add(new Edge(0, 1, 2)); graph.get(0).add(new Edge(0, 2, 3)); graph.get(1).add(new Edge(1, 0, 2)); graph.get(1).add(new Edge(1, 2, 1)); graph.get(1).add(new Edge(1, 3, 5)); graph.get(2).add(new Edge(2, 0, 3)); graph.get(2).add(new Edge(2, 1, 1)); graph.get(2).add(new Edge(2, 3, 4)); graph.get(3).add(new Edge(3, 1, 5)); graph.get(3).add(new Edge(3, 2, 4)); List<Edge> mst = Prim.calculateMST(graph); System.out.println("Prim算法得到的最小生成树:"); for (Edge e : mst) { System.out.println(e.from + " -> " + e.to + ",权重:" + e.weight); } List<Edge> edges = new ArrayList<>(); edges.add(new Edge(0, 1, 2)); edges.add(new Edge(0, 2, 3)); edges.add(new Edge(1, 2, 1)); edges.add(new Edge(1, 3, 5)); edges.add(new Edge(2, 3, 4)); mst = Kruskal.calculateMST(edges, 4); System.out.println("Kruskal算法得到的最小生成树:"); for (Edge e : mst) { System.out.println(e.from + " -> " + e.to + ",权重:" + e.weight); } } }
上記のサンプル プログラムを実行すると、次の出力が得られます。
Prim算法得到的最小生成树: 0 -> 1,权重:2 1 -> 2,权重:1 2 -> 3,权重:4 Kruskal算法得到的最小生成树: 1 -> 2,权重:1 0 -> 1,权重:2 2 -> 3,权重:4
上記は、Java を使用して最小スパニング ツリー アルゴリズムを実装する具体的なコード例です。これらのサンプル コードを通じて、読者は最小スパニング ツリー アルゴリズムの実装プロセスと原理をより深く理解し学ぶことができます。この記事が読者のお役に立てば幸いです。
以上がJavaを使用して最小スパニングツリーアルゴリズムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











Java を使用して動的プログラミング アルゴリズムを実装する方法 動的プログラミングは、多段階の意思決定問題を解決するための最適化手法です。問題を複数の段階に分解します。各段階は既知の情報に基づいて意思決定を行い、各段階での決定結果を記録します。後続の段階で使用されます。実際のアプリケーションでは、動的計画法は通常、最短経路、最大部分列合計、ナップザック問題などの最適化問題を解決するために使用されます。この記事では、Java 言語を使用して動的プログラミング アルゴリズムを実装する方法を紹介し、具体的なコード例を示します。 1. 動的計画法アルゴリズムの基本原理

C# を使用して最小スパニング ツリー アルゴリズムを作成する方法. 最小スパニング ツリー アルゴリズムは、グラフの接続性の問題を解決するために使用される重要なグラフ理論アルゴリズムです。コンピューター サイエンスでは、最小スパニング ツリーとは、スパニング ツリーのすべてのエッジの重みの合計が最小となる、接続されたグラフのスパニング ツリーを指します。この記事では、C# を使用して最小限のスパニング ツリー アルゴリズムを作成する方法を紹介し、具体的なコード例を示します。まず、問題を表すグラフ データ構造を定義する必要があります。 C# では、隣接行列を使用してグラフを表現できます。隣接行列は、各要素が表す 2 次元配列です。

PHP を使用して簡単な SEO 最適化機能を開発する方法 SEO (SearchEngineOptimization)、または検索エンジン最適化とは、Web サイトの構造とコンテンツを改善することで検索エンジンでの Web サイトのランキングを向上させ、それによってより多くのオーガニック トラフィックを獲得することを指します。 Web サイト開発において、PHP を使用して簡単な SEO 最適化機能を実装するにはどうすればよいでしょうか?この記事では、開発者が PHP プロジェクトに SEO 最適化を実装するのに役立つ、一般的に使用される SEO 最適化テクニックと具体的なコード例をいくつか紹介します。 1. 使いやすい

Java を使用して RSA 暗号化アルゴリズムを実装する方法 RSA (Rivest-Shamir-Adleman) は非対称暗号化アルゴリズムであり、現在最も一般的に使用されている暗号化アルゴリズムの 1 つです。この記事では、Java 言語を使用して RSA 暗号化アルゴリズムを実装する方法を紹介し、具体的なコード例を示します。キー ペアの生成 まず、公開キーと秘密キーで構成される RSA キーのペアを生成する必要があります。公開キーはデータの暗号化に使用でき、秘密キーはデータの復号化に使用できます。以下は、RSA キー ペアを生成するコード例です。

Java を使用してクラスカルのアルゴリズムを実装する方法 クラスカルのアルゴリズムは、最小スパニング ツリー問題を解決するために一般的に使用されるアルゴリズムで、エッジをエントリ ポイントとして使用して、最小スパニング ツリーを徐々に構築します。この記事では、Java を使用して Kruskal のアルゴリズムを実装する方法を詳しく説明し、具体的なコード例を示します。アルゴリズム原理 クラスカルのアルゴリズムの基本原理は、すべてのエッジを重みの小さいものから大きいものの順にソートし、次に重みの小さいものから大きいものの順にエッジを選択することですが、サイクルを形成することはできません。具体的な実装手順は次のとおりです。

オンライン試験システムの試験配置調整機能の Java 実装 はじめに: インターネット技術の発展に伴い、試験や評価にオンライン試験システムを使用する学校や訓練機関が増えています。試験スケジュールの調整は、オンライン試験システムの重要な機能であり、管理者が実際の状況に応じて試験時間や試験関連情報を柔軟に調整するのに役立ちます。この記事では、Web試験システムの試験日程調整機能をJavaプログラミングで実装する方法と具体的なコード例を詳しく紹介します。データベース設計検討調整機能ニーズ

ワンクリック ソリューション: pip ミラー ソースの使用スキルをすばやくマスターします はじめに: pip は、Python で最も一般的に使用されるパッケージ管理ツールであり、Python パッケージのインストール、アップグレード、管理を簡単に行うことができます。ただし、よく知られている理由により、デフォルトのミラー ソースを使用してインストール パッケージをダウンロードすると時間がかかるため、この問題を解決するには、国内のミラー ソースを使用する必要があります。この記事では、pip ミラー ソースの使用スキルをすぐにマスターする方法と、具体的なコード例を紹介します。始める前に、pip ミラー ソースの概念を理解してください。

インターネットの発展に伴い、ネットワーク上のデータ量が爆発的に増加し、大量の情報に直面したユーザーが本当に必要なコンテンツを迅速かつ正確に見つけることが困難になっています。時代の要請に応じて登場したレコメンドアルゴリズムは、ユーザーの行動データを記録・分析することでユーザーに合わせたサービスやおすすめコンテンツを提供し、ユーザーの満足度やロイヤルティを向上させます。 Java は、大規模なソフトウェア開発に選ばれる言語として、推奨アルゴリズムの実装でもよく使われます。 1. 推奨アルゴリズム 推奨アルゴリズムは、ユーザーのインタラクション、行動、および関心データを分析およびマイニングする方法です。
