Algoritme

Het algoritme is een stappenplan bestaande uit een set regels in vaste volgorde om tot een oplossing te komen en het einddoel te behalen. Het wordt ingezet als een handig hulpmiddel bij eenvoudige tot complexe problemen of situaties van het dagelijks leven en de digitale vraagstukken. Eigen aan het algoritme is wanneer de stappen in verkeerde volgorde worden uitgevoerd ook niet het gewenste resultaat zal opleveren. 

Het algoritme werd vroeger alleen gebruikt in de geheimtaal van wiskundigen, maar vandaag de dag wordt het vooral algemeen gerelateerd aan computers en software, terwijl het algoritme een ruimer begrip kent. Dit kreeg verhaal in 1935 door de Britse wiskundige Alan Turing met zijn bekende uitdaging "bestaat er een algoritme waarmee kan bewezen worden of een wiskundige bewering waar is of niet?" Vanaf toen werden de mogelijkheden en onmogelijkheden besproken tussen wiskundigen en computerprogrammeurs. 

De grondlegger van het algoritme is de Perzische wetenschapper Muhammad ibn Musa al-Khwarizmi. Hij introduceerde in 813 het gebruik van Hindu-numerieke getallen van 0 tot 9 en ontwikkelde hiermee systematische methodes om lineaire en kwadratische vergelijkingen op te lossen, die we algebra noemen. Hierdoor wordt hij "de vader van de moderne wiskunde" genoemd en werd zijn naam verlatijnst naar "Algorismi", waarvan het woord algoritme is afgeleid.

Dagelijks gebruik 
Het eenvoudige van het algoritme is dat iedereen dit dagelijks toepast in de praktijk als iets vanzelfsprekend. Wanneer een diner wordt voorbereid is er ook een culinaire algoritme nodig om dit tot een goed einde te brengen:  
 Eerst boodschappen doen
 Groenten snijden en stoven
 Oven aanzetten en vlees braden
 Tafel klaarzetten
 Het diner verorberen

Computer en software 
Het doel van een computeralgoritme is een probleem op te lossen. De instructies kunnen in het algemeen omgaan met eventualiteiten (fouten, datakwaliteitsproblemen, inconsistenties, randeffecten) die bij het uitvoeren kunnen optreden. Algoritmen hebben in het algemeen stappen (sequentie) die zich kunnen herhalen (iteratie) of die beslissingen (logica of vergelijkingen) vereisen om de taak te voltooien.

Eenzelfde taak kan gewoonlijk op verschillende manieren worden opgelost. Het verschil ligt dan meestal in de hoeveelheid tijd, ruimte of inspanning die het algoritme vergt; dit kan een indicatie zijn voor de complexiteit of de efficiëntie van het algoritme. Bij het correct uitvoeren van een computerprogramma is het belangrijk dat het algoritme inderdaad de beoogde functie uitvoert en dat het algoritme goed door het computerprogramma wordt uitgevoerd. Eventuele fouten of problemen moeten hierbij worden gerapporteerd.

Formeel algoritme 
Algoritmen in formele systemen zijn essentieel voor bijvoorbeeld de manier waarop computers informatie verwerken, omdat een computerprogramma een formeel algoritme is dat de computer vertelt welke specifieke stappen in een specifieke volgorde uitgevoerd moeten worden om een bepaald eindresultaat te bereiken. Een groter probleem wordt opgesplitst in meerdere deelproblemen.

In het algemeen wordt bij algoritmen informatie verwerkt; de informatie (data) wordt gelezen van een invoerapparaat en weggeschreven naar een uitvoerapparaat; de informatie kan ook bewaard worden voor later. Opgeslagen data worden bij het analyseren van algoritmen gezien als de "interne toestand" van het apparaat dat het algoritme uitvoert.

Voor elk rekenkundig proces moet een algoritme nauwkeurig gedefinieerd worden: het specificeert namelijk hoe het apparaat zal reageren op elke mogelijke invoer en interne toestand. Omdat een algoritme een exacte lijst is met exacte stappen, is de volgorde waarin de berekening gebeurt kritisch voor het correct functioneren van het algoritme. Uniek aan het concept van formele algoritmen is de toewijzing van een waarde aan een variabele. Dit komt voort uit de notie van het geheugen als werkruimte.

Computerprogramma's 
Waar een algoritme de beschrijving is van een oplossing van een probleem, is een computerprogramma (in een of andere programmeertaal) de implementatie van dat algoritme. Een algoritme voor een berekening met reële getallen kan bijvoorbeeld uitgaan van exacte berekeningen, terwijl de implementatie bepaalt hoe groot de afrondfouten kunnen zijn. De nauwkeurigheid van het eindresultaat kan (bij gelijkwaardige wijze van afronden van tussenresultaten) wel van het algoritme afhangen, dus bij het ontwerp van het algoritme moet er vaak al rekening mee worden gehouden dat er in de implementatie niet exact gerekend wordt. Dit geldt overigens niet alleen bij computergebruik, maar ook bij een handberekening met tussentijdse afrondingen.

Grotere systemen en algoritmen worden opgesplitst in deelsystemen, modules, functies en statements, waarbij het ontwerp top-down of bottom-up wordt verwezenlijkt. In principe is het algoritme onafhankelijk van de fysieke implementatie op een bepaald computersysteem. Toch kan er in het ontwerp rekening (moeten) worden gehouden met een bepaalde architectuur. In dat geval worden de specifieke functies in een afzonderlijke module ondergebracht. Als het systeem moet worden vervangen blijven de wijzigingen beperkt tot een enkele module.

De verschillende manieren om tegen een probleem aan te kijken en het te beschrijven hebben in de loop van de jaren ook verschillende vormen van programmeren opgeleverd: imperatief programmeren, objectgeoriënteerd programmeren, aspectgeoriënteerd programmeren, logisch programmeren, symbolisch programmeren, functioneel programmeren.

In imperatief programmeren worden instructies expliciet opgeschreven, waarbij de berekening bovenaan begint en vervolgens stap voor stap naar beneden verloopt. Dit heet de control flow van een algoritme.

Een andere manier om tegen algoritmen aan te kijken is functioneel programmeren. In programma's van dit type worden algoritmen gezien als wiskundige functies die elkaar kunnen aanroepen. Diezelfde functies kunnen ook aan variabelen worden toegewezen en zelfs als parameter in een functieaanroep gebruikt worden.

Voorbeeld 
Een voorbeeld van een algoritme is het algoritme van Euclides, dat de grootste gemene deler van twee strikt positieve getallen in de variabelen a en b geeft. De informele beschrijving van dit algoritme is als volgt:

 Zolang a en b niet gelijk zijn:
 Trek van het grootste van de twee het andere af.
 Zodra ze gelijk zijn, is de grootste gemene deler a (of b).

In pseudocode:

 function ggd(a,b)
   if a = b
     return a
   else if a < b
     return ggd(a, b-a)
   else
     return ggd(a-b, b)
 end

Dit algoritme is recursief.

Algoritmen in gebruik bij de overheid

Nederland
De Nederlandse overheid heeft een begin gemaakt met het opbouwen van een register van door haar gebruikte algoritmen, in de ruime zin van het woord.

Een voorbeeld (nog niet opgenomen in het register) is het algoritme om op basis van een aangifte inkomstenbelasting het bedrag van de aanslag te bepalen. Bij de online aangifte wordt dit ook min of meer voorgerekend.

Internationaal
In haar boek Automating Inequality (“Automatisering van de ongelijkheid”) uit 2019 onderzocht Virginia Eubanks de impact van met name beleidsalgoritmen, maar ook datamining en voorspellende risicomodellen op arme mensen en mensen uit de arbeidersklasse in Amerika.

Geschiedenis 

Het woord algoritme is een verbastering van het Oudengelse woord algorism, dat van het Latijnse woord algorismus komt, dat weer voortkomt uit de naam van de Perzische wiskundige Al-Chwarizmi (ca. 780 - ca. 845). Hij was de auteur van het boek al-Kitab al-mukhtasar fi hisab al-jabr w'al-muqabala (Boek van de beknopte rekenkundige algebra en handelsbalans) dat de algebra in de westerse wereld introduceerde. Het woord algebra zelf komt van al-Jabr uit de titel van het boek. Het woord algorisme verwees oorspronkelijk alleen naar de regels voor het rekenen met Arabische cijfers, maar was in de 18e eeuw naar algoritme geëvolueerd. Het woord algoritme wordt nu gebruikt voor alle eindige procedures om problemen op te lossen of taken uit te voeren. Grammaticaal gezien is het woord mannelijk (dus voorafgegaan door het lidwoord de). In de context van de exacte wetenschappen is dit nog het geval, maar het is door de jaren heen gebruikelijk geworden om het woord als onzijdig te beschouwen (dus met lidwoord het). De oorsprong hiervan is vermoedelijk het vermeende verband met de muzikale term ritme.

Het eerste voor een computer geschreven algoritme is te vinden in de notities van Ada Byron over de analytische machine, geschreven in 1842. Daarom wordt zij wel als 's werelds eerste computerprogrammeur beschouwd.

Het ontbreken van wiskundige strengheid in de definitie van een "goed gedefinieerde procedure" voor een algoritme vormde een probleem voor de wiskundigen en logici van de 19e en begin 20e eeuw. Dit probleem werd grotendeels opgelost met de beschrijving van de turingmachine, een abstract model van een computer, door Alan Turing, en de demonstratie dat elke tot dan toe gevonden methode om "goed gedefinieerde procedures" te beschrijven op een turingmachine uitgevoerd kon worden (een uitspraak die wel bekend is als de stelling van Church-Turing).

Tegenwoordig is het formele criterium voor een algoritme dat het een procedure is die geïmplementeerd kan worden op een volledig gespecificeerde turingmachine, of een van de equivalente formalisaties. Turings eerste interesse lag bij de berekenbaarheidstheorie: welke functies en problemen kunnen met een algoritme opgelost worden. In de praktijk is ook de complexiteitstheorie van belang, waarbij het niet gaat om de vraag welke functies berekenbaar zijn, maar om de vraag of het kan worden opgelost, en hoe efficiënt de oplossing dan is.

Discussie over privacy

Duitsland 
De Duitse ngo AlgorithmWatch publiceerde in mei 2021 richtlijnen om te vermijden dat mensen op de werkvloer het slachtoffer worden van people analytics, complexe computersystemen die met behulp van algoritmen werknemers surveilleren, evalueren, aansturen en zelfs promoten of ontslaan. Met name Amazon was in 2019 hiermee in het nieuws gekomen.

Verenigde Staten 
In de Verenigde Staten getuigde Frances Haugen in 2021 voor de Senaat aan de hand van de Facebook files dat de algoritmen van Facebook systematisch berichten tonen die reactie opleveren en polariseren, en dus meer platformtijd en winst opleveren.

Nederland 
In Nederland waarschuwden critici al in 2018 voor een "algocratie" in de openbare ruimte, waarbij algoritmen een smart city gaan besturen.

Toepassingen

Sorteren 
 Sorteeralgoritme
 Insertion sort
 Bubblesort
 Mergesort
 Quicksort
 Radix sort
 Straight selection sort

Optimalisatie 
 Optimalisatiealgoritme
 Genetische algoritmen
 Simulated annealing
 Tabu search

Converteren 
 Compressie
 Encryptie
 Decryptie
 Coderen en decoderen (zie ook: codec)

Gerelateerde onderwerpen 
 Computer
 Grafentheorie
 Turingmachine
 Lambdacalculus
 Complexiteitstheorie
 Algoritme van Lamport
 Online-algoritme

 
Programmeerconcept