Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:graphen:zpg:minimalspanningtree:prim:start [07.12.2022 12:10] – [Beispiel] Frank Schiebel | faecher:informatik:oberstufe:graphen:zpg:minimalspanningtree:prim:start [18.03.2025 07:12] (aktuell) – [Beispiel] Svenja Müller | ||
---|---|---|---|
Zeile 7: | Zeile 7: | ||
* Versuche herauszufinden, | * Versuche herauszufinden, | ||
- | * Welche Situation muss vermieden werden? Fällt dir dafür eine einfache Lösung ein. | + | * Welche Situation muss vermieden werden? Fällt dir dafür eine einfache Lösung ein? |
* Beschreibe deinen so gefundenen Algorithmus in einem kurzen Text. | * Beschreibe deinen so gefundenen Algorithmus in einem kurzen Text. | ||
* Vergleiche deine Beschreibung mit den Musterlösung (unten) und bewerte, ob du das Vorgehen richtig nachvollzogen hast. | * Vergleiche deine Beschreibung mit den Musterlösung (unten) und bewerte, ob du das Vorgehen richtig nachvollzogen hast. | ||
Zeile 25: | Zeile 25: | ||
((Quelle https:// | ((Quelle https:// | ||
+ | < | ||
+ | < | ||
+ | <col sm=" | ||
+ | {{ 300px-prim_algorithm_0.svg.png? | ||
+ | </ | ||
+ | <col sm=" | ||
+ | Dies ist der Graph, zu dem der Algorithmus von Prim einen minimalen Spannbaum berechnet. Die Zahlen bei den einzelnen Kanten geben das jeweilige Kantengewicht an. | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
- | | {{ 300px-prim_algorithm_0.svg.png? | + | < |
- | | {{ 300px-prim_algorithm_1.svg.png? | + | < |
- | | {{ 300px-prim_algorithm_2.svg.png? | + | <col sm=" |
- | | {{ 300px-prim_algorithm_3.svg.png? | + | {{ 300px-prim_algorithm_1.svg.png? |
- | | {{ 300px-prim_algorithm_4.svg.png? | + | </ |
- | | {{ 300px-prim_algorithm_5.svg.png? | + | <col sm=" |
- | | {{ 300px-prim_algorithm_6.svg.png? | + | Als Startknoten für den Spannbaum |
- | | {{ prim_algorithm_7.svg.png? | + | Mit dem Startknoten können die Knoten A,B,E und F jeweils unmittelbar durch die Kanten DA, DB, DE und DF verbunden werden. |
+ | Unter diesen Kanten ist DA diejenige mit dem geringsten Gewicht und wird deshalb zusammen mit dem Knoten A zum Graphen T hinzugefügt. | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <col sm=" | ||
+ | {{ 300px-prim_algorithm_2.svg.png? | ||
+ | </ | ||
+ | <col sm=" | ||
+ | Mit dem bestehenden Graphen T kann der Knoten B durch die Kanten | ||
+ | |||
+ | |||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <col sm=" | ||
+ | {{ 300px-prim_algorithm_3.svg.png? | ||
+ | </ | ||
+ | <col sm=" | ||
+ | Mit dem bestehenden Graphen T kann der Knoten B durch die Kanten AB oder DB, der Knoten E durch die Kanten DE oder FE und der Knoten G durch die Kante FG verbunden werden. Unter diesen Kanten ist AB diejenige mit dem geringsten Gewicht und wird deshalb zusammen mit dem Knoten B zum Graphen T hinzugefügt. | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <col sm=" | ||
+ | {{ 300px-prim_algorithm_4.svg.png? | ||
+ | </ | ||
+ | <col sm=" | ||
+ | Mit dem bestehenden Graphen T kann der Knoten C durch die Kante BC, der Knoten E durch die Kanten | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <col sm=" | ||
+ | {{ 300px-prim_algorithm_5.svg.png? | ||
+ | </ | ||
+ | <col sm=" | ||
+ | Mit dem bestehenden Graphen T kann der Knoten C durch die Kanten BC oder EC und der Knoten | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <col sm=" | ||
+ | {{ 300px-prim_algorithm_6.svg.png? | ||
+ | </ | ||
+ | <col sm=" | ||
+ | Der verbliebene Knoten G kann durch die Kanten EG oder FG mit dem Graphen | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <col sm=" | ||
+ | {{ prim_algorithm_7.svg.png? | ||
+ | </ | ||
+ | <col sm=" | ||
+ | Der Graph T enthält jetzt alle Knoten des Ausgangsgraphen und ist ein minimaler Spannbaum dieses Ausgangsgraphen. | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A2) === | ||
+ | |||
+ | Übersetze die Beschreibung aus Aufgabe 1 in Pseudocode. | ||
+ | |||
+ | ++++ Pseudocode Prim | | ||
+ | |||
+ | < | ||
+ | Minimal spanning tree: | ||
+ | Hole eine Liste aller Kanten und sortiere sie aufsteigend | ||
+ | Setze einen beliebigen Knoten auf markiert | ||
+ | Wiederhole n-1 mal * Versuche herauszufinden, | ||
+ | * Welche Situation muss vermieden werden? Fällt dir dafür eine einfache Lösung ein. | ||
+ | * Beschreibe deinen so gefundenen Algorithmus in einem kurzen Text. | ||
+ | * Vergleiche deine Beschreibung mit den Musterlösung (unten) und bewerte, ob du das Vorgehen richtig nachvollzogen hast. | ||
+ | Wiederhole für jede Kante ka der Liste | ||
+ | Falls Markierung des Startknotens != Markierung des Zielknotens | ||
+ | naechsteKante = ka | ||
+ | brich Schleife ab | ||
+ | Ende-Falls | ||
+ | Ende-Wiederhole | ||
+ | Markiere naechsteKante und lösche sie aus der Liste | ||
+ | Markiere Start- und Zielknoten | ||
+ | Ende Wiederhole | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A3) === | ||
+ | |||
+ | Implementiere eine eigene Version des Prim-Algorithmus im Graphentester. | ||
+ | |||
+ | ++++ Lösungsvorschlag | | ||
+ | <code java> | ||
+ | List< | ||
+ | List< | ||
+ | Collections.sort(kanten); | ||
+ | knoten.get(0).setMarkiert(true); | ||
+ | |||
+ | for(int i = 1; i< | ||
+ | Kante ka=null; | ||
+ | for(Kante ka2 : kanten) { | ||
+ | if(ka2.getStart().isMarkiert() != ka2.getZiel().isMarkiert()) { | ||
+ | ka = ka2; | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ka.setMarkiert(true); | ||
+ | kanten.remove(ka); | ||
+ | ka.getStart().setMarkiert(true); | ||
+ | ka.getZiel().setMarkiert(true); | ||
+ | } | ||
+ | </ | ||
+ | ++++ |