Algorithmen verstehen: Ein illustrierter Leitfaden für Programmierer und Neugierige

Aleksandr Shitik
Aleksandr Shitik

Ich schreibe meine eigenen Beiträge und Bücher und rezensiere Filme und Bücher. Experte für Kosmologie und Astronomie, IT, Produktivität und Planung.

Algorithmen verstehen: Ein illustrierter Leitfaden für Programmierer und Neugierige
Aditya Bhargava
Genres: Programmierung
Jahr der Veröffentlichung: 2017
Jahr der Lektüre: 2020
Meine Bewertung: Höchste
Anzahl der Lesevorgänge: 1
Gesamtseitenzahl: 290
Zusammenfassung (Seiten): 5
Originalsprache der Veröffentlichung: Englisch
Übersetzungen in andere Sprachen: Russisch, Spanisch, Portugiesisch

Überblick

Das Buch besteht aus 11 Kapiteln, wobei das erste eher eine Einführung ist (es trägt den Titel "Einführung in Algorithmen"), und das letzte Kapitel behandelt vor allem, was man (und was man idealerweise) als nächstes lernen sollte, sowie Themen, die dieses Buch nicht vollständig abdeckt (wie MapReduce, Bloom-Filter, SHA und mehr). Also, was behandelt dieses Buch? Lassen Sie uns einen kurzen Blick darauf werfen.

Zunächst erwähnt das Buch die Algorithmenkomplexität und die sogenannte "Groß-O-Notation". Und glauben Sie mir, die überwiegende Mehrheit der Programmierkurse vermittelt sehr spezifische Fähigkeiten, geht aber selten auf die Laufzeitkomplexität von Algorithmen oder Code-Optimierung ein.

Was die behandelten Themen betrifft, werde ich sie in diesem Absatz kurz auflisten.

Das Buch beginnt mit einem Kapitel über Arrays und verkettete Listen, das erklärt, wie man mit ihnen arbeitet (in Bezug auf Sortierung und Suche). Es listet die Vor- und Nachteile von Listen auf (hinsichtlich Lese-/Schreibgeschwindigkeit und Datenspeicherung).

Es folgt ein kurzes Kapitel über Rekursion, das den Aufrufstack und seine Funktionsweise behandelt.

Danach taucht das Buch in den Quicksort-Algorithmus ein (unter Verwendung des "Teile-und-herrsche"-Ansatzes). Zur Veranschaulichung liefert der Autor drei Anwendungsbeispiele. Das Pivotelement wird diskutiert, und Leistungsvergleiche zwischen verschiedenen Sortiermethoden (einschließlich derer aus früheren Kapiteln) werden anhand von Diagrammen dargestellt.

Der nächste Abschnitt führt eine neue Datenstruktur ein - Hash-Tabellen. Es werden Anwendungsszenarien beschrieben (z.B. Deduplizierung, Caching, Modellierung von Beziehungen zwischen Objekten). Kollisionsfälle werden ebenfalls erklärt.

Anschließend werden Graphen als Datenstruktur vorgestellt. Nein, es deckt nicht alle Themen ab, die ich in "Mathematische Modellierung" studiert habe, aber zumindest werden die Grundlagen behandelt: Definition eines Graphen, sein Nutzen, Anwendungen und der Unterschied zwischen gerichteten und ungerichteten Graphen. Da Graphen sich mit "Pfaden" befassen, werden Algorithmen wie Breitensuche (BFS) und kürzeste Pfade behandelt. Dieses Kapitel erwähnt auch Warteschlangen und kehrt zu Stacks zurück, wobei FIFO und LIFO erklärt werden - obwohl dies meiner Meinung nach früher hätte behandelt werden sollen. Beachten Sie, dass zwei Kapitel Graphen gewidmet sind: Das erste behandelt kürzeste Pfade in ungewichteten Graphen, das zweite verwendet Dijkstras Algorithmus für gewichtete Graphen. Auch hier werden mehrere Beispiele gegeben: zuerst theoretisch, dann in Code. Der Bellman-Ford-Algorithmus (für Graphen mit negativ gewichteten Kanten) wird nicht behandelt und bleibt dem Selbststudium überlassen.

Schließlich behandelt das Buch weniger verbreitete Algorithmen (im täglichen Programmieren): Gierige Algorithmen, Ansätze für "unmögliche" Probleme ohne schnelle algorithmische Lösung (NP-vollständige Probleme), dynamische Programmierung (Aufteilung komplexer Probleme in Teilprobleme) und den k-Nächste-Nachbarn-Algorithmus (k-NN), der im maschinellen Lernen verwendet wird.

Merkmale

Das Buch enthält verständnisfördernde Illustrationen. Jedes Kapitel enthält 5-7 praktische Fragen (einige mit Codebeispielen), mit Antworten im Anhang. Jedes Kapitel endet mit einer "Spickzettel"-Zusammenfassung in 4-5 Sätzen.

Mit etwa 300 Seiten und mäßig langen Kapiteln ist es ein Buch, das Leser sehr wahrscheinlich zu Ende lesen werden. Die Sprache ist zugänglich und das Lesen flüssig.

Fazit

Ein ausgezeichnetes Buch für Quereinsteiger ohne technischen Hintergrund. Es erklärt klar verschiedene Sortier- und Suchmethoden (binäre Suche, Tiefen-/Breitensuche), betont die Komplexitätsanalyse (Groß-O-Notation) und deckt sogar wesentliche Grundlagen wie Graphentheorie, kürzeste Pfade oder k-Nächste-Nachbarn ab - Kenntnisse, die jeder Programmierer beherrschen sollte.

Вверх