Het complete algoritme
Hier bouw je op verder
- Python Functies
- Python Return-waarden
Leerdoel: je ziet alle bouwstenen samen werken en onderzoekt het algoritme als geheel.
Alles samen
In de bouwstenen heette de variabele max_tot_nu_toe, want dat is precies
wat hij is: het maximum tot nu toe. Nu de functie af is, is maximum
korter en even duidelijk.
def vind_maximum(lijst):
maximum = lijst[0]
for waarde in lijst:
if waarde > maximum:
maximum = waarde
return maximum
- Regel 2:
Bouwsteen 3 — de startwaarde is
lijst[0]: gegarandeerd een echte waarde uit de lijst, dus ook veilig bij louter negatieve getallen. - Regel 3:
Bouwsteen 2 — door de lijst lopen, elke waarde precies één keer.
- Regel 4-5:
Bouwsteen 1 — vergelijken met de kampioen tot nu toe, en bij een grotere waarde overschrijven.
- Regel 6:
Het resultaat teruggeven — ná de lus, dus pas als alles bekeken is.
Run
Interactief model
Vind het maximum
Onthoud de grootste waarde tot nu toe.
Startwaarde
We starten met 3 als grootste tot nu toe.
Onderzoek
Speel met de code. Probeer in elk geval:
- Wat gebeurt er op een lege lijst
[]? - En op een lijst met strings,
["banaan", "appel", "kers"]? - En op een gemengde lijst,
[1, "twee", 3]?
Wat zie je?
Strings → werkt. Alfabetisch vergelijken: 'k' > 'b' > 'a', dus
"kers" > "banaan" > "appel" → output kers. Python kan strings
vergelijken met < en > (alfabetisch).
Lege lijst → IndexError op lijst[0]. Ons algoritme heeft geen
bescherming.
Gemengd → TypeError: '>' not supported between instances of 'str' and 'int'. Je kunt 1 niet met "twee" vergelijken.
Hoeveel werk doet dit?
Voor n elementen doet dit algoritme n vergelijkingen; lijst[0] wordt
ook één keer met zichzelf vergeleken. Dat is O(n): lineair in de
lijstgrootte.
Wil je écht minimaal werk? Sla het eerste element over met lijst[1:]
(zie bouwsteen 3). Dan zijn het n − 1
vergelijkingen. Maar O(n) blijft
O(n) — die ene vergelijking maakt geen verschil voor de groeisnelheid.
Door naar aanpassen.