So implementieren Sie den Minimal-Spanning-Tree-Algorithmus mit Java
So verwenden Sie Java, um den Minimum-Spanning-Tree-Algorithmus zu implementieren
Der Minimum-Spanning-Tree-Algorithmus ist ein klassisches Problem in der Graphentheorie, das zur Lösung des Minimum-Spanning-Tree eines gewichteten verbundenen Graphen verwendet wird. In diesem Artikel wird erläutert, wie Sie diesen Algorithmus mithilfe der Java-Sprache implementieren, und es werden spezifische Codebeispiele bereitgestellt.
- Problembeschreibung
Gegeben ein zusammenhängender Graph G, in dem jede Kante ein Gewicht hat, muss ein minimaler Spannbaum T gefunden werden, sodass die Summe der Gewichte aller Kanten in T minimal ist. - Prims Algorithmus
Prims Algorithmus ist ein Greedy-Algorithmus, der zur Lösung des Minimum-Spanning-Tree-Problems verwendet wird. Seine Grundidee besteht darin, von einem Scheitelpunkt aus zu beginnen und den Spannbaum schrittweise zu erweitern, wobei jedes Mal der Scheitelpunkt ausgewählt wird, der dem vorhandenen Spannbaum am nächsten liegt, bis alle Scheitelpunkte zum Spannbaum hinzugefügt sind.
Das Folgende ist ein Java-Implementierungsbeispiel des Prim-Algorithmus:
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; } }
- Kruskals Algorithmus
Kruskals Algorithmus ist auch ein Greedy-Algorithmus, der zur Lösung des Minimum-Spanning-Tree-Problems verwendet wird. Die Grundidee besteht darin, alle Kanten im Diagramm nach ihrem Gewicht von klein nach groß zu sortieren und sie dann nacheinander zum Spannbaum hinzuzufügen. Wenn die beiden Endpunkte der Kante nicht zum gleichen gehören Verbundene Komponente, dann können diese Kanten zum Spanning Tree hinzugefügt werden. Die beiden Endpunkte verschmelzen zu einer verbundenen Komponente.
Das Folgende ist ein Beispiel für die Java-Implementierung des Kruskal-Algorithmus:
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]; } }
- Beispielverwendung
Das Folgende ist ein einfaches Beispielverwendungsbeispiel:
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); } } }
Durch Ausführen des obigen Beispielprogramms können Sie die folgende Ausgabe erhalten:
Prim算法得到的最小生成树: 0 -> 1,权重:2 1 -> 2,权重:1 2 -> 3,权重:4 Kruskal算法得到的最小生成树: 1 -> 2,权重:1 0 -> 1,权重:2 2 -> 3,权重:4
Das Obige ist die Verwendung Spezifische Codebeispiele für die Implementierung des Minimum-Spanning-Tree-Algorithmus in Java. Durch diese Beispielcodes können Leser den Implementierungsprozess und die Prinzipien des Minimum-Spanning-Tree-Algorithmus besser verstehen und lernen. Ich hoffe, dieser Artikel ist für die Leser hilfreich.
Das obige ist der detaillierte Inhalt vonSo implementieren Sie den Minimal-Spanning-Tree-Algorithmus mit Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

So verwenden Sie Java zur Implementierung eines dynamischen Programmieralgorithmus. Dynamische Programmierung ist eine Optimierungsmethode zur Lösung mehrstufiger Entscheidungsprobleme. Sie zerlegt das Problem in mehrere Stufen. Jede Stufe trifft eine Entscheidung auf der Grundlage bekannter Informationen und zeichnet die Ergebnisse jeder Entscheidung auf die in den nachfolgenden Phasen verwendet wurde. In praktischen Anwendungen wird dynamische Programmierung normalerweise zur Lösung von Optimierungsproblemen verwendet, z. B. kürzester Weg, maximale Teilsequenzsumme, Rucksackproblem usw. In diesem Artikel wird erläutert, wie Sie mithilfe der Java-Sprache dynamische Programmieralgorithmen implementieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Grundprinzipien dynamischer Programmieralgorithmen

So schreiben Sie mit C# den Minimum-Spanning-Tree-Algorithmus. Der Minimum-Spanning-Tree-Algorithmus ist ein wichtiger Algorithmus der Graphentheorie, der zur Lösung des Konnektivitätsproblems von Graphen verwendet wird. In der Informatik bezeichnet ein minimaler Spannbaum einen Spannbaum eines zusammenhängenden Graphen, bei dem die Summe der Gewichte aller Kanten des Spannbaums am kleinsten ist. In diesem Artikel wird erläutert, wie Sie mit C# den Minimal-Spanning-Tree-Algorithmus schreiben, und es werden spezifische Codebeispiele bereitgestellt. Zuerst müssen wir eine Diagrammdatenstruktur definieren, um das Problem darzustellen. In C# können Sie eine Adjazenzmatrix zur Darstellung eines Diagramms verwenden. Eine Adjazenzmatrix ist ein zweidimensionales Array, in dem jedes Element dargestellt wird

Wie man mit PHP einfache SEO-Optimierungsfunktionen entwickelt SEO (SearchEngineOptimization) oder Suchmaschinenoptimierung bezieht sich auf die Verbesserung des Rankings der Website in Suchmaschinen durch Verbesserung der Struktur und des Inhalts der Website, wodurch mehr organischer Traffic erzielt wird. Wie kann man bei der Website-Entwicklung mit PHP einfache SEO-Optimierungsfunktionen implementieren? In diesem Artikel werden einige häufig verwendete SEO-Optimierungstechniken und spezifische Codebeispiele vorgestellt, um Entwicklern bei der Implementierung der SEO-Optimierung in PHP-Projekten zu helfen. 1. Freundliche Nutzung

Verwendung von Java zur Implementierung des RSA-Verschlüsselungsalgorithmus RSA (Rivest-Shamir-Adleman) ist ein asymmetrischer Verschlüsselungsalgorithmus, der derzeit einer der am häufigsten verwendeten Verschlüsselungsalgorithmen ist. In diesem Artikel wird erläutert, wie Sie mithilfe der Java-Sprache den RSA-Verschlüsselungsalgorithmus implementieren, und es werden spezifische Codebeispiele bereitgestellt. Ein Schlüsselpaar generieren Zuerst müssen wir ein Paar RSA-Schlüssel generieren, das aus einem öffentlichen Schlüssel und einem privaten Schlüssel besteht. Der öffentliche Schlüssel kann zum Verschlüsseln von Daten und der private Schlüssel zum Entschlüsseln von Daten verwendet werden. Im Folgenden finden Sie ein Codebeispiel zum Generieren eines RSA-Schlüsselpaars: import

Verwendung von Java zur Implementierung des Kruskal-Algorithmus Der Kruskal-Algorithmus ist ein Algorithmus, der häufig zur Lösung des Minimum-Spanning-Tree-Problems verwendet wird. Er verwendet Kanten als Einstiegspunkt, um schrittweise einen Minimum-Spanning-Tree aufzubauen. In diesem Artikel erklären wir detailliert, wie der Kruskal-Algorithmus mit Java implementiert wird, und stellen spezifische Codebeispiele bereit. Algorithmusprinzip Das Grundprinzip des Kruskal-Algorithmus besteht darin, alle Kanten in der Reihenfolge ihres Gewichts von klein nach groß zu sortieren und dann Kanten in der Reihenfolge ihres Gewichts von klein nach groß auszuwählen, kann jedoch keinen Zyklus bilden. Die spezifischen Implementierungsschritte sind wie folgt:

Java-Implementierung der Prüfungsanordnungsanpassungsfunktion des Online-Prüfungssystems Einführung: Mit der Entwicklung der Internet-Technologie entscheiden sich immer mehr Schulen und Ausbildungseinrichtungen für die Verwendung von Online-Prüfungssystemen für Prüfungen und Bewertungen. Die Anpassung des Prüfungsplans ist eine wichtige Funktion im Online-Prüfungssystem, die Administratoren dabei helfen kann, Prüfungszeit und prüfungsbezogene Informationen flexibel an die tatsächliche Situation anzupassen. In diesem Artikel wird detailliert beschrieben, wie Sie mithilfe der Java-Programmierung die Funktion zur Anpassung des Prüfungsplans des Online-Prüfungssystems implementieren, und es werden spezifische Codebeispiele angegeben. Anforderungen an die Anpassungsfunktion der Datenbankdesign-Prüfungsanordnung

Ein-Klick-Lösung: Beherrschen Sie schnell die Verwendungsfähigkeiten der Pip-Spiegelquelle. Einführung: Pip ist das am häufigsten verwendete Paketverwaltungstool für Python, mit dem Python-Pakete einfach installiert, aktualisiert und verwaltet werden können. Aus bekannten Gründen ist die Verwendung der Standard-Spiegelquelle zum Herunterladen des Installationspakets jedoch langsamer. Um dieses Problem zu lösen, müssen wir eine inländische Spiegelquelle verwenden. In diesem Artikel wird erläutert, wie Sie die Verwendungsfähigkeiten von Pip Mirror Source schnell beherrschen, und es werden spezifische Codebeispiele bereitgestellt. Bevor Sie beginnen, machen Sie sich mit dem Konzept der Pip-Spiegelquelle vertraut.

Mit der Entwicklung des Internets ist die Datenmenge im Netzwerk explodiert, was es für Benutzer schwierig macht, bei großen Informationsmengen schnell und genau die Inhalte zu finden, die sie wirklich benötigen. Empfehlungsalgorithmen sind zeitgemäß entstanden und bieten Benutzern personalisierte Dienste und empfohlene Inhalte, indem sie Daten zum Benutzerverhalten aufzeichnen und analysieren und so die Zufriedenheit und Loyalität der Benutzer verbessern. Java ist die Sprache der Wahl für die Softwareentwicklung im großen Maßstab und wird auch gerne bei der Implementierung von Empfehlungsalgorithmen eingesetzt. 1. Empfehlungsalgorithmus Der Empfehlungsalgorithmus ist eine Methode, die Benutzerinteraktions-, Verhaltens- und Interessendaten analysiert und auswertet.
