Was ist eigentlich… ein Algorithmus?

Ohne einen Algorithmus tut ein Computer gar nichts. Dabei ist ein Algorithmus gar nicht so etwas Kompliziertes, wie es sein unhandlicher Name vermuten lässt: Er ist bloß eine Liste von Anweisungen, die der Computer ausführen soll.

Definition: Ein Algorithmus ist eine Handlungsvorschrift, die aus einem oder mehreren Schritten besteht.

Das Wort »Algorithmus« ist vom Namen des Mathematikers al-Chwarismi abgeleitet, der im Frühmittelalter im Nahen Osten lebte und arbeitete und vermutlich aus der Region Choresmien im heutigen Usbekistan stammte (daher sein Name). Er verfasste ein Buch, in dem er erstmals Kommazahlen und die Zahl Null aus dem indischen Kulturkreis im arabischen bekannt machte. Dieses trug in der lateinischen Übersetzung den Titel »Algoritmi de numero Indorum« (»Al-Chwarismi über die Zahlen der Inder«). Daraus entwickelte sich bei uns der Begriff »Algorithmus«.

Ein Algorithmus kann nicht nur im oder für den Computer existieren. Jede Handlungsvorschrift, die definierte und abgrenzbare Schritte hat und bei der eine bestimmte Eingabe unter den gleichen Bedingungen immer zum selben Ergebnis führt, ist ein Algorithmus.

Die Lasagne des al-Chwarismi

Die Schritte können auch von einem Menschen ausgeführt werden. So ist ein Kochrezept ebenfalls ein klassischer Fall eines Algorithmus.

Beispiel: Algorithmus zur Herstellung einer Lasagne

  1. Zwiebel schälen
  2. Zwiebel fein hacken
  3. Knoblauch schälen
  4. Knoblauch fein hacken
  5. Olivenöl in Pfanne auf mittlerer Stufe erhitzen
  6. Zwiebeln und Knoblauch in Pfanne geben
Karolina Kolodziejczak auf Unsplash
Quelle: Karolina Kolodziejczak (Unsplash)

Wenn Sie sich exakt an den Algorithmus halten und die Eingabe (Ihre Zutaten) sowie die Umgebungsbedingungen (Temperatur, Luftdruck, Beschaffenheit Ihrer Pfanne und Auflaufform, Schärfe Ihres Messers) exakt gleich sind, dann wird der Algorithmus immer genau die gleiche Lasagne ergeben.

Anekdote:

Noch deutlicher wird die Schnittmenge zwischen Algorithmen für den Computer auf der einen Seite und Kochrezepten auf der anderen Seite, wenn Hacker kochen.

So wurde im Jahr 2013 auf dem jährlichen Kongress der Hackervereinigung Chaos Computer Club in Hamburg das Gerät EveryCook vorgestellt: »The device that cooks for you«.

Hierbei handelte es sich um einen Apparat, der schneiden, rühren und kochen konnte – ähnlich also wie der kommerziell erfolgreiche Thermomix und ähnliche Küchengeräte. Anders als diese, und einem Hackerkongress angemessen, waren jedoch sowohl Hardware als auch Software des Geräts Open Source, also die Quelldaten für die Öffentlichkeit einsehbar.

Zudem ging der EveryCook mit seinen Rezepten noch weiter als andere Küchengeräte: Er sagte nicht nur, wie viel von jeder Zutat der Benutzer zum Gericht hinzufügen muss, sondern er versandte automatisch nach der Auswahl des Rezeptes den Einkaufszettel an den Nutzer. Das ausgewählte Rezept wurde drahtlos auf die Maschine geladen, die den Nutzer dann Schritt für Schritt anleitete, welche Zutaten eingefüllt werden mussten.

Als weitere Features waren unter anderem geplant, dem Nutzer mitzuteilen, wo genau er welche Zutaten kaufen konnte, und welche Gerichte er für welche seiner Gäste nicht zubereiten sollte (weil deren vernetzte EveryCooks ihre Essensvorlieben und –abneigungen mitteilten).

Hier waren die Algorithmen also nicht nur Handlungsanweisungen vom Menschen für den Computer, sondern Anweisungen, die der Mensch dem Computer gab, damit dieser wiederum dem Menschen Befehle geben konnte.

Leider erreichte das Gerät nie Marktreife. Mittlerweile werden viele seiner Funktionen auch von kommerziell erhältlichen Geräten beherrscht.

Aber zurück zum Computer: Dieser kann mit seinem Rechenwerk nur wenige einfache Operationen ausführen. Welche das sind und in welcher Reihenfolge, das bestimmt das Steuerwerk. Steuerwerk und Rechenwerk zusammen bilden den Prozessor.

Wie kann also unser Handy den schnellsten Weg von zu Hause in den Supermarkt berechnen, wenn es doch eigentlich nur Einsen und Nullen hin- und herschiebt?

Es scheint so, als müssten Programmierer übernatürlich begabte Wesen sein, die aus den vier Operatoren NICHT, UND, ODER und XOR solche hochkomplexen Anwendungen wie einen Routenplaner oder eine Videoplattform erschaffen.

Ja und nein: Zwar beruhen auch sehr komplexe Programme auf diesen bitweisen Operatoren (und natürlich gibt es außerordentlich begabte Programmierer), aber zwischen dem Herumschubsen von einzelnen Bits und dem fertigen Routenplaner gibt es glücklicherweise noch ein paar Zwischenschritte.

Maschinencode und Programmiersprachen

Zunächst einmal den Maschinencode: Das ist ein im Steuerwerk eingebauter Befehlssatz, mit dem die bitweisen Operatoren und einfache Kombinationen von ihnen ausgeführt werden können. Dieser Befehlssatz ist entweder fest verdrahtet oder in einem kleinen Speicher des Steuerwerks gespeichert (oder eine Kombination aus beidem).

Die Anweisungen des Maschinencodes sind, ebenso wie die Daten, auf die sie angewendet werden, Folgen von binären Zahlen. Weil diese sehr schnell sehr lang und damit unübersichtlich werden, werden sie oft auch statt im Binär- im Hexadezimalsystem dargestellt, also mit einer Basis von 16 statt 2.

Definition: Das Hexadezimalsystem ist ein System, in dem Zahlen mit der Basis von 16 ausgedrückt werden. Das Binärsystem verwendet dagegen die Basis 2 und unser alltägliches Dezimalsystem die Basis 10.

Da es in unserem Zahlensystem keine Ziffer gibt, die eine höhere Zahl als 9 darstellt, macht das Hexadezimalsystem an dieser Stelle mit der Ziffer A (= 10) weiter und setzt das fort bis zur Ziffer F (= 15).

Weil im Binärsystem genau vier Stellen benötigt werden, um Zahlen von 0 bis 15 darzustellen, lassen sich vier Stellen im Binärsystem zu einer Stelle im Hexadezimalsystem zusammenfassen.

Unsere dezimale 11 wird zum Beispiel im Binärsystem zu 1011 und im Hexadezimalsystem zu B.

Damit Programmierer nicht mit endlosen Folgen von Hexadezimalzahlen arbeiten müssen, wurden die Programmiersprachen entwickelt.

Definition: Eine Programmiersprache ist eine formalisierte künstliche Sprache, mit deren Hilfe ein Mensch dem Computer Anweisungen geben kann.

Es handelt sich also um einen Kompromiss zwischen für den Menschen unverständlichem Maschinencode und natürlicher menschlicher Sprache.

In Programmiersprachen werden in der Regel mehrere kleinschrittige Anweisungen für den Computer in eine Anweisung zusammengefasst.

In sogenannten einfachen Programmiersprachen sind die Anweisungen noch ziemlich ähnlich dem zugrundeliegenden Computercode. In höheren Programmiersprachen werden dann schon mehr einfache Anweisungen in einem Befehl zusammengefasst.

Beispiel:

Der bereits angedeutete Algorithmus für die Herstellung einer Lasagne (1. Zwiebel schälen, 2. Zwiebel fein hacken…) entspricht einer ziemlich einfachen Programmiersprache.

In einer höheren Programmiersprache könnte er so lauten:

  1. Bolognese-Sauce herstellen
  2. Béchamel-Sauce herstellen
  3. Lasagneplatten abwechselnd mit den Saucen in eine feuerfeste Form schichten

In einer noch einfacheren Programmiersprache würde er dagegen so lauten:

  1. Zwiebel aus dem Gemüsefach visuell auswählen
  2. Zwiebel in die rechte Hand nehmen
  3. Zwiebel auf Schneidebrett legen
  4. Messer in die rechte Hand nehmen
  5. Zwiebel mit linker Hand festhalten

Allgemeinbildung Digitalisierung für Dummies

Möchten Sie mehr erfahren? Dieser Blogbeitrag ist ein Auszug aus meinem Buch Allgemeinbildung Digitalisierung für Dummies (Wiley-VCH, 2022). Dieses gibt Ihnen eine verständliche und unterhaltsame Einführung in unsere digitale Welt – mehr dazu hier!

Cover "Allgemeinbildung Digitalisierung für Dummies"