Algoritme van Prim

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

Het algoritme van Prim is een algoritme om de minimaal opspannende boom van een graaf te vinden.

Het algoritme werd in 1930 ontdekt door de wiskundige Vojtěch Jarník en in 1957 onafhankelijk herontdekt door de informaticus Robert C. Prim. In 1959 werd het ook door Dijkstra ontdekt. Het algoritme wordt ook wel eens het DJP-algoritme of algoritme van Jarnik genoemd.

Algoritme[bewerken]

Gegeven een samenhangende gewogen graaf G = (V, E) met een verzameling knopen V = \{v_1, v_2, ..., v_n\}. De volgende procedure is een algoritme dat een minimale opspannende boom T construeert.

  • Start: Initialiseer T = \{\{v_1, v_i\}\} waar i zo is dat \{v_1, v_i\} de tak vanuit v_1 is van minimale lengte. (Merk op dat \{v_i, v_j\} de notatie voor ongeordende paren is: de bogen zijn ongericht.)
  • Stop: Stoppen indien T precies n-1 bogen heeft.
  • Boog toevoegen:
Van alle bogen die een knoop van T verbinden met een knoop die niet tot T behoort, voeg de boog met het kleinste gewicht toe (indien meerdere met het kleinste gewicht 1 kiezen).
Deze boog bestaat aangezien het een samenhangende graaf is en T nog niet alle knopen bevat. T zal door deze stap geen kringen bevatten aangezien de toegevoegde knoop nog niet in T zat. Ga terug naar de stap Stop.

Voorbeeld[bewerken]

Prim Algorithm 0.svg Dit is de gegeven graaf, waarin de getallen naast de bogen de gewichten van die bogen voorstellen.
Prim Algorithm 1.svg Bij de start kiezen we een willekeurige knoop uit, knoop D. Deze is verbonden met (in het blauw aangegeven) knopen A, B, E en F door de bogen DA, DB, DE en DF. Daarvan heeft DA (lichtblauw) het kleinste gewicht. Dus wordt boog DA met knoop A aan de graaf T toegevoegd.
Prim Algorithm 2.svg Met de knopen A en D in de reeds gevormde (groene) graaf T zijn de knopen B, E en F verbonden door de bogen AB, DB, DE en DF. Van deze vier bogen heeft DF het kleinste gewicht. Dus wordt boog DF met knoop F aan de graaf T toegevoegd.
Prim Algorithm 3.svg Met de gevormde graaf T kunnen nu de knopen B, E en F verbonden worden door de bogen AB, DB, DE, FE en FG. Hiervan heeft boog AB het kleinste gewicht. Dus wordt boog AB met knoop B aan de graaf T toegevoegd.
Prim Algorithm 4.svg Met de gevormde graaf T kunnen nu de knopen C, door boog BC, E, door de bogen BE, DE en FE, en G, door de boog FG, verbonden worden. Van deze bogen heeft BE het kleinste gewicht. Dus wordt boog BE met knoop E toegevoegd aan T.
Prim Algorithm 5.svg Met de reeds gevormde graaf T kunnen de knopen C, door bogen BC en EC, en G, door de bogen EG en FG, verbonden worden. Van deze bogen heeft EC het kleinste gewicht. Dus wordt EC en knoop C aan T toegevoegd.
Prim Algorithm 6.svg De overblijvende knoop G kan door boegn EG en FG verbonden worden met graaf T. De boog EG heeft het kleinste gewicht, en dus wordt EG en knoop G toegevoegd aan T.
Prim Algorithm 7.svg Alle knopen zijn nu toegevoegd aan T en T vormt een minimaal opspannende boog van de gegeven graaf.

Zie ook[bewerken]