Algoritmer og problemløsning
Forstå Big O, søgning, sortering, recursion, dynamic programming og grafer.
Big O
Big O beskriver, hvordan arbejdet vokser med inputtet:
- O(1): dictionary-opslag.
- O(log n): binary search i sorterede data.
- O(n): én gennemgang af en list.
- O(n log n): effektiv sortering.
- O(n²): to indlejrede gennemgange.
Binary search
def binary_search(values: list[int], target: int) -> int | None:
low, high = 0, len(values) - 1
while low <= high:
middle = (low + high) // 2
if values[middle] == target:
return middle
if values[middle] < target:
low = middle + 1
else:
high = middle - 1
return NoneBinary search kræver sorterede værdier. Uden den forudsætning er resultatet forkert.
Recursion
En rekursiv funktion skal have et base case og nærme sig det ved hvert kald. Til meget dybe problemer er en eksplicit stack ofte bedre i Python.
Dynamic programming
Gem resultater af overlappende delproblemer med caching eller byg løsningen nedefra i en tabel. Det kan ændre en eksponentiel løsning til en lineær.
Grafer
Brug BFS til korteste vej i en uvægtet graf og DFS til gennemløb, komponenter og cycle detection. En adjacency list er normalt en dictionary med sets eller lists.
Problemløsningsmetode
- Skriv input, output og edge cases.
- Lav først en korrekt, simpel løsning.
- Mål dens kompleksitet.
- Vælg en datastruktur, der fjerner flaskehalsen.
- Test tomt input, dubletter og grænseværdier.
Øvelse
Find den korteste vej mellem to brugere i et socialt netværk. Implementér BFS, returnér selve ruten, og håndtér ukendte og afkoblede brugere.