Ga naar hoofdinhoud

Bouwsteen 4 — kies de volgende node

Hier bouw je op verder: Functies, Itereren over dictionaries en Continue

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

Leerdoel: je vertaalt stap A van het papier naar Python: vind de node met de laagste afstand die nog niet bezocht is.

Wat we willen​

Op papier pakte je de laagste afstand onder de rijen die nog niet bekend waren. In Python loop je over afstanden, slaat over wie al in bezocht zit, en onthoudt wie de laagste heeft.

Het patroon — lineair zoeken naar minimum​

Dit is vind-maximum, maar dan het minimum, en met een filter.

beste_node = None
kleinste_afstand = float('inf')

for node, d in afstanden.items():
if node in bezocht:
continue # sla bezochten over
if d < kleinste_afstand:
kleinste_afstand = d
beste_node = node

Drie regels doen het werk. if node in bezocht: continue slaat een node over die al klaar is. d < kleinste_afstand vervangt alleen bij echt kleiner. En beste_node begint op None: is alles bezocht, dan komt niemand door het filter en blijft het None. Dat is ons signaal dat we klaar zijn.

Voorspel​

Wat denk je dat dit print?

afstanden = {'A': 0, 'B': 4, 'C': 2, 'D': float('inf')}
bezocht = {'A'}

beste_node = None
kleinste = float('inf')
for node, d in afstanden.items():
if node in bezocht:
continue
if d < kleinste:
kleinste = d
beste_node = node

print(beste_node)
Antwoord
C

A wordt overgeslagen, die is al bezocht. Bij B is 4 kleiner dan oneindig, dus B wordt de beste met 4. Bij C is 2 kleiner dan 4, dus C neemt het over. Bij D is oneindig niet kleiner dan 2, dus er verandert niets. Het eind is C.

Run​

Python
Code-omgeving wordt voorbereid…

In een functie​

Dit gebeurt elke ronde opnieuw, dus het wordt een functie:

Python
Code-omgeving wordt voorbereid…
Verwachte uitvoer
A
C
B
None

Zonder bezochte nodes wint A met 0. Met A bezocht is C de laagste die overblijft, met A en C bezocht wint B, en met alles bezocht komt niemand door het filter: None, ons stopsignaal.

Wat nu nog mist​

De graph (bouwsteen 1), de tabel (2), relax (3) en kies volgende (4) staan er nu elk apart. Samen vormen ze één ronde van Dijkstra, één rij van je papieren tabel.

Door naar bouwsteen 5: doe één ronde →.