ホームページ Java &#&チュートリアル Javaを使用してKruskalアルゴリズムを実装する方法

Javaを使用してKruskalアルゴリズムを実装する方法

Sep 19, 2023 am 11:39 AM
Javaの実装 クラスカルアルゴリズム

Javaを使用してKruskalアルゴリズムを実装する方法

Java を使用して Kruskal アルゴリズムを実装する方法

Kruskal アルゴリズムは、最小スパニング ツリー問題を解決するために一般的に使用されるアルゴリズムで、エッジをエントリ ポイントとして使用します。最小のスパニング ツリーを徐々に構築します。この記事では、Java を使用して Kruskal のアルゴリズムを実装する方法を詳しく説明し、具体的なコード例を示します。

  1. アルゴリズム原理
    Kruskal アルゴリズムの基本原理は、すべてのエッジを重みに従って小さいものから大きいものまでソートし、小さいものから大きいものへ順番にエッジを選択することです。サイクルを形成できません。具体的な実装手順は次のとおりです。

    • すべてのエッジを重みに従って小さいものから大きいものまで並べ替えます。
    • 最小スパニング ツリーのエッジを格納する空のセットを作成します。
    • ソートされたエッジをトラバースし、現在のエッジの 2 つの頂点が同じセット内にあるかどうかを確認します。同じセット内にない場合は、現在のエッジを最小スパニング ツリーのセットに追加し、2 つの頂点を 1 つのセットにマージします。
    • 最小スパニング ツリーのエッジの数が頂点の数から 1 を引いた数に等しくなるまでトラバースを続けます。
  2. Java コードの実装
    次は、Java 言語を使用して Kruskal アルゴリズムを実装するコード例です。
import java.util.*;

class Edge implements Comparable<Edge> {
    int src, dest, weight;

    public int compareTo(Edge edge) {
        return this.weight - edge.weight;
    }
}

class Subset {
    int parent, rank;
}

class Graph {
    int V, E;
    Edge[] edges;

    public Graph(int v, int e) {
        V = v;
        E = e;
        edges = new Edge[E];
        for (int i = 0; i < e; ++i)
            edges[i] = new Edge();
    }

    int find(Subset[] subsets, int i) {
        if (subsets[i].parent != i)
            subsets[i].parent = find(subsets, subsets[i].parent);

        return subsets[i].parent;
    }

    void union(Subset[] subsets, int x, int y) {
        int xroot = find(subsets, x);
        int yroot = find(subsets, y);

        if (subsets[xroot].rank < subsets[yroot].rank)
            subsets[xroot].parent = yroot;
        else if (subsets[xroot].rank > subsets[yroot].rank)
            subsets[yroot].parent = xroot;
        else {
            subsets[yroot].parent = xroot;
            subsets[xroot].rank++;
        }
    }

    void KruskalMST() {
        Edge[] result = new Edge[V];
        int e = 0;
        int i = 0;
        for (i = 0; i < V; ++i)
            result[i] = new Edge();

        Arrays.sort(edges);

        Subset[] subsets = new Subset[V];
        for (i = 0; i < V; ++i)
            subsets[i] = new Subset();

        for (int v = 0; v < V; ++v) {
            subsets[v].parent = v;
            subsets[v].rank = 0;
        }

        i = 0;

        while (e < V - 1) {
            Edge next_edge = edges[i++];

            int x = find(subsets, next_edge.src);
            int y = find(subsets, next_edge.dest);

            if (x != y) {
                result[e++] = next_edge;
                union(subsets, x, y);
            }
        }

        System.out.println("Following are the edges in the constructed MST:");
        int minimumCost = 0;
        for (i = 0; i < e; ++i) {
            System.out.println(result[i].src + " -- " + result[i].dest + " == " + result[i].weight);
            minimumCost += result[i].weight;
        }
        System.out.println("Minimum Cost Spanning Tree: " + minimumCost);
    }
}

public class KruskalAlgorithm {
    public static void main(String[] args) {
        int V = 4;
        int E = 5;
        Graph graph = new Graph(V, E);

        graph.edges[0].src = 0;
        graph.edges[0].dest = 1;
        graph.edges[0].weight = 10;

        graph.edges[1].src = 0;
        graph.edges[1].dest = 2;
        graph.edges[1].weight = 6;

        graph.edges[2].src = 0;
        graph.edges[2].dest = 3;
        graph.edges[2].weight = 5;

        graph.edges[3].src = 1;
        graph.edges[3].dest = 3;
        graph.edges[3].weight = 15;

        graph.edges[4].src = 2;
        graph.edges[4].dest = 3;
        graph.edges[4].weight = 4;

        graph.KruskalMST();
    }
}
ログイン後にコピー

上記のコードは、単純なグラフを実装します。クラス (Graph)、エッジ クラス (Edge) と共用体検索クラス (Subset) を含みます。 main 関数では、グラフ オブジェクトを作成し、エッジを追加し、KruskalMST() メソッドを呼び出して最小スパニング ツリーを取得します。

  1. 結果分析
    テスト後、上記のコードは次の結果を正しく出力できます:
Following are the edges in the constructed MST:
2 -- 3 == 4
0 -- 3 == 5
0 -- 1 == 10
Minimum Cost Spanning Tree: 19
ログイン後にコピー

これは、構築された最小のスパニング ツリーには 3 つのエッジが含まれていることを意味します。の重さの合計は 19 です。

概要:
この記事では、Java を使用して Kruskal アルゴリズムを実装する方法を詳細に紹介し、具体的なコード例を添付しました。この記事が、皆さんが Kruskal アルゴリズムをよりよく理解し、応用できるようになれば幸いです。

以上がJavaを使用してKruskalアルゴリズムを実装する方法の詳細内容です。詳細については、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)

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

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

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

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

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

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

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

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

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

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

Java は、フル機能のオンライン チーム ビルディング アクティビティ予約システムの論理プロセスを実装します。 Java は、フル機能のオンライン チーム ビルディング アクティビティ予約システムの論理プロセスを実装します。 Jun 27, 2023 am 11:46 AM

チームビルディング活動が徐々に企業文化となるにつれ、従業員のためにチームビルディング活動を計画し、予約する方法を模索し始めている企業が増えています。そして、オンラインのチームビルディングアクティビティ予約システムが登場しました。 Java は広く使用されているプログラミング言語であり、企業がオンライン予約システムを開発する際に優れた利便性と柔軟性を提供します。この記事では、Java を使用してフル機能のオンライン チーム ビルディング アクティビティ予約システムを実装する論理プロセスを段階的に紹介します。ステップ 1: システム要件と機能を決定する コードの作成を開始する前に、システムが達成する必要があるすべての要件を決定する必要があります。

Javaを使用して倉庫管理システムの在庫調整機能を実装する方法 Javaを使用して倉庫管理システムの在庫調整機能を実装する方法 Sep 24, 2023 pm 05:09 PM

Java を使用して倉庫管理システムの在庫調整機能を実装する方法 物流および倉庫業界の継続的な発展に伴い、倉庫管理システムは企業が効率と管理能力を向上させるために不可欠なツールとなっています。在庫調整は倉庫管理システムの重要な機能モジュールであり、商品の在庫状況を正確に把握し、タイムリーな調整と統計を行い、業務効率を向上させるために非常に重要です。この記事では、Javaプログラミング言語を使用して倉庫管理システムの在庫調整機能を実装する方法と、具体的なコード例を紹介します。まず、考慮する必要があるのは、

Javaを使用して選択ソートアルゴリズムを実装する方法 Javaを使用して選択ソートアルゴリズムを実装する方法 Sep 19, 2023 am 09:46 AM

Java で選択ソート アルゴリズムを実装する方法 選択ソート アルゴリズムは、シンプルで直感的なソート アルゴリズムであり、その基本的な考え方は、ソートされていない要素から最小 (または最大) の要素を見つけて、ソートされたシーケンスの最後に置くことです。このようにして、順序付けられたシーケンスが徐々に構築されます。以下では、Java コード例の形式で選択ソート アルゴリズムを実装する方法を紹介します。コード実装: publicclassSelectionSort{publicstaticvoidselect

See all articles