Algorithmen und Datenstrukturen - Praktische Übungen für die Vorlesungen und Praktika

René Krooß

Algorithmen und Datenstrukturen

Praktische Übungen für die Vorlesungen und Praktika

2022

582 Seiten

Format: PDF, ePUB, Online Lesen

E-Book: €  49,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446473034

 

Inhalt

7

Vorwort

11

Teil I: Grundlagen

15

1 Einführung

17

1.1 Berechenbarkeit von Algorithmen

18

1.2 Wie eine Turing-Maschine arbeitet

19

1.2.1 Beispiel 1: Addition zweier Zahlen mit einer Turing-Maschine

20

1.2.2 Beispiel 2: Suchen und ersetzen

22

1.2.3 Beispiel 3: Multiplikation zweier Zahlen mit einer erweiterten Turing-Maschine

24

1.2.4 Von der Turing-Maschine zum Prozessor

27

1.3 Laufzeitanalyse von Algorithmen

28

1.3.1 Das P-NP-Problem

30

1.4 Laufzeitabschätzungen von C-Programmen

31

1.5 Übungen

35

2 Basisalgorithmen

37

2.1 Der Ringtausch

38

2.2 Einfache Textsuche

42

2.3 Einfaches Suchen und Ersetzen

47

2.3.1 Entfernen eines Textes aus einer Zeichenkette

47

2.3.2 Einfügen von Freiräumen in den Text

48

2.3.3 Ein vollständiges Programm zum Suchen und Ersetzen

49

2.4 Einfaches Sortieren von Zahlen

52

2.4.1 Bubble Sort

53

2.4.2 Einfaches, sortiertes Einfügen

57

2.5 Primfaktorzerlegung

61

2.5.1 Wann ist eine Zahl eine Primzahl

61

2.5.2 Die Primfaktorzerlegung das Programm Primteiler

63

2.6 Berechnung des GGT (größter gemeinsamer Teiler)

67

2.7 Gezielte Suche nach Primzahlen

70

2.7.1 Das Sieb des Eratosthenes

70

2.8 Rechnen mit beliebig langen Zahlen

73

2.8.1 Addition beliebig langer Zahlen

73

2.8.2 Subtraktion beliebig langer Zahlen

78

2.8.3 Multiplikation beliebig langer Zahlen (Ägyptische Multiplikation)

82

2.8.4 Division beliebig langer Zahlen (Ägyptische Division)

84

2.9 Übungen

97

3 Rekursive Algorithmen

99

3.1 Der Prozessorstapel (Stack)

99

3.2 Was sind Rekursionen und wozu werden sie benötigt

101

3.3 Beispielprogramme zur Rekursion

101

3.3.1 Berechnung der Fakultät

102

3.3.2 Berechnung von Fibonacci-Zahlen

104

3.3.3 Das Erstellen von Galois-Feldern

106

3.3.4 Die Türme von Hanoi

109

3.3.5 Ein Backtracking-Algorithmus

112

3.3.6 Ein einfacher Taschenrechner

118

3.4 Wann Rekursion und wann lieber nicht

127

3.5 Übungen

128

Teil II: Fortgeschrittene Themen

129

4 Verkettete Listen

131

4.1 Die Erstellung verketteter Listen

131

4.1.1 Einfach verkettete Listen

132

4.1.2 Doppelt verkettete Listen

141

4.2 Blockchains und Listen mit beliebigen Objekten

152

4.2.1 Blockchains

152

4.2.2 Listen mit beliebigen Objekttypen

165

4.3 Listen mit Java erstellen

180

4.3.1 Erstellen von Java-Listen mit LinkedList

181

4.3.2 Erstellen von Java-Listen mit Vector

185

4.3.3 Wann LinkedList und wann Vector

186

4.4 Übungen

187

5 Bäume

189

5.1 Allgemeine Bäume

190

5.1.1 Einfach strukturierte allgemeine Bäume

190

5.1.2 Allgemeine Bäume mit beliebigen Objekten

202

5.2 Binärbäume

216

5.3 Bäume in Java

227

5.4 Übungen

232

6 Such- und Sortierverfahren

233

6.1 Wichtige effiziente Sortierverfahren

234

6.1.1 Min-Max-Sort

234

6.1.2 Mergesort

239

6.1.3 Quicksort

245

6.1.4 Treesort

252

6.1.5 Heapsort

255

6.2 Effiziente Suchalgorithmen

264

6.2.1 Der KMP-Algorithmus

264

6.2.2 Threadsearch

271

6.3 Übungen

278

Teil III: Weiterführende Themen

279

7 Signalverarbeitung

281

7.1 Was ist ein Signal

281

7.1.1 Korrektes Messen von Signalen

282

7.2 Generierung digitaler Signale

286

7.2.1 Das Rechtecksignal

287

7.2.2 Das Sägezahnsignal

290

7.2.3 Das Dreiecksignal

292

7.2.4 Das weiße Rauschen

294

7.2.5 Das Sinussignal

297

7.2.6 Zeitveränderliche diskrete Signale

299

7.3 Filteralgorithmen

303

7.3.1 Der Pop-Klick-Filter

304

7.3.2 Der Distortion-Filter

307

7.3.3 Der EMA-Filter

309

7.3.4 Diskrete Fourier-Transformation (DFT)

313

7.4 Übungen

317

8 Grafische Bildverarbeitung

319

8.1 Der Medianfilter

319

8.2 Binärfilter

335

8.3 Lineares Filtern mit Filtermasken

338

8.4 Chroma Keying

343

8.5 Übungen

346

9 Simulation neuronaler Netze

347

9.1 Zeichenerkennung mit neuronalen Netzen

348

9.2 Spracherkennung

361

10 Kryptographische Algorithmen

371

10.1 Historische Chiffren

371

10.1.1 Die Caesar-Chiffre

372

10.1.2 Die Vigenre-Verschlüsselung

377

10.1.3 Die Enigma

380

10.2 Sichere Schlüsselübertragung

389

10.2.1 Verwenden der Modulo-Operation

389

10.2.2 Verwenden des RSA-Algorithmus

396

10.3 Blockchiffren

409

10.4 Hashing-Verfahren

426

10.4.1 Erweitertes XOR-Hashing

426

10.4.2 Der SHA-Algorithmus

436

10.5 Erzeugen sicherer Pseudo-Zufallszahlen

443

10.6 Übertragen von Nachrichten durch Quantenkryptographie

446

11 Graphen

449

11.1 Darstellung eines Graphen als Adjazenzmatrix

451

11.2 Darstellung eines Graphen als verallgemeinerte Baumstruktur

460

11.3 Eulerkreise

469

11.4 Petri-Netze

476

11.4.1 Prozess-Synchronisation

476

11.4.2 Das Erzeuger-Verbraucher-Problem

479

11.4.3 Das Philosophenproblem von Dijkstra

481

11.4.4 Simulation von Petri-Netzen mit Inzidenzmatrizen

495

11.5 Übungen

505

Anhang: Lösung der Übungsaufgaben

507

Anhang zu Kapitel 1 Einführung

507

Anhang zu Kapitel 2 Basisalgorithmen

512

Anhang zu Kapitel 3 Rekursive Algorithmen

514

Anhang zu Kapitel 4 Verkettete Listen

516

Anhang zu Kapitel 5 Bäume

518

Anhang zu Kapitel 6 Such- und Sortierverfahren

520

Anhang zu Kapitel 7 Signalverarbeitung

521

Anhang zu Kapitel 8 Grafische Bildverarbeitung

524

Anhang zu Kapitel 11 Graphen

526

Index

529

 

© 2009-2024 ciando GmbH