Quote:
|
Wieso sind die für den gemeinen (Hobby-)Programmierer wichtig? Ich komme mit Arrays.sort() recht weit.
|
Auf den Sortieralgorithmus selbst kommt es nicht an, du solltest weiterhin array.sort verwenden (da es sich dabei meist um ein recht kompliziertes gemischtes verhalten z.b. eine Kombination aus quick und Heapsort handelt).
Worauf es ankommt ist das Verständnis für asymptotische effizienz (sowohl in Laufzeit als auch in Speicher) und als Beispiel dafür eignen sich Sortieralgorithmen extrem gut. Da diese recht leicht zu verstehen sind, und dennoch alle Fälle abdecken, z.B. Bubble sort mit der Komplexität n^2, Mergesort mit n*logn, allerdings nicht inplace, Heapsort n*logn inplace, dafür nicht stabil, quicksort worst case in n^2 und average in n*logn, inplace, nicht stabil, dafür geringeren konstanten aufwand als heapsort.
Auch etwas schönes zu dem Thema, viele Leute denken wenn sie große Mengen an Daten Verarbeiten wollen brauchen sie einen Schnelleren PC, schnelleren Compiler, schneller Sprache (erste Reaktion ist meistens "ich brauche C") aber zunächst sollte man sich über seinen Algorithmus Gedanken machen, so kann ein PC A der 10x schneller ist als der PC B bei einem Algorithmus mit einer Laufzeitkomplexität von n^2 nur n+1 Daten verarbeiten in der selben Zeit in der PC B n Daten verarbeitet.
Im Klartext heißt das, hast du einen PC mit Java und sortierst eine Liste mit 100 Eintragen via Bubble sort und benötigst dafür s Sekunden, so bekommt ein schnellerer PC mit C, der um einen Faktor 10 schneller ist (das ist ne ganze Menge) nur eine Liste von 101 Eintragen in der Selben zeit s hin.
Und daher ist solches Wissen auch als "normale" Entwickler recht wichtig, zum einen weil es mir auf den sack geht wenn ich irgendwo lese: Das ist zu langsam. Dann nehm halt C (weil das einfach zu meist nicht wirklich stimmt), zum anderen weil man damit unabhängig von Programmiersprache, PC, OS, Wetter, und was weiß ich nicht noch allem die Geschwindigkeit (und den Speicherverbrauch) eines Algorithmuses analysieren und Bewerten kann
Quote:
|
Die Wichtigkeit von Algorithmen und ADT, auch wenn es bei vielen nur das Verständnis ist, ist wirklich sehr wertvoll. Ich habe mit 12 angefangen zu "programmieren". Jetzt bin ich 20 und studiere und Algo/ADT war echt eins der Module wo ich am meisten und die wertvollsten Sachen gelernt hab bisher finde ich, obwohl ich sagen muss, das 1 Semester dafür lange nicht ausreicht.
|
Also ich hätte an meiner Uni einfach Mathe Nebenfach mit Optimierung 1 und 2 nehmen können, und im Master kann man sich ja auch nochmal spezialisieren
PS: Auch ein sehr wichtiges Thema finde ich Verifikation (Hoare Kalkül) auch wenn die Anwendung sehr lutschen kann ist das meiner Meinung nach auch etwas was jeder Entwickler zumindest mal gehört haben sollte
PPS: Auf Youtube und Itunes U gibt es sogar die Vollständige Vorlesung Algorithmen 1 vom KIT, für jeden der sich dafür interessiert (keine Ahnung wie gut diese VL ist, ich war nie beim KIT)