Strukturwerkstatt, ausführliche Erklärseiten

Eine einzelne HTML Datei mit Übersichtsseite und eigenen Erklärseiten für alle sieben Welten. Jede Welt erklärt die wichtigsten Ideen mit großen, lesbaren Zeichnungen, Beispielen und kleinen interaktiven Elementen. Welt 2 enthält wieder eine richtige Schritt Animation für Preorder, Inorder und Postorder.

1

Welt 1, Stammbaum

Baumstrukturen, Wurzel, Blatt, innere Knoten, Tiefe, Grad und Pfade.

BaumGrundbegriffePfad
2

Welt 2, Morsewald

Binärbaum, Morsecode, BinaryTree und ausführlich Preorder, Inorder, Postorder.

BinärbaumMorsecodeAnimation
3

Welt 3, Loginwald

Binärer Suchbaum, suchen, einfügen, entfernen und entartete Bäume.

BSTSucheEinfügen
4

Welt 4, Stadtkarte

Graphen, Knoten, Kanten, Nachbarn, Gewichte und gerichtete Verbindungen.

GraphKantenEuler
5

Welt 5, Speicherwelten

Adjazenzmatrix und Adjazenzliste, zwei Arten Graphen zu speichern.

MatrixListeSpeicher
6

Welt 6, Labyrinth

Tiefensuche, Breitensuche, Backtracking, Stack und Queue.

DFSBFSAnimation
7

Welt 7, Routenplaner

Dijkstra, kürzeste Wege, Distanz Tabelle und Vorgänger.

DijkstraGewichteRoute
Welt 1

Stammbaum, die Grundidee von Bäumen

Ein Baum ist eine nicht lineare Datenstruktur. Das bedeutet: Die Elemente stehen nicht einfach hintereinander wie in einer Liste. Stattdessen gibt es Verzweigungen. Genau deshalb eignen sich Bäume für Hierarchien, Dateisysteme, Stammbäume oder Entscheidungswege.

1. Was ist ein Baum?

Ein Baum besteht aus Knoten und Kanten. Ein Knoten speichert einen Inhalt. Eine Kante verbindet zwei Knoten. Ganz oben steht die Wurzel. Von dort aus verzweigt sich der Baum nach unten.

!
WichtigEin Baum hat keine Kreise. Wenn du von der Wurzel nach unten gehst, kommst du nicht irgendwann wieder an derselben Stelle heraus.

Wurzel

Der einzige Knoten ohne Vorgänger. Hier beginnt der Baum.

Innerer Knoten

Ein Knoten mit mindestens einem Nachfolger.

Blatt

Ein Knoten ohne Nachfolger. Hier endet ein Ast.

2. Tiefe, Höhe und Grad

Die Tiefe eines Knotens zählt, wie viele Kanten man von der Wurzel bis zu diesem Knoten entlanggeht. Die Wurzel hat Tiefe 0. Die Höhe des Baums ist die größte vorkommende Tiefe.

Der Grad eines Knotens ist die Anzahl seiner direkten Nachfolger. Der Grad des gesamten Baums ist der größte Knotengrad im Baum.

Beispiel zum Ablesen
Klicke auf einen Begriff, dann wird er im Baum markiert.

3. Pfade

Ein Pfad ist eine Folge von Knoten, die über Kanten verbunden sind. In einem Baum gibt es zwischen zwei Knoten genau einen eindeutigen Pfad. Dadurch ist immer klar, wie man von der Wurzel zu einem bestimmten Blatt kommt.

MerksatzEin Baum ist eine Hierarchie mit genau einer Wurzel, ohne Kreise und mit eindeutigem Weg von oben nach unten.

Baumdiagramm

A B C D E F G H I Tiefe 0 Tiefe 1 Tiefe 2 Tiefe 3
WurzelBlattinnerer Knoten
Welt 2

Morsewald, Binärbaum und Traversierung

Diese Welt ist besonders wichtig: Ein Binärbaum ist ein Baum mit höchstens zwei Nachfolgern pro Knoten. Das passt perfekt zu Entscheidungen mit zwei Möglichkeiten, zum Beispiel kurz oder lang beim Morsecode. Außerdem geht es um die Frage, in welcher Reihenfolge man einen Baum besucht.

1. Binärbaum

Ein Binärbaum besteht aus einer Wurzel, einem linken Teilbaum und einem rechten Teilbaum. Jeder dieser Teilbäume ist wieder ein Binärbaum. Auch ein leerer Teilbaum zählt als Teilbaum.

linker Teilbaum

Alles, was links an einem Knoten hängt.

rechter Teilbaum

Alles, was rechts an einem Knoten hängt.

maximal zwei

Ein Knoten kann 0, 1 oder 2 direkte Kinder haben.

!
Unterschied zu Welt 1In einem allgemeinen Baum darf ein Knoten viele Kinder haben. Im Binärbaum sind es höchstens zwei.

2. Warum Morsecode gut passt

Beim Morsecode entscheidet jedes Zeichen über die nächste Richtung. Ein kurzer Ton bedeutet links. Ein langer Ton bedeutet rechts. Am Ende der Zeichenfolge steht der gesuchte Buchstabe im erreichten Knoten.

1
kurzGehe nach links.
2
langGehe nach rechts.
3
Code zu EndeLies den Buchstaben im aktuellen Knoten ab.

Beispiel: kurz lang kurz führt zu R.

3. Morsecode ausprobieren

Gib einen Code mit Punkten und Strichen ein. Mehrere Buchstaben trennst du mit Leerzeichen. Beispiel: .- - .-. ergibt ATR.

Ergebnis: R. Der erste Code wurde im Baum markiert.

Der Morsebaum, groß und gut lesbar

kurzlang kurzlang kurzlang kurzlang kurzlang Start E T I A N M S U R W
R als BeispielPunkt = kurz = linksStrich = lang = rechts

4. Preorder, Inorder und Postorder

Bei einem Baum gibt es keine einzige natürliche Reihenfolge wie bei einer Liste. Deshalb legt man eine Strategie fest. Die drei klassischen Strategien unterscheiden sich nur darin, wann die Wurzel bearbeitet wird.

Preorder

Wurzel zuerst, danach linker Teilbaum, danach rechter Teilbaum. Die Wurzel kommt also ganz früh.

Inorder

Erst linker Teilbaum, dann Wurzel, dann rechter Teilbaum. Die Wurzel liegt dazwischen.

Postorder

Erst linker Teilbaum, dann rechter Teilbaum, danach die Wurzel. Die Wurzel kommt zuletzt.

!
Die Namen helfenPre bedeutet vor den Teilbäumen. In bedeutet zwischen den Teilbäumen. Post bedeutet nach den Teilbäumen.

5. Rekursive Denkweise

Die Verfahren sind rekursiv. Man macht auf dem linken Teilbaum wieder dasselbe, danach auf dem rechten Teilbaum. Der einzige Unterschied ist die Position von besuche(Wurzel).

Preorder: besuche(Wurzel) preorder(linker Teilbaum) preorder(rechter Teilbaum) Inorder: inorder(linker Teilbaum) besuche(Wurzel) inorder(rechter Teilbaum) Postorder: postorder(linker Teilbaum) postorder(rechter Teilbaum) besuche(Wurzel)

Interaktive Animation

Die Animation hebt die Knoten genau in der Reihenfolge hervor, in der sie besucht werden. Die Buchstaben sind größer als vorher und bleiben gut lesbar.

A R W L P J K X
Wähle eine Traversierung aus.

Ergebnisse für diesen Baum

  • Preorder: A, R, L, P, W, J, K, X
  • Inorder: L, R, P, A, J, W, X, K
  • Postorder: L, P, R, J, X, K, W, A

6. BinaryTree im Programm

In Java wird so ein Baum häufig als Objekt modelliert. Ein BinaryTree speichert einen Inhalt und zwei weitere BinaryTree Objekte als linken und rechten Teilbaum.

new BinaryTree<Buchstabe>() leerer Baum new BinaryTree<Buchstabe>(inhalt) ein einzelner Knoten new BinaryTree<Buchstabe>(inhalt, links, rechts)
Welt 3

Loginwald, binäre Suchbäume

Ein binärer Suchbaum ist ein Binärbaum mit einer Zusatzregel: Links stehen kleinere Werte, rechts stehen größere Werte. Dadurch kann man beim Suchen große Teile des Baums überspringen.

1. Die Suchbaumregel

Für jeden Knoten gilt: Alle Werte im linken Teilbaum sind kleiner. Alle Werte im rechten Teilbaum sind größer. Diese Regel muss an jeder Stelle im Baum stimmen, nicht nur an der Wurzel.

!
Nicht nur direkt danebenWenn 40 links von 50 steht, muss auch alles unter 40 weiterhin zur passenden Ordnung passen.

2. Suchen Schritt für Schritt

Bei jeder Station wird verglichen. Ist der gesuchte Wert kleiner, geht es links weiter. Ist er größer, geht es rechts weiter. Ist er gleich, ist die Suche fertig.

Wähle einen Wert und starte die Suche.

3. Einfügen

Einfügen funktioniert fast genauso wie Suchen. Man wandert mit Vergleichen nach links oder rechts, bis die passende freie Stelle erreicht ist. Dort wird der neue Knoten angehängt.

+
Beispiel75 ist größer als 50, größer als 70 und kleiner als 90. Also gehört 75 links unter 90.

4. Entfernen

Blatt

Ein Blatt kann einfach gelöscht werden.

Ein Kind

Das Kind nimmt die Stelle des gelöschten Knotens ein.

Zwei Kinder

Man ersetzt den Knoten meist durch den kleinsten Wert aus dem rechten Teilbaum.

Suchbaum Beispiel

50 30 70 20 40 60 90 85 95

Suche nach 60: 60 ist größer als 50, also rechts. 60 ist kleiner als 70, also links. Dann ist 60 gefunden.

Entarteter Baum

Wenn Werte ungünstig eingefügt werden, zum Beispiel 10, 20, 30, 40, 50, entsteht fast eine Liste. Dann verliert der Suchbaum seinen Vorteil.

10 20 30 40 50
Welt 4

Stadtkarte, vom Baum zum Graphen

Ein Graph besteht aus Knoten und Kanten. Anders als ein Baum darf ein Graph Kreise enthalten. Außerdem kann es mehrere Wege zwischen zwei Knoten geben. Deshalb passen Graphen gut zu Stadtplänen, sozialen Netzwerken, Stromnetzen oder Webseiten.

1. Begriffe

  • Knoten sind die Objekte, zum Beispiel Orte auf einer Karte.
  • Kanten sind die Verbindungen zwischen Knoten.
  • Nachbarn sind Knoten, die direkt durch eine Kante verbunden sind.
  • Grad ist die Anzahl der Kanten, die an einem Knoten hängen.
  • Gewicht ist eine Zahl auf einer Kante, zum Beispiel Entfernung oder Zeit.

2. Gerichtet und ungerichtet

ungerichteter Graph

Die Verbindung gilt in beide Richtungen. Eine Straße ohne Einbahnregel ist ein gutes Beispiel.

gerichteter Graph

Die Verbindung hat eine Richtung. Eine Einbahnstraße oder ein Link auf einer Webseite ist ein Beispiel.

!
Gewichteter GraphBei einem gewichteten Graphen steht auf den Kanten eine Zahl. Diese Zahl kann Kosten, Länge, Zeit oder Risiko bedeuten.

3. Wege, Kreise und Euler

Ein Weg ist eine Folge von Knoten, die über Kanten verbunden sind. Ein Kreis ist ein Weg, der wieder beim Start landet. Ein Eulerweg benutzt jede Kante genau einmal. Ein Eulerkreis ist ein Eulerweg, der wieder am Start endet.

Beispiel Stadtkarte

4 2 3 6 5 7 1 8 A B C D E F

Von A nach F gibt es mehrere Wege, zum Beispiel A, C, E, F oder A, B, D, F. Genau das unterscheidet den Graphen vom Baum.

Welt 5

Speicherwelten, Graphen im Computer

Ein Graph sieht als Bild leicht verständlich aus. Ein Computer braucht aber eine Speicherform. Die beiden typischen Varianten sind Adjazenzmatrix und Adjazenzliste.

1. Adjazenzmatrix

Eine Adjazenzmatrix ist eine Tabelle. Zeilen und Spalten stehen für Knoten. In einer Zelle steht, ob es eine Kante gibt. Bei gewichteten Graphen steht dort das Gewicht.

ABCDE
A02400
B20170
C41035
D07302
E00520
+
VorteilMan kann sehr schnell nachsehen, ob zwei Knoten direkt verbunden sind.
NachteilBei wenigen Kanten stehen sehr viele Nullen in der Tabelle.

2. Adjazenzliste

Eine Adjazenzliste speichert zu jedem Knoten nur die direkten Nachbarn. Bei gewichteten Graphen notiert man den Nachbarn zusammen mit dem Gewicht.

A: B(2), C(4) B: A(2), C(1), D(7) C: A(4), B(1), D(3), E(5) D: B(7), C(3), E(2) E: C(5), D(2)
+
VorteilSpart Speicher, wenn der Graph dünn ist.
NachteilUm zu prüfen, ob zwei Knoten verbunden sind, muss man oft eine Nachbarschaftsliste durchsuchen.

3. Entscheidungshilfe

Matrix wählen

Viele Kanten, viele direkte Abfragen, kleine bis mittlere Knotenzahl.

Liste wählen

Wenige Kanten, große Graphen, Speicherplatz ist wichtig.

Welt 6

Labyrinth, Tiefensuche und Breitensuche

Bei Graphen möchte man oft wissen, welche Knoten erreichbar sind oder wie man einen Weg findet. Dafür gibt es Suchverfahren. Die Tiefensuche geht zuerst tief in einen Weg hinein. Die Breitensuche betrachtet zuerst alle nahen Knoten.

1. Tiefensuche, DFS

DFS steht für Depth First Search. Die Suche geht so weit wie möglich in die Tiefe. Wenn es nicht weitergeht, läuft sie zurück. Dieses Zurücklaufen heißt Backtracking.

S
Stack IdeeDFS passt gut zu einem Stapel. Der zuletzt entdeckte Knoten wird als Nächstes weiterverfolgt.

2. Breitensuche, BFS

BFS steht für Breadth First Search. Die Suche besucht zuerst alle Knoten mit Abstand 1 vom Start, danach alle mit Abstand 2 und so weiter.

Q
Queue IdeeBFS passt gut zu einer Warteschlange. Wer zuerst entdeckt wird, wird zuerst verarbeitet.

3. Animation

Starte eine Suche bei A. DFS und BFS besuchen denselben Graphen in unterschiedlicher Reihenfolge.

Wähle DFS oder BFS.

Graph für die Suche

A B C D E F G

DFS Reihenfolge

A, B, D, G, E, C, F

BFS Reihenfolge

A, B, C, D, E, F, G

Welt 7

Routenplaner, der Algorithmus von Dijkstra

Dijkstra berechnet kürzeste Wege in einem gewichteten Graphen mit nicht negativen Kantengewichten. Er merkt sich für jeden Knoten die bisher beste bekannte Distanz und verbessert diese Schritt für Schritt.

1. Grundidee

1
InitialisierenStartknoten bekommt Distanz 0. Alle anderen bekommen unendlich.
2
Kleinsten wählenUnter den unbesuchten Knoten wird der mit der kleinsten Distanz gewählt.
3
Nachbarn prüfenFür jeden Nachbarn wird getestet, ob der Weg über den aktuellen Knoten besser ist.
4
Fest markierenDer aktuelle Knoten ist fertig. Seine Distanz ändert sich nicht mehr.

2. Dijkstra animieren

Die Animation zeigt, welcher Knoten als Nächstes fest wird und wie sich die Distanzen ändern.

Start bei A. Klicke auf „Nächster Schritt“.

3. Distanz Tabelle

KnotenABCDEF
Distanz0
Vorgänger------

Gewichteter Graph

4 2 5 7 1 3 2 4 A B C D E F

In diesem Beispiel ist der kürzeste Weg von A nach F: A, C, B, D, F mit Gesamtkosten 11.