Minimale aufspannende Bäume: Unterschied zwischen den Versionen

Aus Operations-Research-Wiki
Wechseln zu: Navigation, Suche
[gesichtete Version][Markierung ausstehend]
K
 
Zeile 5: Zeile 5:
 
==Allgemeine Eigenschaften==
 
==Allgemeine Eigenschaften==
  
Ziel von minimal aufspannenden Bäumen ist es alle Knoten direkt oder indirekt so miteinander zu verbinden, dass die gesamte Länge der Kanten (oder die Kosten) minimiert wird (werden).
+
Ziel von minimal aufspannenden Bäumen ist es alle Knoten direkt oder indirekt so miteinander zu verbinden, dass die gesamte Länge der Kanten (oder die Kosten) minimiert wird (werden).
  
Eine direkte Verbindung bedeutet das eine Kante zwischen 2 Knoten existiert, indirekt das ein Weg existiert der 2 Knoten über einen oder mehere Knoten miteinander verbindet.
+
Eine direkte Verbindung bedeutet das eine Kante zwischen 2 Knoten existiert, indirekt das ein Weg existiert der 2 Knoten über einen oder mehrere Knoten miteinander verbindet.
  
 
Bei der Suche nach einer optimalen Lösung werden Knoten in jedem Schritt direkt miteinander verbunden.
 
Bei der Suche nach einer optimalen Lösung werden Knoten in jedem Schritt direkt miteinander verbunden.
Zeile 18: Zeile 18:
  
 
1:  
 
1:  
Wähle einen willkürlichen Knoten und verbinde ihn mit dem nächstliegenden Nachbarn. Nächstliegende bedeutet, den Knoten mit der kürzesten Entfernenung oder der minimalen Kosten usw.
+
Wähle einen willkürlichen Knoten und verbinde ihn mit dem nächstliegenden Nachbarn. Nächstliegende bedeutet, den Knoten mit der kürzesten Entfernung oder der minimalen Kosten usw.
  
 
2:
 
2:
Zeile 27: Zeile 27:
  
 
Bemerkung:
 
Bemerkung:
Sollten mehere kürzeste Verbindungen existieren wird eine zufällige Verbindung ausgewählt.
+
Sollten mehrere kürzeste Verbindungen existieren wird eine zufällige Verbindung ausgewählt.
  
 
===Beispiel===
 
===Beispiel===
Zeile 35: Zeile 35:
 
[[image:BSP_MSP_Problem.jpg]]
 
[[image:BSP_MSP_Problem.jpg]]
  
Schritt 1: Wähle Knoten 1 als willkürlichen Knoten und verbinde ihn mit dem nächsteligenden Knoten 3 mit Kosten von 2
+
Schritt 1: Wähle Knoten 1 als willkürlichen Knoten und verbinde ihn mit dem nächstliegenden Knoten 3 mit Kosten von 2
  
 
[[image:BSP_Prim_1.jpg]]
 
[[image:BSP_Prim_1.jpg]]
Zeile 51: Zeile 51:
 
[[image:BSP_Prim_4.jpg]]
 
[[image:BSP_Prim_4.jpg]]
  
Schritt 5: Als nächstliegender Knoten kommt nur noch Knaoten 4 in Frage mit Kosten von 4.
+
Schritt 5: Als nächstliegender Knoten kommt nur noch Knoten 4 in Frage mit Kosten von 4.
  
 
[[image:BSP_Prim_5.jpg]]
 
[[image:BSP_Prim_5.jpg]]
  
Alle Knoten sind minimal miteinander Verbunden. Nach Vorraussetzung des Algorithmus ist diese Lösung optimal.
+
Alle Knoten sind minimal miteinander Verbunden. Nach Voraussetzung des Algorithmus ist diese Lösung optimal.
  
 
==Kruskal==
 
==Kruskal==
Zeile 66: Zeile 66:
 
2: Wiederhole für alle j, mit j=1,...,m:
 
2: Wiederhole für alle j, mit j=1,...,m:
  
Wähle die Kante kj und prüfe, ob durch Aufnahme von kj im Grpehn ein Zyklus entsteht. Wenn kein Zyklus entsteht setzte E:=E'U{kj}.
+
Wähle die Kante kj und prüfe, ob durch Aufnahme von kj im Graphen ein Zyklus entsteht. Wenn kein Zyklus entsteht setzte E:=E'U{kj}.
  
 
3: Stoppe, sobald E genau n-1 Kanten hat.  
 
3: Stoppe, sobald E genau n-1 Kanten hat.  

Aktuelle Version vom 20. Juni 2013, 17:21 Uhr

Minimale aufspannende Bäume

Für eine Suche in Problemräumen gibt es mehere Möglichkeiten. Eine davon sind Minimale aufspannende Bäume.

Allgemeine Eigenschaften

Ziel von minimal aufspannenden Bäumen ist es alle Knoten direkt oder indirekt so miteinander zu verbinden, dass die gesamte Länge der Kanten (oder die Kosten) minimiert wird (werden).

Eine direkte Verbindung bedeutet das eine Kante zwischen 2 Knoten existiert, indirekt das ein Weg existiert der 2 Knoten über einen oder mehrere Knoten miteinander verbindet.

Bei der Suche nach einer optimalen Lösung werden Knoten in jedem Schritt direkt miteinander verbunden.

Prim

Eine Möglichkeit um minimale aufspannende Bäume zu erzeugen ist der Prim-Algorithmus. Dieser Algorithmus führt immer zu einer optimalen Lösung.

Ablauf

1: Wähle einen willkürlichen Knoten und verbinde ihn mit dem nächstliegenden Nachbarn. Nächstliegende bedeutet, den Knoten mit der kürzesten Entfernung oder der minimalen Kosten usw.

2: Wähle den noch nicht verbundenen Knoten aus der am nächsten an der Menge der verbunden Knoten liegt aus.

3: Wiederhole Schritt 2 solange bis alle Knoten verbunden sind

Bemerkung: Sollten mehrere kürzeste Verbindungen existieren wird eine zufällige Verbindung ausgewählt.

Beispiel

Ausgangsproblem:

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Schritt 1: Wähle Knoten 1 als willkürlichen Knoten und verbinde ihn mit dem nächstliegenden Knoten 3 mit Kosten von 2

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Schritt 2: Als nächstliegender Knoten kommt nur Knoten 5 in Frage mit Kosten von 3

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Schritt 3: Als nächstliegender Knoten kommt nur Knoten 2 in Frage mit Kosten von 3

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Schritt 4: Als nächstliegender Knoten kommt nun Knoten 4 und 6 in Frage mit Kosten von 4. Wähle willkürlich Knoten 6.

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Schritt 5: Als nächstliegender Knoten kommt nur noch Knoten 4 in Frage mit Kosten von 4.

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Alle Knoten sind minimal miteinander Verbunden. Nach Voraussetzung des Algorithmus ist diese Lösung optimal.

Kruskal

Grundlage für den Kruskal-Algorithmus ist ein gewichteter, zusammenhängender, schleifenfreier und ungerichteter Graph G=[V,E,c] mit n Konten und m Kanten.

Ablauf

1: Sortiere und nummeriere alle Kanten ki von G in der Folge k1, k2,..., km mit monoton steigenden Gewicht c(ki), so dass c(k1)<= c(k2)<=...<=c(km).

2: Wiederhole für alle j, mit j=1,...,m:

Wähle die Kante kj und prüfe, ob durch Aufnahme von kj im Graphen ein Zyklus entsteht. Wenn kein Zyklus entsteht setzte E:=E'U{kj}.

3: Stoppe, sobald E genau n-1 Kanten hat.

Der optimale minimal aufspannende Baum T= [V.E] wurde gefunden

Beispiel

Problem: Graph mit n=6 Knoten und m=10 Kanten. Für die optimale Lösungen werden n-1=5 Kanten benötigt.

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Sotieren der Kanten:

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Ausgangssituation:

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Schritt 1: Anzahl der Kanten 1<5

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Schritt 2: Anzahl der Kanten 2<5

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Schritt 3: Anzahl der Kanten 3<5

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Schritt 4: Anzahl der Kanten 3<5, da Zyklus

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Schritt 5: Anzahl der Kanten 4<5

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Schritt 5: Anzahl der Kanten 5=5

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Optimale Lösung gefunden.