Algorithmen und Datenstrukturen eine Einführung mit Java

Algorithmen und Datenstrukturen sind Grundbausteine eines jeden Informatikstudiums. Das Buch behandelt diese Thematik in Verbindung mit der Programmiersprache Java. Darüber hinaus werden grundlegende Konzepte angesprochen wie formale und alternative Algorithmenmodelle, Korrektheit und Komplexität. E...

Descripción completa

Detalles Bibliográficos
Otros Autores: Saake, Gunter, author (author), Sattler, Kai-Uwe, author
Formato: Libro electrónico
Idioma:Inglés
Publicado: dpunkt 2020
Edición:6. Auflage
Materias:
Ver en Biblioteca Universitat Ramon Llull:https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009630859706719
Tabla de Contenidos:
  • Intro
  • I Grundlegende Konzepte
  • Vorbemerkungen und Überblick
  • Informatik, Algorithmen und Datenstrukturen
  • Historischer Überblick: Algorithmen
  • Historie von Programmiersprachen und Java
  • Grundkonzepte der Programmierung in Java
  • Algorithmische Grundkonzepte
  • Intuitiver Algorithmusbegriff
  • Beispiele für Algorithmen
  • Bausteine für Algorithmen
  • Pseudocode-Notation für Algorithmen
  • Struktogramme
  • Rekursion
  • Sprachen und Grammatiken
  • Begriffsbildung
  • Reguläre Ausdrücke
  • Backus-Naur-Form (BNF)
  • Elementare Datentypen
  • Datentypen als Algebren
  • Signaturen von Datentypen
  • Der Datentyp bool
  • Der Datentyp integer
  • Felder und Zeichenketten
  • Terme
  • Bildung von Termen
  • Algorithmus zur Termauswertung
  • Datentypen in Java
  • Primitive Datentypen
  • Referenzdatentypen
  • Operatoren
  • Algorithmenparadigmen
  • Überblick über Algorithmenparadigmen
  • Applikative Algorithmen
  • Terme mit Unbestimmten
  • Funktionsdefinitionen
  • Auswertung von Funktionen
  • Erweiterung der Funktionsdefinition
  • Applikative Algorithmen
  • Beispiele für applikative Algorithmen
  • Imperative Algorithmen
  • Grundlagen imperativer Algorithmen
  • Komplexe Anweisungen
  • Beispiele für imperative Algorithmen
  • Das logische Paradigma
  • Logik der Fakten und Regeln
  • Deduktive Algorithmen
  • Weitere Paradigmen
  • Genetische Algorithmen
  • Neuronale Netze
  • Umsetzung in Java
  • Ausdrücke und Anweisungen
  • Methoden
  • Applikative Algorithmen und Rekursion
  • Literaturhinweise zum Teil I
  • II Algorithmen
  • Ausgewählte Algorithmen
  • Suchen in sortierten Folgen
  • Sequenzielle Suche
  • Binäre Suche
  • Sortieren
  • Sortieren: Grundbegriffe
  • Sortieren durch Einfügen
  • Sortieren durch Selektion
  • Sortieren durch Vertauschen: BubbleSort
  • Sortieren durch Mischen: MergeSort
  • QuickSort
  • Sortieren durch Verteilen: RadixSort.
  • Sortierverfahren im Vergleich
  • Formale Algorithmenmodelle
  • Registermaschinen
  • Abstrakte Maschinen
  • Markov-Algorithmen
  • Church'sche These
  • Interpreter für formale Algorithmenmodelle in Java
  • Java: Markov-Interpreter
  • Registermaschine in Java
  • Eigenschaften von Algorithmen
  • Berechenbarkeit und Entscheidbarkeit
  • Existenz nichtberechenbarer Funktionen
  • Konkrete nichtberechenbare Funktionen
  • Das Halteproblem
  • Nichtentscheidbare Probleme
  • Post'sches Korrespondenzproblem
  • Korrektheit von Algorithmen
  • Relative Korrektheit
  • Korrektheit von imperativen Algorithmen
  • Korrektheitsbeweise für Anweisungstypen
  • Korrektheit imperativer Algorithmen an Beispielen
  • Korrektheit applikativer Algorithmen
  • Komplexität
  • Motivierendes Beispiel
  • Asymptotische Analyse
  • Komplexitätsklassen
  • Analyse von Algorithmen
  • Entwurf von Algorithmen
  • Entwurfsprinzipien
  • Schrittweise Verfeinerung
  • Einsatz von Algorithmenmustern
  • Problemreduzierung durch Rekursion
  • Algorithmenmuster: Greedy
  • Greedy-Algorithmen am Beispiel
  • Greedy: Optimales Kommunikationsnetz
  • Verfeinerung der Suche nach billigster Kante
  • Rekursion: Divide-and-conquer
  • Das Prinzip "Teile und herrsche"
  • Beispiel: Spielpläne für Turniere
  • Rekursion: Backtracking
  • Prinzip des Backtracking
  • Beispiel: Das Acht-Damen-Problem
  • Beispiel: Tic Tac Toe mit Backtracking
  • Dynamische Programmierung
  • Das Rucksackproblem
  • Rekursive Lösung des Rucksackproblems
  • Prinzip der dynamischen Programmierung
  • Parallele und verteilte Berechnungen
  • Grundlagen
  • Modell der Petri-Netze
  • Definition von Petri-Netzen
  • Formalisierung von Petri-Netzen
  • Das Beispiel der fünf Philosophen
  • Programmieren nebenläufiger Abläufe
  • Koordinierte Prozesse
  • Programmieren mit Semaphoren
  • Philosophenproblem mit Semaphoren
  • Verklemmungsfreie Philosophen.
  • Nebenläufige Berechnungen in Java
  • Threads und wechselseitiger Ausschluss
  • Parallelisierung in Java
  • Das Philosophenproblem in Java
  • Literaturhinweise zum Teil II
  • III Datenstrukturen
  • Abstrakte Datentypen
  • Signaturen und Algebren
  • Algebraische Spezifikation
  • Spezifikationen und Modelle
  • Termalgebra und Quotiententermalgebra
  • Probleme mit initialer Semantik
  • Beispiele für abstrakte Datentypen
  • Der Kellerspeicher (Stack)
  • Beispiel für Kellernutzung
  • Die Warteschlange (Queue)
  • Entwurf von Datentypen
  • Klassen, Schnittstellen und Objekte in Java
  • Grundzüge der Objektorientierung
  • Klassen und Objekte in Java
  • Vererbung
  • Abstrakte Klassen und Schnittstellen
  • Ausnahmen
  • Umsetzung abstrakter Datentypen
  • Lambda-Ausdrücke
  • Grundlegende Datenstrukturen
  • Stack und Queue als Datentypen
  • Implementierung des Stacks
  • Implementierung der Queue
  • Bewertung der Implementierungen
  • Verkettete Listen
  • Doppelt verkettete Listen
  • Skip-Listen
  • Das Iterator-Konzept
  • Java Collection Framework
  • Generics in Java
  • Bäume
  • Bäume: Begriffe und Konzepte
  • Binärer Baum: Datentyp und Basisalgorithmen
  • Der Datentyp "Binärer Baum"
  • Algorithmen zur Traversierung
  • Suchbäume
  • Suchen in Suchbäumen
  • Einfügen und Löschen
  • Komplexität der Operationen
  • Ausgeglichene Bäume
  • Rot-Schwarz-Bäume
  • AVL-Bäume
  • B-Bäume
  • Digitale Bäume
  • Tries
  • Patricia-Bäume
  • Praktische Nutzung von Bäumen
  • Sortieren mit Bäumen: HeapSort
  • Sets mit binären Suchbäumen
  • Hashverfahren
  • Grundprinzip des Hashens
  • Grundlagen und Verfahren
  • Hashfunktionen
  • Behandlung von Kollisionen
  • Aufwand beim Hashen
  • Hashen in Java
  • Cuckoo-Hashing
  • Dynamische Hashverfahren
  • Grundideen für dynamische Hashverfahren
  • Erweiterbares Hashen
  • Umsetzung des erweiterbaren Hashens
  • Graphen
  • Arten von Graphen.
  • Ungerichtete Graphen
  • Gerichtete Graphen
  • Gewichtete Graphen
  • Weitere Eigenschaften von Graphen
  • Realisierung von Graphen
  • Knoten- und Kantenlisten
  • Adjazenzmatrix
  • Graphen als dynamische Datenstrukturen
  • Transformationen zwischen Darstellungen
  • Vergleich der Komplexität
  • Eine Java-Klasse für Graphen
  • Ausgewählte Graphenalgorithmen
  • Breitendurchlauf
  • Tiefendurchlauf
  • Zyklenfreiheit und topologisches Sortieren
  • Algorithmen auf gewichteten Graphen
  • Kürzeste Wege
  • Dijkstras Algorithmus
  • A*-Algorithmus
  • Kürzeste Wege mit negativen Kantengewichten
  • Maximaler Durchfluss
  • Der Ford-Fulkerson-Algorithmus
  • Zentralitätsanalyse in Graphen
  • Weitere Fragestellungen für Graphen
  • Algorithmen auf Texten
  • Probleme der Worterkennung
  • Knuth-Morris-Pratt
  • Boyer-Moore
  • Pattern Matching
  • Reguläre Ausdrücke
  • Endliche Automaten
  • Java-Klassen für reguläre Ausdrücke
  • Ähnlichkeit von Zeichenketten
  • Levenshtein-Distanz
  • n-Gramme
  • Anwendungen der Ähnlichkeitsvergleiche
  • Literaturhinweise zum Teil III
  • Quelltext der Klasse IOUtils
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Algorithmenverzeichnis
  • Beispielverzeichnis
  • Programmverzeichnis
  • Literaturverzeichnis
  • Index.