Algoritmer
En algoritme er en præcis beskrivelse af, hvordan man løser et problem. Det er en opskrift eller et sæt instruktioner, der fører fra input til output.
Når du skriver et program, skriver du i praksis en eller flere algoritmer. Nogle er små og enkle, andre er store og komplekse. Algoritmer handler derfor ikke om et bestemt programmeringssprog, men om selve løsningen på problemet.
Hvorfor er algoritmer vigtige?
To programmer kan løse den samme opgave, men gøre det på meget forskellige måder. Nogle løsninger er lette at forstå, andre er hurtigere, og nogle skalerer bedre, når datamængden bliver stor.
At lære om algoritmer gør dig bedre til at:
- tænke systematisk
- dele problemer op i trin
- vælge mellem forskellige løsninger
- forstå hvorfor nogle løsninger er hurtigere end andre
Eksempel: Sortering
Sortering er et klassisk algoritmeproblem. Her er en simpel sorteringsalgoritme, bubble sort:
def bubble_sort(liste):
n = len(liste)
for i in range(n):
for j in range(0, n - i - 1):
if liste[j] > liste[j + 1]:
liste[j], liste[j + 1] = liste[j + 1], liste[j]
return liste
tal = [64, 34, 25, 12, 22, 11, 90]
print(bubble_sort(tal))
Denne algoritme er ikke den hurtigste, men den er god til at forstå idéen om at sammenligne elementer og bytte dem rundt.
Eksempel: Søgning
At finde et element i en liste er et andet grundlæggende problem:
def lineaer_soegning(liste, maal):
for i in range(len(liste)):
if liste[i] == maal:
return i
return -1
tal = [10, 20, 30, 40, 50]
print(lineaer_soegning(tal, 30)) # 2
print(lineaer_soegning(tal, 35)) # -1
Algoritmisk kompleksitet
Algoritmer vurderes ofte på, hvor meget tid og hukommelse de bruger. Dette beskrives ofte med Big O-notation.
- O(1): Konstant tid
- O(n): Lineær tid
- O(n²): Kvadratisk tid
- O(log n): Logaritmisk tid
Som begynder behøver du ikke mestre Big O i dybden. Det vigtigste er at forstå, at nogle løsninger skalerer bedre end andre.
Hvad bør du kunne som begynder?
Som begynder er det rigeligt, hvis du kan:
- forstå at en algoritme er en løsning i trin
- læse og forklare en simpel algoritme
- se forskel på en enkel og en unødigt tung løsning
Det er først senere, at du behøver gå dybere ned i effektivitet og avancerede algoritmer.
Næste skridt
Når du har set, hvordan problemer kan løses som trin-for-trin-algoritmer, er næste naturlige spørgsmål, hvordan man organiserer større programmer på forskellige måder. Fortsæt med Paradigmer.