Es scheint, als hätten Algorithmen ein PR-Problem: Sie manipulieren unsere Meinung, sind rassistisch und werden allgemein als Bedrohung empfunden. Aus rein formaler Sicht besteht hier aber meist kein Problem; Algorithmen tun in der Regel genau das, was sie sollen. Die wichtigste Frage lautet daher meist: "Sollen sie denn überhaupt?" Werden Algorithmen also auf eine sinnvolle Art und Weise eingesetzt?

Diesen Diskurs kann die Wissenschaft nicht alleine führen. Um ihn aber um eine präzisere Terminologie und einige Hintergründe reicher zu machen, soll der folgende Blogbeitrag einen kleinen Einblick in die Algorithmik geben, jenen Teilbereich der Informatik und Mathematik, der sich wissenschaftlich mit der Entwicklung und der Analyse von Algorithmen auseinandersetzt.

Von Euklid bis Big-Data

Laut Wikipedia ist ein Algorithmus eine "eindeutige Handlungsvorschrift" bestehend aus "endlich vielen, wohldefinierten Einzelschritten". Der älteste bekannte Algorithmus – nämlich zur Berechnung des größten gemeinsamen Teilers zweier Zahlen – wurde von Euklid im dritten Jahrhundert v. Chr. in "Die Elemente" beschrieben. Etwas elementarer ist die erste Begegnung mit Algorithmen in der Volksschule, nämlich beim schriftlichen Addieren, Subtrahieren, Multiplizieren und Dividieren. Für das schriftliche Addieren zweier Zahlen lässt sich der Algorithmus folgendermaßen formulieren: Schreibe die zu addierenden Zahlen rechtsbündig untereinander. Gehe anschließend die untereinanderstehenden Ziffern einzeln von rechts nach links durch, addiere sie jeweils und notiere das Ergebnis darunter. Falls das Zwischenergebnis größer als neun ist, notiere nur die Einerstelle und gib einen Übertrag von eins zur nächsten Addition.

Euklid von Alexandria, dargestellt von Joos van Wassenhove.
Foto: public domain

Es mag nicht entgangen sein, dass in dieser Beschreibung die Addition letztlich nicht vollständig erklärt wird, schließlich wird auf das "kleine Einspluseins" zurückgegriffen, also die Addition zweier Zahlen von null bis neun – eventuell mit zusätzlichem Übertrag – im Zahlenraum bis 20. Wollten wir jegliche intellektuelle Anstrengung vermeiden, so könnten wir eine Tabelle mit 200 Einträgen erstellen, aus der sich das Ergebnis jeder möglichen Addition zweier Zahlen von null bis neun und einem eventuell vorhandenen Übertrag von eins schnell ablesen lässt. Den Algorithmus zur schriftlichen Addition könnten wir dann rein syntaktisch und ohne jegliches Verständnis für die Bedeutung von Zahlen durchführen.

So machen es im Prinzip auch Computer. Intern wird jedoch statt des gewohnten Dezimalsystems mit zehn Ziffern das Binärsystem mit zwei Ziffern verwendet. Dadurch ist die eben erwähnte Tabelle besonders klein: Sie hat nur acht Einträge. Bei der schriftlichen Multiplikation wird zusätzlich auf das "kleine Einmaleins" zurückgegriffen (das wir entweder auswendig wissen oder in einer Tabelle nachschlagen). Intuitiv sollte klar sein: Je seltener das kleine Einmaleins benötigt wird, desto schneller können wir – aber letztendlich auch Computer – die Multiplikationen durchführen. Tatsächlich gibt es verschiedene fortgeschrittene Multiplikationsalgorithmen, die sich in ihrer Effizienz unterscheiden.

Schriftliche Addition mit Übertrag.
Foto: Wikicommons/Stilfehler (CC 1.0) https://commons.wikimedia.org/wiki/File:Traditional_Addition_Step_3.JPG

Effizientere Algorithmen

Algorithmische Berechnungsmethoden beschränken sich natürlich nicht nur auf grundlegende Arithmetik, sondern tauchen in vielen Problemstellungen auf, die mathematisch formalisiert werden können. Ein Beispiel aus der Optimierung ist das Zuordnungsproblem, das folgenderweise formuliert werden könnte: Eine Anzahl an Aufgaben soll einer ebenso großen Anzahl an Mitarbeiterinnen und Mitarbeitern zugeordnet werden, die unterschiedliche Fähigkeiten haben und jeweils unterschiedlich lange für jede Aufgabe benötigen. Gesucht ist eine Zuordnung von Aufgaben zu Mitarbeiterinnen und Mitarbeitern, die die Gesamtzeit zur Bearbeitung aller Aufgaben minimiert. Eine simple Lösung für dieses Problem bestünde darin, alle möglichen Zuordnungen auszuprobieren und darunter dann die beste auszuwählen. Allerdings ist dieser einfache Algorithmus hochgradig ineffizient – bei 100 Aufgaben ist die Anzahl der Möglichkeiten bereits größer als die Anzahl der Atome im Universum. Zum Glück lässt sich die in dieser Fragestellung inhärente mathematische Struktur ausnutzen, um weitaus effizientere Algorithmen zu finden.

Komplexe Netzwerke wie das Internet of Things benötigen spezialisierte Algorithmen zur Verarbeitung von Daten.
Foto: Public Domain/Pixabay/jeferrb

Für Big-Data-Anwendungen sind die Anforderungen an die Effizienz von Algorithmen besonders streng. Neue Information muss beispielsweise laufend verarbeitet werden, möglichst, ohne aufwendige Neuberechnungen anzustoßen. Besonders gefragt sind darüber hinaus Algorithmen, in denen die einzelnen Berechnungsschritte möglichst unabhängig voneinander ausgeführt werden können, damit die Möglichkeiten von modernen Parallelrechnern möglichst gut genutzt werden. Für viele dieser Algorithmen müssen komplexe mathematische Beweise geführt werden, um zumindest aus formaler Sicht zu zeigen, dass sie "tun, was sie sollen". Die eingangs erwähnten Probleme mit dem richtigen Einsatz von Algorithmen sind natürlich auch an der Algorithmen-Community nicht spurlos vorübergegangen. Verschiedene Ansätze versuchen derzeit, "softe" Faktoren wie Fairness und Datenschutzfreundlichkeit in Formalismen zu gießen, um potenziellen Problemen im Einsatz von Algorithmen gleich bei der Entwicklung gegenzusteuern. (Sebastian Forster, 22.12.2021)