7.4 O(n) — lineaire tijd
Leerdoel: je herkent algoritmes waarvan het werk recht-evenredig
groeit met n, en je ziet visueel een rechte schuine lijn.
Hoe gedraagt het zich?
O(n) betekent: het werk schaalt mee met de invoer. Twee keer zoveel
elementen → twee keer zoveel werk. Tien keer zoveel → tien keer zoveel.
Analogie: vakkenvullen in een supermarkt. Hoe meer pakken melk in de voorraad, hoe langer je bezig bent ze in het schap te zetten. Recht- evenredig.
Voorbeelden in Python
sum(lijst) # alles optellen — bekijkt elk element
max(lijst) # grootste vinden — bekijkt elk element
doel in lijst # zoeken — bekijkt elk element tot match
for x in lijst: ... # door de hele lijst lopen
Bij elk van deze operaties moet Python in het slechtste geval alle elementen aanraken. Verdubbel de lijst → verdubbel het werk.
Voorspel
We tellen het aantal vergelijkingen bij lineair zoeken naar een doel dat niet in de lijst staat (slechtste geval). Hoeveel stappen op een lijst van 100.000 elementen?
Antwoord
100.000 stappen. Het algoritme moet de hele lijst doorlopen om zeker te weten dat het doel er niet in staat. Slechtste geval = lengte van de lijst.
Run — kijk hoe het groeit
Wat zie je?
Een rechte schuine lijn: stappen = n. Verdubbel n, verdubbel
stappen.
Op log-log assen zou je een rechte lijn met helling 1 zien.
Welke algoritmes zijn O(n)?
In dit curriculum:
- Lineair zoeken — in het slechtste geval
nvergelijkingen. Zie lineair-zoeken/07-compleet. - Vind maximum — altijd
nvergelijkingen. Zie vind-maximum/06-compleet. - Max én min in één pass —
nvergelijkingen (metelifzelfs minder werk per element, maar groeigedrag isO(n)). Zie max-en-min/06-compleet.
Belangrijk: 2 vergelijkingen per element (zoals bij max-en-min) is nog
steeds O(n), niet O(2n). Constanten tellen niet mee in Big O.
Door naar stap 5: O(log n) — logaritmisch →.