Wat is Tijdcomplexiteit (O-notatie)?
Beschrijving van hoe de rekeninspanning (tijdcomplexiteit) of het geheugen (ruimtecomplexiteit) dat een algoritme nodig heeft, groeit met het aantal gegevens n. Ze wordt geschreven in O-notatie, zoals O(n), O(n log n) of O(n²), waarbij constante factoren en termen van lagere orde wegvallen.
Japanse benaming: 計算量
“Tijdcomplexiteit (O-notatie)” komt voor in 8 oefenvragen uit 2 onderwerpen, bijv. Datastructuren en algoritmen, Prestatiemeting en profiling.
Vakgebied: Datastructuren en algoritmen
O-notatie lezen
O(f(n)) betekent dat de inspanning voor voldoende grote n binnen een constant veelvoud van f(n) blijft. Een algoritme dat 3n² + 5n + 2 vergelijkingen doet, wordt geschreven als O(n²), omdat de term n² overheerst naarmate n groeit. Veelvoorkomende klassen zijn, van klein naar groot, O(1) (constant), O(log n) (binair zoeken), O(n) (lineair zoeken), O(n log n) (mergesort, heapsort), O(n²) (bubblesort, selection sort) en O(2ⁿ) (naïef uitputtend zoeken). Voor n = 1000 is log₂ n ongeveer 10, n log₂ n ongeveer 10.000 en n² is 1 miljoen, dus bij grote hoeveelheden gegevens is het verschil in complexiteit doorslaggevend.
Beste, gemiddelde en slechtste geval
Hetzelfde algoritme kan afhankelijk van de invoer verschillend veel werk doen. Insertion sort doet op gesorteerde gegevens n−1 vergelijkingen, O(n), maar op omgekeerd gesorteerde gegevens n(n−1)/2, O(n²). Quicksort is gemiddeld O(n log n), maar in het slechtste geval O(n²), afhankelijk van de keuze van de pivot en de gegevens. Systemen die een bovengrens voor de responstijd nodig hebben, letten op het slechtste geval, terwijl schattingen van de totale verwerkingshoeveelheid van het gemiddelde geval uitgaan. Als een af en toe dure stap over veel bewerkingen uitmiddelt tot een constante, zoals bij toevoegen aan een dynamische array, worden de kosten beschreven als geamortiseerd O(1).
Veelgestelde vragen
Wat is het grondtal van de logaritme in O(log n)?
Een ander grondtal verandert de waarde alleen met een constante factor (log₂ n = log₁₀ n ÷ log₁₀ 2), dus in de O-notatie wordt het grondtal meestal weggelaten. Bij algoritmen die de gegevens elke stap halveren, zoals binair zoeken, ligt het werkelijke aantal dicht bij log₂ n.
Wat is het verschil tussen tijdcomplexiteit en ruimtecomplexiteit?
Tijdcomplexiteit beschrijft hoe de rekeninspanning (uitvoeringstijd) groeit, en ruimtecomplexiteit hoe het benodigde geheugen groeit. Beide worden samen vergeleken: mergesort is O(n log n) in tijd met O(n) werkruimte, terwijl heapsort O(n log n) in tijd is met O(1) ruimte.