Rumah Java javaTutorial Bagaimana untuk melaksanakan algoritma pokok rentang minimum menggunakan java

Bagaimana untuk melaksanakan algoritma pokok rentang minimum menggunakan java

Sep 21, 2023 pm 12:36 PM
Petua pelaksanaan java Algoritma Pokok Spanning Minimum

. Artikel ini akan memperkenalkan cara menggunakan bahasa Java untuk melaksanakan algoritma ini dan memberikan contoh kod khusus.

Bagaimana untuk melaksanakan algoritma pokok rentang minimum menggunakan java

Huraian Masalah

Memandangkan graf bersambung G, di mana setiap tepi mempunyai pemberat, ia dikehendaki mencari pokok rentang minimum T supaya jumlah pemberat semua tepi dalam T adalah minimum.

Algoritma Prim

Algoritma Prim ialah algoritma tamak yang digunakan untuk menyelesaikan masalah pokok rentang minimum. Idea asasnya ialah bermula dari bucu dan kembangkan pokok rentang secara beransur-ansur, memilih bucu yang paling hampir dengan pokok rentang sedia ada setiap kali sehingga semua bucu ditambahkan pada pokok rentang.

  1. Berikut ialah contoh pelaksanaan Java bagi algoritma Prim:
  2. 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;
        }
    }
    Salin selepas log masuk

  3. Algoritma Kruskal
  4. Algoritma Kruskal juga merupakan algoritma tamak yang digunakan untuk menyelesaikan masalah pokok rentang minimum. Idea asasnya ialah untuk mengisih semua tepi dalam graf mengikut berat dari kecil ke besar, dan kemudian menambahnya pada pokok rentang secara bergilir-gilir Apabila menambah tepi, jika kedua-dua titik hujung tepi tidak tergolong dalam yang sama komponen yang disambungkan, maka tepi ini boleh ditambah pada pokok rentangan Kedua-dua titik akhir bergabung menjadi komponen yang bersambung.

Berikut ialah contoh pelaksanaan Java bagi algoritma Kruskal:
    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];
        }
    }
    Salin selepas log masuk

  1. Contoh penggunaan
  2. Berikut ialah contoh penggunaan yang mudah:

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);
        }
    }
}
Salin selepas log masuk

Dengan menjalankan program contoh di atas, anda boleh mendapatkan output berikut:
    Prim算法得到的最小生成树:
    0 -> 1,权重:2
    1 -> 2,权重:1
    2 -> 3,权重:4
    Kruskal算法得到的最小生成树:
    1 -> 2,权重:1
    0 -> 1,权重:2
    2 -> 3,权重:4
    Salin selepas log masuk
  1. Di atas ialah contoh penggunaan kod khusus untuk melaksanakan algoritma pepohon rentang minimum dalam Java. Melalui kod sampel ini, pembaca boleh lebih memahami dan mempelajari proses pelaksanaan dan prinsip algoritma pepohon rentang minimum. Semoga artikel ini bermanfaat kepada pembaca.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan algoritma pokok rentang minimum menggunakan java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan algoritma pengaturcaraan dinamik menggunakan java Bagaimana untuk melaksanakan algoritma pengaturcaraan dinamik menggunakan java Sep 19, 2023 am 11:16 AM

Cara menggunakan Java untuk melaksanakan algoritma pengaturcaraan dinamik Pengaturcaraan dinamik ialah kaedah pengoptimuman untuk menyelesaikan masalah membuat keputusan berbilang peringkat Ia menguraikan masalah kepada beberapa peringkat Setiap peringkat membuat keputusan berdasarkan maklumat yang diketahui dan merekodkan keputusan setiap keputusan yang digunakan pada peringkat seterusnya. Dalam aplikasi praktikal, pengaturcaraan dinamik biasanya digunakan untuk menyelesaikan masalah pengoptimuman, seperti laluan terpendek, jumlah susulan maksimum, masalah ransel, dsb. Artikel ini akan memperkenalkan cara menggunakan bahasa Java untuk melaksanakan algoritma pengaturcaraan dinamik dan menyediakan contoh kod khusus. 1. Prinsip asas algoritma pengaturcaraan dinamik

Cara menggunakan PHP untuk membangunkan fungsi pengoptimuman SEO mudah Cara menggunakan PHP untuk membangunkan fungsi pengoptimuman SEO mudah Sep 20, 2023 pm 04:18 PM

Cara menggunakan PHP untuk membangunkan fungsi pengoptimuman SEO mudah SEO (SearchEngineOptimization), atau pengoptimuman enjin carian, merujuk kepada meningkatkan kedudukan laman web dalam enjin carian dengan menambah baik struktur dan kandungan laman web, dengan itu memperoleh lebih banyak trafik organik. Dalam pembangunan laman web, bagaimana untuk menggunakan PHP untuk melaksanakan fungsi pengoptimuman SEO yang mudah? Artikel ini akan memperkenalkan beberapa teknik pengoptimuman SEO yang biasa digunakan dan contoh kod khusus untuk membantu pembangun melaksanakan pengoptimuman SEO dalam projek PHP. 1. Penggunaan yang mesra

Bagaimana untuk menulis algoritma pokok rentang minimum menggunakan C# Bagaimana untuk menulis algoritma pokok rentang minimum menggunakan C# Sep 19, 2023 pm 01:55 PM

Cara menggunakan C# untuk menulis algoritma pepohon rentang minimum Algoritma pepohon rentang minimum ialah algoritma teori graf yang penting, yang digunakan untuk menyelesaikan masalah ketersambungan graf. Dalam sains komputer, pokok rentang minimum merujuk kepada pokok rentang bagi graf bersambung di mana jumlah pemberat semua tepi pokok rentang adalah yang terkecil. Artikel ini akan memperkenalkan cara menggunakan C# untuk menulis algoritma pepohon rentang minimum dan memberikan contoh kod khusus. Pertama, kita perlu mentakrifkan struktur data graf untuk mewakili masalah. Dalam C#, anda boleh menggunakan matriks bersebelahan untuk mewakili graf. Matriks bersebelahan ialah tatasusunan dua dimensi di mana setiap elemen mewakili

Bagaimana untuk melaksanakan algoritma penyulitan RSA menggunakan java Bagaimana untuk melaksanakan algoritma penyulitan RSA menggunakan java Sep 20, 2023 pm 02:33 PM

Cara menggunakan Java untuk melaksanakan algoritma penyulitan RSA RSA (Rivest-Shamir-Adleman) ialah algoritma penyulitan asimetri, yang merupakan salah satu algoritma penyulitan yang paling biasa digunakan pada masa ini. Artikel ini akan memperkenalkan cara menggunakan bahasa Java untuk melaksanakan algoritma penyulitan RSA dan memberikan contoh kod khusus. Jana pasangan kunci Pertama, kita perlu menjana sepasang kunci RSA, yang terdiri daripada kunci awam dan kunci peribadi. Kunci awam boleh digunakan untuk menyulitkan data dan kunci peribadi boleh digunakan untuk menyahsulit data. Berikut ialah contoh kod untuk menjana pasangan kunci RSA: import

Bagaimana untuk melaksanakan algoritma Kruskal menggunakan java Bagaimana untuk melaksanakan algoritma Kruskal menggunakan java Sep 19, 2023 am 11:39 AM

Cara menggunakan Java untuk melaksanakan algoritma Kruskal Algoritma Kruskal ialah algoritma yang biasa digunakan untuk menyelesaikan masalah pokok rentang minimum Ia menggunakan tepi sebagai titik masuk untuk membina pokok rentang minimum secara beransur-ansur. Dalam artikel ini, kami akan memperincikan cara melaksanakan algoritma Kruskal menggunakan Java dan memberikan contoh kod khusus. Prinsip Algoritma Prinsip asas algoritma Kruskal adalah untuk mengisih semua tepi mengikut tertib berat dari kecil ke besar, dan kemudian memilih tepi mengikut urutan berat dari kecil ke besar, tetapi tidak boleh membentuk kitaran. Langkah-langkah pelaksanaan khusus adalah seperti berikut:

Menggunakan Java untuk melaksanakan fungsi pelarasan susunan peperiksaan sistem peperiksaan dalam talian Menggunakan Java untuk melaksanakan fungsi pelarasan susunan peperiksaan sistem peperiksaan dalam talian Sep 25, 2023 am 08:45 AM

Pelaksanaan Java fungsi pelarasan susunan peperiksaan sistem peperiksaan dalam talian Pengenalan: Dengan perkembangan teknologi Internet, semakin banyak sekolah dan institusi latihan memilih untuk menggunakan sistem peperiksaan dalam talian untuk peperiksaan dan penilaian. Pelarasan jadual peperiksaan merupakan fungsi penting dalam sistem peperiksaan dalam talian, yang boleh membantu pentadbir menyesuaikan masa peperiksaan dan maklumat berkaitan peperiksaan secara fleksibel mengikut situasi sebenar. Artikel ini akan memperkenalkan secara terperinci cara menggunakan pengaturcaraan Java untuk melaksanakan fungsi pelarasan jadual peperiksaan sistem peperiksaan dalam talian, dan memberikan contoh kod khusus. Keperluan fungsi pelarasan susunan peperiksaan reka bentuk pangkalan data

Algoritma pengesyoran dan pelaksanaan dilaksanakan dalam Java Algoritma pengesyoran dan pelaksanaan dilaksanakan dalam Java Jun 18, 2023 pm 02:51 PM

Dengan perkembangan Internet, jumlah data pada rangkaian telah meletup, menyukarkan pengguna untuk mencari kandungan yang benar-benar diperlukan dengan cepat dan tepat apabila berhadapan dengan sejumlah besar maklumat. Algoritma pengesyoran muncul mengikut keperluan masa, dan menyediakan pengguna dengan perkhidmatan yang diperibadikan dan kandungan yang disyorkan dengan merekod dan menganalisis data tingkah laku pengguna, dengan itu meningkatkan kepuasan dan kesetiaan pengguna. Sebagai bahasa pilihan untuk pembangunan perisian berskala besar, Java juga popular dalam pelaksanaan algoritma pengesyoran. 1. Algoritma pengesyoran Algoritma pengesyoran ialah kaedah yang menganalisis dan melombong data interaksi, tingkah laku dan minat pengguna.

Penyelesaian mudah: Panduan lengkap untuk teknik penggunaan sumber cermin pip Penyelesaian mudah: Panduan lengkap untuk teknik penggunaan sumber cermin pip Jan 16, 2024 am 10:31 AM

Penyelesaian satu klik: Kuasai dengan pantas kemahiran penggunaan sumber cermin pip Pengenalan: pip ialah alat pengurusan pakej yang paling biasa digunakan untuk Python, yang boleh memasang, meningkatkan dan mengurus pakej Python dengan mudah. Walau bagaimanapun, disebabkan oleh sebab yang terkenal, menggunakan sumber cermin lalai untuk memuat turun pakej pemasangan adalah lebih perlahan untuk menyelesaikan masalah ini, kita perlu menggunakan sumber cermin domestik. Artikel ini akan memperkenalkan cara cepat menguasai kemahiran penggunaan sumber cermin pip dan memberikan contoh kod khusus. Sebelum anda mula, fahami konsep sumber cermin pip.

See all articles