En algoritm är en tydligt definierad, ändlig och stegvis procedur för att lösa ett problem eller utföra en beräkningsuppgift. En algoritm tar emot noll eller flera indata, utför ett begränsat antal välbestämda operationer och ger ett eller flera utdata som svar.
Ett recept är ett klassiskt och lättförståeligt exempel på en algoritm: det anger vad som ska göras i vilken ordning, vilka ingredienser (indata) som behövs och vilket slutresultat som förväntas (rätten). Precis som ett recept måste en algoritm vara entydig så att någon (eller något) kan förstå och följa stegen utan tolkning.
Ordet "algoritm" och äldre formen "algorism" härstammar från namnet på den persiska matematikern Al-Khwārizmī (persiska: خوارزمی, ca 780–850), vars arbete bidrog till utvecklingen av aritmetik och metoder för numerisk beräkning.
Viktiga egenskaper hos en algoritm
- Finitet: Algoritmen måste avslutas efter ett ändligt antal steg.
- Determinism (för deterministiska algoritmer): samma indata ger alltid samma utdata och samma stegordning.
- Definithet: varje steg måste vara klart och entydigt beskrivet.
- In- och utdata: en algoritm kan ta emot indata och leverera ett bestämt utfall eller flera utfall.
- Effektivitet: stegen ska vara rimligt genomförbara (utförbara med begränsade resurser).
Informella och formella beskrivningar
Informellt kan en algoritm beskrivas som en "lista med steg" och skrivas på vanligt språk. Inom datavetenskap skrivs algoritmer ofta i pseudokoder, ritas som flödesscheman eller implementeras i programmeringsspråk. Formellt kan en algoritm definieras som en sekvens av operationer som kan utföras av en Turingmaskin.
Exempel på vanliga algoritmer
- Sökningsalgoritmer: linjär sökning, binärsökning (binary search).
- Sorteringsalgoritmer: bubblesort, mergesort, quicksort, heapsort.
- Numeriska algoritmer: Euklides algoritm för största gemensamma delare.
- Grafalgoritmer: Dijkstra för kortaste vägen, BFS och DFS för genomgång av grafer.
- Algoritmer för optimering: dynamisk programmering, greedy-algoritmer, backtracking.
Hur algoritmer fungerar inom datavetenskap
I datavetenskap är fokus ofta på hur algoritmer utförs av datorer och hur väl de skalar med ökande indata. När en algoritm implementeras i kod påverkas dess beteende av val av datastrukturer, programmeringsspråk och maskinvara. En algoritm som fungerar bra för små datamängder kan bli orealistiskt långsam eller minneskrävande för stora datamängder om den inte är effektivt utformad.
Komplexitet och prestanda
Två centrala mått för att bedöma algoritmer är tidskomplexitet och platskomplexitet (minnesanvändning). Dessa uttrycks ofta med asymptotisk notation, t.ex. Big O-notation (O(n), O(n log n), O(n^2) osv.), som beskriver hur resursbehovet växer med indatastorleken. Valet av algoritm påverkar praktisk körningstid och minneskrav, och det finns ofta avvägningar mellan tid och minne.
Designprinciper och strategier
- Divide and conquer: dela problemet i delproblem, lös dem och kombinera lösningarna (t.ex. mergesort).
- Dynamisk programmering: använd tidigare beräknade resultat för att undvika upprepade beräkningar.
- Greedy: ta lokalt bästa val i hopp om global optimalitet (t.ex. vissa uppsättningsproblem).
- Backtracking och brute force: utforska lösningsutrymmet systematiskt, ibland med pruning för att minska sökning.
- Heuristiker och approximation: används när exakta lösningar är för dyra att beräkna.
Korrekthet och verifiering
Att en algoritm fungerar innebär både att den ger rätt resultat (korrekthet) och att den avslutar (termination). Korrekthetsbevis kan vara informella resonemang eller formella bevis (t.ex. induktionsbevis). Testning, formell verifiering och analys av gränsfall är viktiga för att säkerställa att en algoritm är pålitlig i praktiken.
Praktiska överväganden och tillämpningar
Algoritmer används i nästan alla delar av modern teknik: sökmotorer, databaser, kryptering, bild- och signalbehandling, maskininlärning, ruttningsprotokoll i nätverk och mycket mer. I praktiken måste algoritmutvecklare också ta hänsyn till:
- val av lämpliga datastrukturer (listor, träd, hashtabeller, köer)
- parallellisering och distribuerad beräkning för att hantera stora datamängder
- säkerhet, rättvisa och etiska aspekter (hur algoritmer påverkar användare)
- optimering för verkliga system och begränsade resurser
Sammanfattningsvis är algoritmer centrala för datavetenskap och teknologi: de formaliserar hur problem ska lösas och gör det möjligt att analysera, jämföra och förbättra lösningar. De kan beskrivas enkelt i vardagliga termer — men bakom enkla exempel som ett recept finns kraftfulla metoder och teorier som gör moderna datorer och applikationer möjliga.



