Big-O-notatie: tijdcomplexiteit

Code optimaliseren in Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Wat is tijdcomplexiteit?

  • Tijdcomplexiteit: Hoe de looptijd groeit met de invoergrootte
  • Beantwoordt: "Wat als mijn data 10× groter wordt?"
  • Niet gericht op absolute tijd
Code optimaliseren in Java

Big-O-notatie

Wiskundige notatie voor het worstcasescenario.

Veelvoorkomende complexiteitsklassen:

  • O(1): Constante tijd - onafhankelijk van grootte
Code optimaliseren in Java

O(1) begrijpen

  • Een voorbeeld van een O(1)-operatie is ArrayList's get()

Interne (vereenvoudigde) implementatie voor een ArrayList met Strings:

public class ArrayList {}
    private String[] data; // Internal array
    private int size;

    // Get operation - direct array access
    public String get(int index) {
        return data[index]; // O(1)
    }
}
Code optimaliseren in Java

Big-O-notatie

Wiskundige notatie voor het worstcasescenario

Veelvoorkomende complexiteitsklassen:

  • O(1): Constante tijd - onafhankelijk van grootte
  • O(n): Lineaire tijd - groeit met invoergrootte
Code optimaliseren in Java

O(n) begrijpen

  • Een soortgelijk voorbeeld, maar voor ArrayList's contains()
public boolean contains(Object o) {
    return indexOf(o) >= 0;
}

public int indexOf(Object o) {
    // Linear search through array
    for (int i = 0; i < size; i++) {
        if (o.equals(elementData[i])) {
            return i;
        }
    }
    return -1; // Not found
}
Code optimaliseren in Java

Big-O-notatie

Wiskundige notatie voor het worstcasescenario

Veelvoorkomende complexiteitsklassen:

  • O(1): Constante tijd - onafhankelijk van grootte
  • O(n): Lineaire tijd - groeit met invoergrootte
  • O(n²): Kwadratische tijd - groeit kwadratisch met invoer
Code optimaliseren in Java

Een praktisch voorbeeld met kwadratische complexiteit

// Finding a pair of numbers that sum to a target value
// Time complexity: O(n²)

public int[] findPairWithSum(ArrayList<Integer> numbers, int targetSum) {
    for (int i = 0; i < numbers.size(); i++) {
        for (int j = i + 1; j < numbers.size(); j++) {
            if (numbers.get(i) + numbers.get(j) == targetSum) {
                console.log("Found them!")
            }
        }
    }
}
Code optimaliseren in Java

Waarom tijdcomplexiteit telt

Effect van invoergrootte:

  • O(1): 1.000 -> 1.000.000 items = Zelfde tijd!
  • O(n): 1.000 -> 1.000.000 items = 1.000× trager
  • O(n²): 1.000 -> 1.000.000 items = 1.000.000× trager

Screenshot 2025-05-10 at 2.27.06 PM.png

Code optimaliseren in Java

Laten we oefenen!

Code optimaliseren in Java

Preparing Video For Download...