Was sind die 5 Algorithmen, die jeder Programmierer kennen sollte?
Wenn es 5 Algorithmen sind, die wirklich jeder Entwickler kennen sollte gibt es dafür längst Bibliotheken in allen Farben und Geschmacksrichtungen - und der Entwickler muss nur noch die Methodeaufrufe und nicht den Algorithmus an sich kennen.
Anders herum gibt es natürlich verschiedene Algorithmen, die jeder Entwickler - ohne Google! - mal selbst implementiert haben sollte, weil sie einfach das Verständnis für die Arbeit eines Computers erhöhen. Diese werden idR. aber während des Informatik Grundstudiums schon vermittelt. Mal ein paar Schlagworte (mit ganz persönlichem Bias und ohne Anspruch auf irgendwas):
QuickSort - iterativ und rekursiv
Newton Verfahren
dynamischer Ringpuffer
FFT
RPN Interpreter
usw.
Grundsätzlich bin ich der Meinung (und diese teile ich mit meinem Mathe Prof) sollte man einen (nicht unwesentlichen) Teil der in den “Numerical Recipes”[1] erwähnten Algorithmen nur anhand der Lösungsbeschreibung (ohne Source Code!) in einer Sprache seiner Wahl kompilierbar implementiert haben - nicht zwingend fehlerfrei aber doch so, daß man den Algorithmus nach der Implementierung einigermaßen verständlich erklären kann.
Wer jetzt allerdings versucht diese Algorithmen zu lernen und als Wissen zu speichern hat wahrscheinlich den falschen Job - als Entwickler muss ich keine Algorithmen kennen! Aber ich muss wissen wie ich welche entwickle, wo ich bei Bedarf die richtigen finde und wie ich fremde Algorithmen lesen kann.
Wer den schnellsten qSort Algorithmus schreiben kann gewinnt im Leben keinen Blumentopf - wer allerdings mehrere Sortieralgorithmen und deren Vor- und Nachteile benennen kann (bzw. weis wo es steht) schon.
PS.: Ja, wir haben im Grundstudium viele der Algorithmen im Rahmen von Labor- und Hausarbeiten in C implementiert und nein, ich kenne keinen mehr auswendig und kann mich an die wenigsten erinnern. Brauche ich auch nicht - ich weis ja wo es steht!
Fußnoten
[1] Numerical Recipes – Wikipedia