ホームページ Java &#&チュートリアル Javaを使用して最小スパニングツリーアルゴリズムを実装する方法

Javaを使用して最小スパニングツリーアルゴリズムを実装する方法

Sep 21, 2023 pm 12:36 PM
スキル Javaの実装 最小スパニング ツリー アルゴリズム

Javaを使用して最小スパニングツリーアルゴリズムを実装する方法

Java を使用して最小スパニング ツリー アルゴリズムを実装する方法

最小スパニング ツリー アルゴリズムは、グラフ理論の古典的な問題であり、重み付けされた最小値を解くために使用されます。接続されたグラフスパニングツリー。この記事では、Java 言語を使用してこのアルゴリズムを実装する方法を紹介し、具体的なコード例を示します。

  1. 問題の説明
    各エッジに重みがある接続グラフ G が与えられた場合、T 内のすべてのエッジの重みの合計が次のような最小スパニング ツリー T を見つける必要があります。は最小です。
  2. 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;
    }
}
ログイン後にコピー
  1. 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];
    }
}
ログイン後にコピー
  1. 使用例
    以下は簡単な使用例です:
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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Javaを使用して動的プログラミングアルゴリズムを実装する方法 Javaを使用して動的プログラミングアルゴリズムを実装する方法 Sep 19, 2023 am 11:16 AM

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

C# を使用して最小スパニング ツリー アルゴリズムを作成する方法 C# を使用して最小スパニング ツリー アルゴリズムを作成する方法 Sep 19, 2023 pm 01:55 PM

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

PHP を使用して簡単な SEO 最適化関数を開発する方法 PHP を使用して簡単な SEO 最適化関数を開発する方法 Sep 20, 2023 pm 04:18 PM

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

Javaを使用してRSA暗号化アルゴリズムを実装する方法 Javaを使用してRSA暗号化アルゴリズムを実装する方法 Sep 20, 2023 pm 02:33 PM

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

Javaを使用してKruskalアルゴリズムを実装する方法 Javaを使用してKruskalアルゴリズムを実装する方法 Sep 19, 2023 am 11:39 AM

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

Javaを利用したオンライン試験システムの試験日程調整機能の実装 Javaを利用したオンライン試験システムの試験日程調整機能の実装 Sep 25, 2023 am 08:45 AM

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

簡単な解決策: pip ミラー ソースの使用テクニックの完全ガイド 簡単な解決策: pip ミラー ソースの使用テクニックの完全ガイド Jan 16, 2024 am 10:31 AM

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

Javaで実装された推奨アルゴリズムと実装 Javaで実装された推奨アルゴリズムと実装 Jun 18, 2023 pm 02:51 PM

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

See all articles