Algorithmen kapieren - Visuell lernen und verstehen mit Illustrationen, Alltagsbeispielen und Python-Code

Book description

  • Visuelle Erläuterungen mit über 400 anschaulichen Illustrationen
  • Mit einfachen Beispielen aus dem Alltag und zahlreichen Übungen
  • Ausführlich kommentierter Beispielcode in Python

Algorithmen kapieren ohne graue Theorie

Ab sofort sind Algorithmen nicht mehr langweilig und trocken! Mit diesem Buch wird es dir leichtfallen, ihre Funktionsweise zu verstehen. Alle Algorithmen werden mithilfe von Beispielen aus dem täglichen Leben erläutert, z.B. der Unterschied zwischen Arrays und verketteten Listen anhand der Aufgabe, freie Plätze in einem Kinosaal zu finden.

Für den Einsatz in der Praxis

Du lernst die wichtigsten Algorithmen kennen, die dir dabei helfen, deine Programme zu beschleunigen, deinen Code zu vereinfachen und die gängigsten Aufgaben bei der Programmierung zu lösen. Dabei beginnst du mit einfachen Aufgaben wie Sortieren und Suchen. Mit diesen Grundlagen gerüstet kannst du auch schwierigere Aufgaben wie Datenkomprimierung oder künstliche Intelligenz in Angriff nehmen.

Visuell und praxisnah

Zu allen Erläuterungen findest du anschauliche Illustrationen und Diagramme sowie ausführlich kommentierten Beispielcode in Python. Übungsaufgaben mit Lösungen für jedes Kapitel helfen dir, dein Wissen zu testen und zu festigen.

Aus dem Inhalt:

  • Such-, Sortier- und Graphenalgorithmen
  • Performance von Algorithmen analysieren (Landau-Notation)
  • Arrays, verkettete Listen und Hashtabellen
  • Bäume und balancierte Bäume
  • Rekursion und Stacks
  • Quicksort und das Teile-und-herrsche-Verfahren
  • Dijkstra-Algorithmus für die Ermittlung des kürzesten Pfads
  • Approximationsalgorithmen und NP-vollständige Probleme
  • Greedy-Algorithmen
  • Dynamische Programmierung
  • Klassifikation und Regression mit dem k-Nächste-Nachbarn-Algorithmus

Stimmen zum Buch

»Das Buch schafft das Unmögliche: Mathe macht Spaß und ist einfach.« (– Sander Rossel, COAS Software Systems)

»Algorithmen sind nicht langweilig! Die Lektüre des Buchs hat mir und meinen Studenten Spaß gemacht und war lehrreich.« (– Christopher Haupt, Mobirobo, Inc.)

»Heutzutage gibt es praktisch keinen Aspekt des Lebens, der nicht durch einen Algorithmus optimiert wird. Dieses Buch sollte Ihre erste Wahl sein, wenn Sie eine gut erklärte Einführung in dieses Thema suchen.« (– Amit Lamba, Tech Overture, LLC)

Table of contents

  1. Lob für die erste Auflage
  2. Algorithmen kapieren
  3. Impressum
  4. Vorwort
  5. Geleitwort
  6. Einleitung
    1. Verwendung dieses Buchs
    2. Wer sollte dieses Buch lesen?
    3. Aufbau dieses Buchs: Überblick
    4. Konventionen und Downloads
    5. Über den Autor
    6. Über den Fachkorrektor
    7. Danksagungen
  7. Kapitel 1: Einführung in Algorithmen
    1. 1.1 Einführung
      1. 1.1.1 Performance
      2. 1.1.2 Problemlösungen
    2. 1.2 Binäre Suche
      1. 1.2.1 Eine bessere Suchmethode
      2. 1.2.2 Laufzeit
    3. 1.3 Landau-Notation
      1. 1.3.1 Die Laufzeiten von Algorithmen nehmen unterschiedlich schnell zu
      2. 1.3.2 Visualisierung verschiedener Laufzeiten
      3. 1.3.3 Die Landau-Notation beschreibt die Laufzeit im Worst Case
      4. 1.3.4 Typische Laufzeiten gebräuchlicher Algorithmen
      5. 1.3.5 Das Problem des Handlungsreisenden
    4. 1.4 Zusammenfassung
  8. Kapitel 2: Selectionsort
    1. 2.1 Die Funktionsweise des Arbeitsspeichers
    2. 2.2 Arrays und verkettete Listen
      1. 2.2.1 Verkettete Listen
      2. 2.2.2 Arrays
      3. 2.2.3 Terminologie
      4. 2.2.4 Einfügen in der Mitte einer Liste
      5. 2.2.5 Löschen
    3. 2.3 Was wird häufiger verwendet: Arrays oder Listen?
    4. 2.4 Selectionsort
    5. 2.5 Zusammenfassung
  9. Kapitel 3: Rekursion
    1. 3.1 Rekursion
    2. 3.2 Basisfall und Rekursionsfall
    3. 3.3 Der Stack
      1. 3.3.1 Der Aufruf-Stack
      2. 3.3.2 Der Aufruf-Stack mit Rekursion
    4. 3.4 Zusammenfassung
  10. Kapitel 4: Quicksort
    1. 4.1 Teile und herrsche
    2. 4.2 Quicksort
    3. 4.3 Landau-Notation im Detail
      1. 4.3.1 Mergesort und Quicksort im Vergleich
      2. 4.3.2 Average Case und Worst Case im Vergleich
    4. 4.4 Zusammenfassung
  11. Kapitel 5: Hashtabellen
    1. 5.1 Hashfunktionen
    2. 5.2 Anwendungsfälle
      1. 5.2.1 Hashtabellen zum Nachschlagen verwenden
      2. 5.2.2 Doppelte Einträge verhindern
      3. 5.2.3 Hashtabellen als Cache verwenden
      4. 5.2.4 Zusammenfassung
      5. 5.2.5 Kollisionen
    3. 5.3 Performance
      1. 5.3.1 Der Auslastungsfaktor
      2. 5.3.2 Eine gute Hashfunktion
    4. 5.4 Zusammenfassung
  12. Kapitel 6: Breitensuche
    1. 6.1 Einführung in Graphen
    2. 6.2 Was ist ein Graph?
    3. 6.3 Breitensuche
      1. 6.3.1 Den kürzesten Pfad finden
      2. 6.3.2 Warteschlangen
    4. 6.4 Implementierung des Graphen
    5. 6.5 Implementierung des Algorithmus
      1. 6.5.1 Laufzeit
    6. 6.6 Zusammenfassung
  13. Kapitel 7: Bäume
    1. 7.1 Dein erster Baum
      1. 7.1.1 Dateiverzeichnisse
    2. 7.2 A Space Odyssey: Gefunden mit der Tiefensuche
      1. 7.2.1 Eine bessere Definition von Bäumen
    3. 7.3 Binärbäume
    4. 7.4 Huffman-Codierung
    5. 7.5 Zusammenfassung
  14. Kapitel 8: Balancierte Bäume
    1. 8.1 Ein Balanceakt
      1. 8.1.1 Schnelleres Einfügen mit Bäumen
    2. 8.2 Kürzere Bäume sind schneller
    3. 8.3 AVL-Bäume: eine Form von balancierten Bäumen
      1. 8.3.1 Rotationen
      2. 8.3.2 Woher weiß der AVL-Baum, wann es Zeit für eine Rotation ist?
    4. 8.4 Splay-Bäume
    5. 8.5 B-Bäume
      1. 8.5.1 Welchen Vorteil bieten B-Bäume?
    6. 8.6 Zusammenfassung
  15. Kapitel 9: Der Dijkstra-Algorithmus
    1. 9.1 Anwendung des Dijkstra-Algorithmus
    2. 9.2 Terminologie
    3. 9.3 Eintauschen gegen ein Klavier
    4. 9.4 Negativ gewichtete Kanten
    5. 9.5 Implementierung
    6. 9.6 Zusammenfassung
  16. Kapitel 10: Greedy-Algorithmen
    1. 10.1 Das Stundenplanproblem
    2. 10.2 Das Rucksackproblem
    3. 10.3 Das Mengenüberdeckungsproblem
      1. 10.3.1 Approximationsalgorithmen
    4. 10.4 Zusammenfassung
  17. Kapitel 11: Dynamische Programmierung
    1. 11.1 Das Rucksackproblem
      1. 11.1.1 Die einfache Lösung
      2. 11.1.2 Dynamische Programmierung
    2. 11.2 Häufig gestellte Fragen zum Rucksackproblem
      1. 11.2.1 Was geschieht beim Hinzufügen eines Gegenstands?
      2. 11.2.2 Was geschieht, wenn die Reihenfolge der Zeilen geändert wird?
      3. 11.2.3 Kann man das Gitter auch spaltenweise (statt zeilenweise) befüllen?
      4. 11.2.4 Was geschieht, wenn man ein leichteres Objekt hinzufügt?
      5. 11.2.5 Kann man Teile eines Gegenstands stehlen?
      6. 11.2.6 Optimierung des Reiseplans
      7. 11.2.7 Handhabung voneinander abhängiger Objekte
      8. 11.2.8 Ist es möglich, dass die Lösung mehr als zwei Teil-Rucksäcke erfordert?
      9. 11.2.9 Ist es möglich, dass die beste Lösung den Rucksack nicht vollständig füllt?
    3. 11.3 Der längste gemeinsame Teilstring
      1. 11.3.1 Erstellen des Gitters
      2. 11.3.2 Befüllen des Gitters
      3. 11.3.3 Die Lösung
      4. 11.3.4 Die längste gemeinsame Teilfolge
      5. 11.3.5 Die längste gemeinsame Teilfolge – Lösung
    4. 11.4 Zusammenfassung
  18. Kapitel 12: k-nächste Nachbarn
    1. 12.1 Klassifikation von Orangen und Grapefruits
    2. 12.2 Entwicklung eines Empfehlungssystems
      1. 12.2.1 Merkmalsextraktion
      2. 12.2.2 Regression
      3. 12.2.3 Auswahl geeigneter Merkmale
    3. 12.3 Einführung in Machine Learning
      1. 12.3.1 OCR
      2. 12.3.2 Entwicklung eines Spamfilters
      3. 12.3.3 Vorhersage der Entwicklung des Aktienmarkts
    4. 12.4 Ablauf des Trainings für ein ML-Modell im Überblick
    5. 12.5 Zusammenfassung
  19. Kapitel 13: Die nächsten Schritte
    1. 13.1 Lineare Regression
    2. 13.2 Invertierte Indizes
    3. 13.3 Die Fourier-Transformation
    4. 13.4 Nebenläufige Algorithmen
    5. 13.5 Map/Reduce
      1. 13.5.1 Warum sind verteilte Algorithmen nützlich?
    6. 13.6 Bloom-Filter und HyperLogLog
      1. 13.6.1 Bloom-Filter
      2. 13.6.2 HyperLogLog
    7. 13.7 HTTPS und der Diffie-Hellman-Schlüsselaustausch
    8. 13.8 Locality-Sensitive Hashing
    9. 13.9 Min-Heaps und Prioritätswarteschlangen
    10. 13.10 Lineare Programmierung
    11. 13.11 Epilog
  20. Anhang A: Performance von AVL-Bäumen
  21. Anhang B: NP-schwere Probleme
    1. B.1 Entscheidungsprobleme
    2. B.2 Das Erfüllbarkeitsproblem
    3. B.3 Schwer zu lösen, schnell zu verifizieren
    4. B.4 Reduktionen
    5. B.5 NP-schwer
    6. B.6 NP-vollständig
    7. B.7 Zusammenfassung
  22. Anhang C: Lösungen zu den Übungen

Product information

  • Title: Algorithmen kapieren - Visuell lernen und verstehen mit Illustrationen, Alltagsbeispielen und Python-Code
  • Author(s): Aditya Y. Bhargava
  • Release date: July 2024
  • Publisher(s): mitp Verlag
  • ISBN: 9783747509104