Hur kom vi hit? Historien om algoritmer.
Intill helt nyligen var algoritmer ett område för datavetare. Men nu har de kommit in i våra liv och börjar bli allestädes närvarande. Algoritm är inte längre ett främmande ord. Algoritmisk handel, algoritmisk bias, Facebook-algoritmen, till och med algoritmisk krigföring – alla dessa termer har blivit en del av vårt ordförråd under de senaste åren. Vissa människor går så långt att de hävdar att vi lever i en ny tidsålder: algoritmens tidsålder. Men algoritmerna är inte så nya. Vi har använt dem, medvetet eller omedvetet, i hundratals och tusentals år. Algoritmer är bara specifika beskrivningar av stegvisa åtgärder som måste ske för att uppnå ett visst resultat. De är ett av de vanligaste instrumenten för kunskapsdelning.
Praktiskt sett används algoritmer i varje process där man lär någon att göra något.
Vissa aspekter av algoritmer har dock förändrats under de senaste decennierna. Framför allt innebär införandet av datorer att många algoritmer i dag är dramatiskt mer komplexa än vad vi någonsin hade kunnat föreställa oss tidigare. Hur har algoritmerna utvecklats till att bli så mycket mer sofistikerade i dag än tidigare? Låt oss ta en kort titt på deras historia.
Algoritmer som styr mänskliga handlingar
Tecknet algoritm kommer från namnet Muhammad ibn Mūsā al’Khwārizmī, en persisk matematiker från 800-talet. Hans latiniserade namn, Algoritmi, betydde ”det decimala talsystemet” och användes i denna betydelse i århundraden. Det moderna begreppet algoritm uppstod på engelska på 1800-talet och blev vanligare sedan 1950-talet, vilket utlöstes av uppkomsten av de första kommersiellt tillgängliga datorerna.
Långt innan algoritmer fick sitt moderna namn skapades och användes de dock allmänt.
De första algoritmerna antecknades på papper i det antika Grekland. Forskare som Nikomachos av Gerasa eller Euklid skapade då byggstenarna i den moderna matematiken. För att underlätta förståelsen och tillämpbarheten av sina idéer uttryckte de många av dem som stegvisa åtgärder.
Nikomachus av Gerasa introducerade Eratosthenes sil. Sieven används än i dag av studenter som lär sig att skriva effektiv datorkod. Den hjälpte till att förenkla processen att identifiera primtal. Primtal är naturliga tal, större än ett, som inte kan bildas genom att multiplicera två mindre naturliga tal. Till exempel är fyra inte ett primtal eftersom det kan bildas genom att multiplicera två med två. Fem är däremot ett primtal, eftersom inga naturliga tal som är mindre än fem kan multipliceras för att bilda fem. Även om det inte är särskilt svårt att identifiera de första primtalen (till exempel 2, 3, 5, 7, 11, 13, 17, 19, 23 och 29) tar det mycket tid att hitta stora primtal. Och stora primtal är viktiga inom kryptografin. Eratosthenes sil ger steg för steg instruktioner för att snabbt ta bort alla icke primtal från en definierad mängd tal (t.ex. mellan 1 och 10 000) tills endast primtal återstår. I dag finns det många algoritmer som förenklar arbetet med att identifiera sådana tal. Eratosthenes sil började en hel familj av algoritmer som har samma mål och som blir allt bättre (snabbare eller kräver färre steg) på att upptäcka primtal.
Eukleid, den andra lärde som nämndes ovan och som är mycket mer känd än Nikomachos nuförtiden, införde en algoritm för att identifiera den största gemensamma divisorn av två tal. Återigen, inte alltid en lätt uppgift, men nödvändig i många situationer. Euklids algoritm bidrog till att göra denna beräkning enkel. Varför är Euklids algoritm användbar? Tänk dig att du har ett rum med den exakta storleken 612 gånger 2006 centimeter som behöver ett nytt golv. Euklids algoritm hjälper dig att hitta storleken på de största kvadratiska kakelplattorna som snyggt skulle täcka golvet. Svaret, som algoritmen ger, är 34 cm gånger 34 cm, vilket ger en layout på 18 gånger 59 plattor. Naturligtvis kommer varje kakelsättare att säga till dig att svaret är fel och att du inte har någon aning om vad du gör eftersom algoritmen inte tar hänsyn till fogbredden och inte lämnar något utrymme för den. Frukta inte: detta kan också beräknas och snyggt uttryckas som en algoritm.
Algoritmer som styr maskiners handlingar
Under de flera hundra år som följde skapades många fler algoritmer och fångades upp på papper. De användes sedan av individer och följdes steg för steg. Den första algoritmen avsedd att exekveras på en maskin skapades av Ada Lovelace (född Byron) och publicerades 1843.
Ada var en spännande karaktär. Hon föddes 1815 som det enda legitima barnet till poeten Lord Byron. Hon utvecklade stora talanger i matematik. Och eftersom kärleken till poesi tydligt låg i hennes gener lyckades hon på något sätt utveckla och balansera både kärleken till vetenskap och poesi. Ada beskrev själv sitt tankesätt som ”poetisk vetenskap”. Som skicklig matematiker lärde hon känna Charles Babbage, som ofta kallas ”datorns fader”, tack vare hans uppfinningar. De båda utvecklade ett arbetsförhållande och en vänskap. Ada var mycket intresserad av en av Charles konstruktioner – den analytiska maskinen.
The Analytical Engine var en mekanisk dator – en maskin som automatiserade beräkningar. Det var Analytical Engine som hon skrev den första algoritmen till. Hennes arbete var en formel som visade hur man skulle konfigurera motorn för att beräkna en viss komplex sekvens av tal, så kallade Bernoulli-tal. Formeln är nu allmänt erkänd som historiens första datoralgoritm.
Ada begränsade sig inte bara till rent matematiska beräkningar. Med tanke på att hon levde på 1800-talet var hon en sann visionär.
Medans många av hennes samtida betraktade de första mekaniska datorerna främst som sifferräknare, frågade hon sig vad som ligger bortom att utföra beräkningar. Hon var nyfiken på den bredare potentialen hos mekaniska datorer som samarbetsverktyg. Hon hoppades på att få se datorer som skulle ge människor mycket mer makt än bara genom att automatisera beräkningar.
Olyckligtvis blev konstruktionen av Analytical Engine inte klar innan Ada dog, så hon fick aldrig se sin algoritm i aktion. Tyvärr har Analytical Engine inte byggts än idag. En annan konstruktion av Charles Babbage, Difference Engine №2, byggdes av London Science Museum först 1991. Det visades att den var funktionell, med hjälp av material och teknik som Charles Babbage hade tillgång till. Det verkar som om Babbage bara hade otur när det gällde att få sina konstruktioner byggda. Andra partiella implementeringar av Charles Babbage finns på andra ställen, men tyvärr kan vi inte köra Ada Byrons algoritm på en riktig Analytical Engine.
Nittonhundratalet blev en era av ”algoritmer inbäddade i maskiner”.
Det fanns gott om dem, som automatiserade alla slags mänskliga handlingar. Om du behövde ett invecklat mönster på ett tygstycke hade Joseph Marie Jacquard, en fransk vävare och köpman, en lösning för dig: Jacquardväven. Den gjorde det möjligt för tygtillverkare att framställa sofistikerade mönster med hjälp av en serie perforerade kort som instruerade en vävstol hur den skulle väva. På ett liknande sätt använde tidiga telefonväxlar sofistikerade mekaniska anordningar för att koppla ihop telefonsamtal. De följde automatiskt steg för steg instruktioner för att i slutändan få två personer att prata med varandra. Dessa maskiner, vare sig det gäller vävstolar eller växlar, var banbrytande på sin tid och är fortfarande imponerande än i dag. Det är svårt att inte beundra nivåerna av komplexiteten hos vissa av dessa maskiner. Alla dessa apparater var dock fortfarande rent mekaniska. De bestod av spakar, brytare och axlar. De gjorde mycket oväsen. Och de var mycket långt ifrån vad vi kallar datorer i dag.
Algoritmer på generella datorer
Det var inte förrän på 1930-talet som vi såg de första omnämnandena av algoritmer i elektroniska (icke-mekaniska) datorer. Alan Turing var en av de första vetenskapsmännen som formellt fångade upp hur individer utförde beräkningar. Turings mål var att fånga en allmän process, snarare än en specifik process för en viss uppgift, t.ex. för att identifiera primtal eller beräkna den största gemensamma divisorn. Den allmänna processen kunde sedan användas för att utföra specifika uppgifter. Turings konceptuella arbete ledde till utvecklingen av det som nu är känt som Turingmaskinen. Turingmaskinen ledde i sin tur till framväxten av datorer för allmänna ändamål. Prefixet ”för allmänna ändamål” är viktigt här. Till skillnad från tidigare maskiner skulle de nya datorerna utföra godtyckliga uppsättningar av instruktioner. De kunde användas för ändamål som inte ens deras skapare hade förutsett. Med andra ord: Turings arbete ledde till utvecklingen av datorer på vilka vi kan installera och köra program.
Ingen Flappy Bird på din smartphone utan begreppet Turing-maskin.
Tio årtionden senare har algoritmerna blivit extremt sofistikerade. Så sofistikerade faktiskt att vi ofta finner det omöjligt att förklara hur de fungerar. På 1900-talet föredrog många att tänka på datoralgoritmer som svarta lådor. Man behövde inte förstå hur exakt de fungerade. Allt man brydde sig om var ingångarna – det som gick in i den svarta lådan – och utgångarna – det som kom ut. Denna förenkling var ett val. På 2000-talet är detta inte längre ett val för vissa algoritmer: människor kan inte förklara exakt hur algoritmer når vissa resultat, och därför tvingas vi att betrakta dessa algoritmer som svarta, eller kanske magiska, lådor. En grupp av sådana algoritmer är vissa algoritmer för artificiell intelligens. Vi kan förklara deras principer. Vi kan till exempel säga att en algoritm använder ett artificiellt neuralt nätverk. Vi kan också förklara hur nätverket skapades och hur inmatningen resulterade i ett visst resultat. Vad vi däremot inte kan förklara är varför detta särskilda resultat var algoritmens utgång, utöver en rent mekanisk förklaring. Eric L. Loomis, vars fängelselängd berodde på en algoritm, försökte förstå varför COMPAS-algoritmen bedömde honom som en högriskbrottsling. Det var helt enkelt omöjligt. Algoritmernas sofistikering är ofta överväldigande. Och detta är bara början.
Vi lever i en värld där algoritmer finns överallt – inte bara på papper eller i våra sinnen, utan de styr maskiner, datorer och robotar.
De är små, allestädes närvarande och – åtminstone i vissa fall – oförklarliga.
En mer formell definition av en algoritm är ”en otvetydig specifikation av hur en klass av problem ska lösas” eller ”en självständig steg-för-steg-uppsättning av operationer som ska utföras”
www.oed.com/view/Entry/4959
Från och med oktober 2018 är det största kända primtal 277 232 917- 1, ett tal med 23 249 425 siffror. Bara för att kontrollera om detta enda tal är primtal krävdes sex dagars oavbruten beräkning på en modern hemdator. (https://www.mersenne.org/primes/press/M77232917.html)