Thema: Spannbaum |
Shizmo
Antworten: |
10 |
Hits: |
7.193 |
|
|
Zitat: |
Original von eulerscheZahl
[...]
Das heißt aber, dass alle Knoten im Kreis in C liegen (oder in dessen Komplement).[...] |
Hier komm ich leider nicht ganz mit, warum?
|
|
Thema: Spannbaum |
Shizmo
Antworten: |
10 |
Hits: |
7.193 |
|
|
Zitat: |
Original von eulerscheZahl
[...] Die größte Kante des Kreises würde dann aber nicht über den Schnitt gehen. |
Ah ich glaub ich versteh schon, ich habe es so gemeint (Bild 1), aber das kann ja nicht sein oder? Weil der nördlichste und südlichste Knoten bereits eine Zusammenhangskomponente sind, richtig?? Also gibt es nur noch dieses Szenario (Bild 2).?
|
|
Thema: Spannbaum |
Shizmo
Antworten: |
10 |
Hits: |
7.193 |
|
|
Aber angenommen es gibt bei deinem Beispielgraphen noch einen Knoten 5 der rechts in der Mitte ist und eine (gestrichelte) Kante nach 1 hat mit Gewicht 5. Dann wäre beim Schnitt ja 4 die leichteste Kante und es bildet sich ein Kreis.
|
|
Thema: Spannbaum |
Shizmo
Antworten: |
10 |
Hits: |
7.193 |
|
|
Danke für deine Antwort!!
Ich versteh nicht ganz wie du Kreise ausschließt, es gibt zwar immer nur eine eindeutige leichte Kante, aber die könnte beim Schnitt ja auch so liegen, dass sich ein Kreis bildet.?
Wenn das jetzt geklärt wäre, dann:
Zitat: |
[...] nimm zwei nicht verbundene Teile und finde die leichteste Kante. |
Wenn ich das (vermutlich |V|-1 mal) gemacht habe bin ich auch schon fertig oder?
|
|
Thema: Spannbaum |
Shizmo
Antworten: |
10 |
Hits: |
7.193 |
|
|
Hallo
Zitat: |
Gegeben ist ein ungerichteter gewichteter Graph G=(V,E). Zeigen Sie, dass G einen eindeutigen minimalen Spannbaum besitzt, wenn für jeden Schnitt (C,V-C) von G eine eindeutige leichte Kante existiert die (C,V-C) kreuzt. |
Ich nehme gerne Vorschläge entgegen
LG
|
|
Thema: Zweifach zusammenhängend |
Shizmo
Antworten: |
20 |
Hits: |
13.001 |
|
|
Ich glaub es hat grade klick gemacht.
Zitat: |
Original von eulerscheZahl
Grundüberlegung:
Bei der Tiefensuche entsteht ein Baum.
[...] |
Bin grad nochmal alles durchgegangen und habe mir Tiefensuchbäume aufgezeichnet und somit ist alles viel klarer geworden.
Vielen Dank für deine Hilfe!!!!
|
|
Thema: Zweifach zusammenhängend |
Shizmo
Antworten: |
20 |
Hits: |
13.001 |
|
|
Wird keiner gefunden gibt er aber auch ein false zurück und start.outDegree ist immer 1.
Ich hab grad gemerkt, dass mir dieser Minimum-Vergleich fehlt, vermutlich klappt es deswegen nicht. Versteh aber auch nicht ganz für was der ist.
Hab mal eine andere Version, die funktioniert soweit, allerdings nicht für einen trivialen Graph (also mit nur zwei Knoten).
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
|
time = 0
isBiconnected = true
for each v in V
v.color = weiß
v.PI = NIL
BICONNECTED(startNode)
return isBiconnected
--------------------------
BICONNECTED(u)
u.color = gray
u.d = time
u.l = u.d
time++
for each v in Adj[u]
if v.color == white
v.PI = u
MDFS-visit(v)
/* Kleineren Low-Wert des Kindes uebernehmen. */
u.l = min{u.l, v.l}
/* u ist Artikulationspunkt */
if v.l > u.d
isBiconnected = false
return
/* Rueckwaertskante */
if v.color == gray and u.PI != v
/* Merken, welche am weitesten zurueck reicht. */
u.l = min{u.l, v.d}
u.color = black |
|
|
|
Thema: Zweifach zusammenhängend |
Shizmo
Antworten: |
20 |
Hits: |
13.001 |
|
|
Hja, das glaub ich dir
Linker Knoten = A, mittlerer B und rechter Knoten = C.
A.visited = true
A.dfs = 1
A.lowlink = 1
B.Pi = A
A.outDegree = 1
B.visited = true
B.dfs = 2
B.lowlink = 2
C.Pi = B
B.outDegree = 1
C.visited = true
C.dfs = 3
C.lowlink = 3
if (C.lowlink >= B.dfs) (3>2) => return false
=> bool biconnected = true && start.outDegree == 1
Also true.
Aber der Graph ist nicht biconnected.
|
|
Thema: Zweifach zusammenhängend |
Shizmo
Antworten: |
20 |
Hits: |
13.001 |
|
|
Hmm, also Zeile 24 soll v.outDegree++ heißen oder?
Wenn ich aber so einen Graph habe (Anhang) wird false returned und der StartKnoten hat zu dem Zeitpunkt auch den outDegree-Wert = 1, also true, was aber nicht stimmt. (Der linke Knoten ist der Startknoten)
|
|
Thema: Zweifach zusammenhängend |
Shizmo
Antworten: |
20 |
Hits: |
13.001 |
|
|
Zitat: |
Original von eulerscheZahl
[...]
Du musst also nur noch den Grad des Startknotens prüfen. |
Hast du einen Vorschlag, wie ich das in den bisjetzigen Pseudocode implementieren könnte?
|
|
Thema: Zweifach zusammenhängend |
Shizmo
Antworten: |
20 |
Hits: |
13.001 |
|
|
Egal ob ungerichtet oder gerichtet?
Ich hab vergessen dazu zu schreiben, dass es sich um ungerichtete Graphen handelt.
|
|
Thema: Zweifach zusammenhängend |
Shizmo
Antworten: |
20 |
Hits: |
13.001 |
|
|
Hey danke fuer deine Antwort, aber egal was hier der Startknoten wäre, jeder hat Grad > 1 , aber es gibt keinen Artikulationspunkt.
|
|
Thema: Zweifach zusammenhängend |
Shizmo
Antworten: |
20 |
Hits: |
13.001 |
|
|
Hallo, danke für deine Antwort, hab mir jetzt den Tarjan-Algorithmus etwas angeschaut und hab eine etwas abgespecktere Version entdeckt und diese noch etwas bearbeitet.
Mein Problem ist allerdings, dass der Startknoten nicht überprüft wird und immer wenn er bei diesem am Ende angelangt, false ausgibt. Ansonsten könnte es evtl funktionieren.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
|
//Initialisieren
for each n in G
n.visited = false
n.dfs = NIL
n.lowlink = NIL
n.PI = NIL
counter = 0
findArtPoint(start)
//Eigentliches Programm
findArtPoint(Vertex v)
v.visited = true
v.dfs = counter++
v.lowlink = v.dfs
for each w in Adj[v]
if (! w.visited) {
w.PI = v
findArtPoint(w);
if (w.lowlink >= v.dfs)
return false
else if (v.PI != w)
v.lowlink = Minimum(v.lowlink, w.dfs) |
|
|
|
|
|
|