Lösung

Werbung
SurvivableNetwork Design Problem
VU Algorithmen auf Graphen, WS 2004
Übung1 / Aufgabe 1
Gruppe E - Thomas Bucsics, Olivia Dietzel, Jörg Pührer
Inhaltsverzeichnis
1. Problematik...............................................2
1.1 Beispielgraph.......................................2
1.2 Zweizusammenhangskomponente.....2
2. Lösung.......................................................3
2.1 Der Algorithmus...................................3
2.2 Am Beispiel..........................................4
3. Komplexität................................................6
Problematik
2
1. Problematik
Das „Survivable Network Design Problem“ ist wie folgt definiert: Gegeben ist ein zusammenhängender Graph G = (V, E) mit einer Kostenfunktion c: E → N auf den Kanten und eine Funktion
p: V → {0, 1, 2}. Gesucht ist ein zusammenhängender Teilgraph G', der die Summe der enthaltenen Kanten minimiert und die folgenden Eigenschaften hat:
1. Alle Knoten v mit p(v) > 0 sind in G' enthalten.
2. Alle Knoten v mit p(v) = 2 liegen in der gleichen Zweizusammenhangskomponente von G'.
Es wird eine Heuristik für das Problem gesucht, die nur gültige Lösungen erzeugen sollte. Diese
Lösung soll im Folgenden anhand eines Beispielgraphens dokumentiert werden.
1.1 Beispielgraph
V = {A, B, C, D, E, F, G, H}
E = {(A,B), (A,G), (B,C), (B,E), (C,D), (C,F), (D,H), (E,F), (E,G),
(F,H), (G,H)}
c(E) = {(A,B)→2, (A,G)→6, (B,C)→7, (B,E)→2, (C,D)→3, (C,F)
→3, (D,H)→2, (E,F)→2, (E,G)→1, (F,H)→2, (G,H)→4}
p(V) = {A→0, B→2, C→2, D→1, E→2, F→0, G→1, H→2}
Der Beispielgraph besteht wie gefordert aus einer Menge von Knoten mit einer Gewichtung im Bereich [0,3] und gewichteten Kanten.
Zur Lösung des Problems muss weiterhin geklärt werden, was unter einer Zweizusammenhangskomponente verstanden wird.
1.2 Zweizusammenhangskomponente
Zwischen jedem Paar von Knoten in einer Zweizusammenhangskomponente gibt es mindestens
zwei Pfade, die sich außer Start- und Endknoten keine weiteren Knoten teilen. Imgrunde sagt dies
aus, dass wenn aus einem Graphen ein beliebiger Knoten entfernt wird, der restliche Graph zusammenhängend bleiben muss, also nicht in zwei oder mehr Teile getrennt wird. Der Graph aus
der linken unteren Abbildung stellt eine solche Zweizusammenhangskomponente dar. Der untere
rechte Graph dagegen nicht, da beim Entfernen des mittleren Knotens der Graph in zwei Teile
geteilt wird.
Zweizusammenhangskomponente
Algorithmen auf Graphen, Blatt 1, Aufgabe 1
keine
Zweizusammenhangskomponente
Lösung
3
2. Lösung
Der nachfolgend beschrieben Algorithmus soll also das Survivable Network Design Problem lösen. Imgrunde kann der Algorithmus in drei Phasen beschrieben werden:
1. Im ersten Schritt wird der Graph auf 1- und 2-Knoten untersucht und ein Steinerbaum
erzeugt, der sämtliche 2-Knoten enthält.
2. Aus diesem Steinerbaum wird nun Schritt für Schritt ein Knoten mit seinen anschließenden
Kanten ausgeblendet und auf dem restlichen Graphen ein weiterer MST gebildet. Wurde
diese Prozedur auf alle Knoten des Steinerbaums angewandt, können die einzelnen Ergebnisse zu einem gesamten Teilgraphen zusammengefasst werden. Dieser Teilgraph stellt somit die Zweizusammenhangskomponente dar.
3. Im letzen Schritt wird zufällig ein Knoten aus dem in (1.) erzeugten Steinerbaum ausgewählt. Dieser Knoten soll die übrigen 1-Knoten mit dem Steinerbaum verbinden. Dazu wird
ein zweiter Steinerbaum auf den 1-Knoten einschließlich des zufällig ausgewählten erzeugt
und anschließend mit dem ersten Steinerbaum vereinigt.
2.1 Der Algorithmus
SuNeDeProHeu (V,E,c,p) {
V1=∅; V2=∅; ResultV=∅; ResultE=∅;
forall (v∈V){
if (p(v)==1) V1=V1∪{v};
if (p(v)==2) V2=V2∪{v};
} //forall
(V',E')= MST(V,E,c,V2);
forall (v∈V'){
EV= set of all edges∈E including node v;
(localV,localE)= MST(V\{v},E\EV,c,V'\{v});
ResultV=ResultV∪localV;
ResultE=ResultE∪localE;
} //forall
vConn=random node∈V';
(V'',E'')= MST(V,E,c,V1∪{vConn});
ResultV=ResultV∪V'';
ResultE=ResultE∪E'';
return(ResultV, ResultE);
} //SuNeDeProHeu
V/E – Knoten/Kanten
c/p – Qualitätsfunktion der Kanten/Knoten
V1/V2 – Menge an Knoten der Qualität 1/2
ResultV/ResultE – Anzahl der Knoten/Kanten des Ergebnisgraphen
(V',E') – Steinerbaum, der alle 2-Knoten enthält
vConn – Knoten aus (V',E'), der den Steinerbaum mit allen weiteren 1Knoten verbinden soll
(V'',E'') – Steinerbaum, der alle 1-Knoten und vConn enthält
Algorithmen auf Graphen, Blatt 1, Aufgabe 1
Lösung
4
2.2 Am Beispiel
• Schritt 1:
Herausfinden der 1- und 2-Knoten und Erzeugung des ersten Steinerbaums (V',E')
Initialisierte 1- und 2-Knoten
Steinerbaum (v',E')
• Schritt 2:
Schrittweises Ausblenden der Knoten aus (V',E'), Bildung des (Teil-)Steinerbaums und
Vereinigung zum Teilgraphen G'.
G'
Ausblenden Knoten B
MST (V\{B})
G'
Ausblenden Knoten E
MST (V\{E})
G'
Ausblenden Knoten C
MST (V\{C})
G'
MST (V\{F})
Ausblenden Knoten F
Algorithmen auf Graphen, Blatt 1, Aufgabe 1
Lösung
5
MST (V\{H})
G'
Ausblenden Knoten H
• Schritt 3:
Auswahl eines zufälligen Knotens vConn aus (V',E'), Bildung des Steinerbaums (V'', E''),
der aus sämtlichen 1-Knoten und vConn besteht und Vereinigung von (V',E') mit (V'', E'').
G'
MST (V\{H})
Auswahl eines zufälligen Knotens aus (V', E')
Der Lösungsgraph G' sieht also wie folgt aus:
Lösungsgraph G'
Algorithmen auf Graphen, Blatt 1, Aufgabe 1
Komplexität
6
3. Komplexität
Die Komplexität ergibt sich aus den drei Teilschritten:
• Schritt 1
forall (v∈V){
if (p(v)==1) V1=V1∪{v};
if (p(v)==2) V2=V2∪{v};
} //forall
(V',E')= MST(V,E,c,V2);
}
O(|V|) + O(MST)
• Schritt 2
forall (v∈V'){
EV= set of all edges∈E including node v;
(localV,localE)= MST(V\{v},E\EV,c,V'\{v});
ResultV=ResultV∪localV;
ResultE=ResultE∪localE;
} //forall
}
O(|V|) * MST)
• Schritt 3
vConn=random node∈V';
(V'',E'')= MST(V,E,c,V1∪{vConn});
ResultV=ResultV∪V'';
ResultE=ResultE∪E'';
}
O(MST)
Schließlich ergibt sich folgende Gesamtkomplexität:
n + n*(n*Log(n)+m) + n*(n-1)*((n-1)*Log(n-1)+(m-1)) + (k1+1)*((k1+1)*Log(k1+1)+m)
= O(n3*Log(n)+n 2m)
Algorithmen auf Graphen, Blatt 1, Aufgabe 1
Herunterladen