11.1 Algoritmer og pseudokode
Hva er en algoritme, flytdiagram og pseudokode.
Fra kakeoppskrift til algoritme
Har du noen gang bakt en kake? Da har du allerede brukt en algoritme uten a vite det. En kakeoppskrift er nemlig en steg-for-steg-beskrivelse av hva du skal gjore for a oppna et bestemt resultat -- akkurat som en algoritme i matematikken.
En algoritme er en presis, endelig oppskrift for a lose et problem. Den har tre viktige egenskaper: den er presis (hvert steg er entydig beskrevet), den er endelig (den stopper etter et endelig antall steg), og den er generell (den fungerer for alle gyldige inndata, ikke bare ett spesifikt tilfelle).
Du bruker faktisk algoritmer i matematikk hele tiden. Nar du deler to tall med lang divisjon, folger du en algoritme. Nar du finner fellesnevner, folger du en algoritme. I dette kapittelet skal vi se narmere pa hvordan vi kan beskrive slike fremgangsma ter pa tre ulike mater: med vanlig tekst, med flytdiagrammer og med pseudokode. Vi skal ogsa utforske noen klassiske algoritmer, som Euklids algoritme for a finne storste felles divisor og boblsortering for a sortere en liste.
La oss starte med noe enkelt. Tenk deg at du har tre tall -- , og -- og du vil finne det storste av dem. Hvordan vil du ga frem? En mulig algoritme er:
1. Sett
2. Hvis , sett
3. Hvis , sett
4. Na er det storste av de tre tallene
La oss teste med , , . Forst setter vi storst . Sa sjekker vi: er ? Ja, sa storst . Er ? Nei, sa storst er fortsatt . Svaret er . Enkelt og presist!
Flytdiagrammer -- algoritmer du kan se
Noen ganger er det lettere a forsta en algoritme hvis du kan se den. Det er her flytdiagrammer kommer inn. Et flytdiagram er en grafisk fremstilling av en algoritme der vi bruker standardiserte symboler:
- Oval (avrundet rektangel): Start og stopp
- Rektangel: Prosess eller beregning
- Diamant (rombe): Beslutning -- et ja/nei-sporsmal
- Parallellogram: Inn- eller utdata
- Pil: Viser retningen flyten gar i
Flytdiagrammer er spesielt nyttige nar det er forgreninger (if/else) eller lokker (gjentakelser), fordi du kan folge pilene og se noyaktig hva som skjer.
La oss lage et flytdiagram som sjekker om et tall er partall eller oddetall. Vi starter med [Start], gar til [Les inn tall n], sa til en diamant [Er n delelig med 2?]. Hvis ja, folger vi pilen til [Skriv ut "Partall"] og deretter [Stopp]. Hvis nei, gar vi til [Skriv ut "Oddetall"] og deretter [Stopp].
Matematisk sjekker vi dette med modulo-operasjonen: betyr at er et partall. For eksempel: , sa 14 er et partall.
Pseudokode -- skriv algoritmen som nesten-kode
Mellom vanlig tekst og ekte programmeringssprak finnes pseudokode. Det er en forenklet, uformell mate a skrive en algoritme pa som ligner et programmeringssprak, men som er skrevet pa vanlig sprak slik at den er lett a forsta.
De vanligste elementene i pseudokode er:
- LES / SKRIV: For inn- og utdata
- SETT / LA: For a tilordne verdier
- HVIS ... SA ... ELLERS: For betingelser (forgreninger)
- GJENTA ... MENS / FOR ... TIL: For lokker (gjentakelser)
- RETURNER: For a gi tilbake et resultat
La oss skrive pseudokode for a beregne summen :
LES n
SETT sum = 0
FOR i = 1 TIL n
SETT sum = sum + i
SLUTT FOR
SKRIV "Summen er " + sumHvis vi tester med : Vi starter med sum . Sa legger vi til 1 (sum ), deretter 2 (sum ), deretter 3 (sum ), deretter 4 (sum ), og til slutt 5 (sum ). Summen av tallene fra 1 til 5 er .
Vi kan sjekke med formelen: . Stemmer!
Legg merke til at pseudokode ikke trenger a folge strenge syntaksregler. Den bor bare vare presis nok til at noen kan oversette den til et ekte programmeringssprak.
Euklids algoritme -- 2300 ar gammel og fortsatt genial
En av de eldste kjente algoritmene i verden er Euklids algoritme, oppkalt etter den greske matematikeren Euklid som beskrev den rundt 300 f.Kr. Tenk pa det -- en algoritme som er over 2300 ar gammel, og som fortsatt brukes i dag!
Euklids algoritme finner den storste felles divisor (SFD) av to tall. Den storste felles divisor av to tall og er det storste tallet som gar opp i begge. Vi skriver . For eksempel er fordi 4 er det storste tallet som deler bade 12 og 8.
Algoritmen er overraskende enkel:
1. Hvis , er . Stopp.
2. Beregn resten .
3. Sett og .
4. Ga til steg 1.
I pseudokode:
LES a, b
GJENTA MENS b ≠ 0
SETT r = a mod b
SETT a = b
SETT b = r
SLUTT GJENTA
SKRIV "SFD er " + aLa oss prove med . Forst: , sa vi setter , . Neste runde: , sa , . Neste: , sa , . Stopp! .
Vi kan sjekke: og . Stemmer! Euklids algoritme er ogsa nyttig for a forkorte broker -- du deler teller og nevner med SFD. For eksempel: forkortes ved a finne , sa .
Boblsortering -- nar tall bobler opp pa riktig plass
Sortering er en av de vanligste oppgavene i programmering. Hver gang du soker etter noe pa nettet, sorterer et digitalt musikkbibliotek eller rangerer en tabell, brukes sorteringsalgoritmer bak kulissene.
En av de enkleste sorteringsalgoritmene er boblsortering (bubble sort). Navnet kommer av at de storste verdiene gradvis "bobler" opp til riktig posisjon, litt som luftbobler i vann. Ideen er:
1. Ga gjennom listen og sammenlign hvert par av naboelementer
2. Hvis to naboer er i feil rekkefolgje, bytt dem
3. Gjenta til hele listen er sortert
La oss sortere listen :
Runde 1: Vi sammenligner 5 og 3 -- , bytt! . Sa 5 og 8 -- ok. Sa 8 og 1 -- bytt! . Sa 8 og 2 -- bytt! . Na har 8 "boblet" opp til riktig plass!
Runde 2: , ok. , bytt! . , bytt! .
Runde 3: , bytt! . , bytt! .
Runde 4: , ok. Ingen bytter -- ferdig! Sortert liste: .
Boblsortering er kanskje ikke den mest effektive algoritmen for store datamengder, men den er enkel a forsta og viser grunnprinsippet bak sortering.
Oppsummering
I dette kapittelet har vi sett at algoritmer er overalt -- fra kakeoppskrifter til avansert matematikk. Her er det viktigste du bor ta med deg:
- En algoritme er en presis, endelig oppskrift for a lose et problem. Den ma vare presis, endelig og generell.
- Flytdiagrammer bruker standardiserte symboler (ovaler, rektangler, diamanter, parallellogrammer) for a visualisere algoritmer grafisk.
- Pseudokode er en uformell tekstbeskrivelse av en algoritme som ligner et programmeringssprak, med elementer som LES, SKRIV, SETT, HVIS, GJENTA og FOR.
- Euklids algoritme finner storste felles divisor (SFD) ved gjentatt divisjon med rest. Den er over 2300 ar gammel og brukes fortsatt i dag.
- Boblsortering sorterer en liste ved a sammenligne og bytte naboer gjentatte ganger, slik at de storste verdiene "bobler" opp til riktig plass.
- Modulo () gir resten ved heltallsdivisjon og er et sentralt verktoy i mange algoritmer.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.