Algorithmen und Datenstrukturen

Werbung
Algorithmen und Datenstrukturen
Prof. Dr. Sibylle Schwarz
Westsächsische Hochschule Zwickau
Dr. Friedrichs-Ring 2a, RII 263
http://www.fh-zwickau.de/~sibsc/
[email protected]
SS 2013
1
Algorithmen – Beispiel ggT
(einfacher) Euklidischer Algorithmus zur Bestimmung des ggT
zweier natürlicher Zahlen
Algorithmus : Größter gemeinsamer Teiler
N
Eingabe : a ∈ , b ∈
Ausgabe : ggT(a, b)
N
solange a 6= b :
wenn a > b dann
a←a−b
sonst
b ←b−a
Rückgabe a
2
Algorithmus
I
endlich beschriebene
I
schrittweise ausgeführte
Arbeitsvorschrift
zur Lösung eines Berechnungsproblemes,
d.h. zur Transformation einer Eingabe in eine Ausgabe
3
Beispiele für Algorithmen
I
historisch (Mathematik):
I
I
I
I
I
im Alltag:
I
I
I
I
I
Euklidischer Algorithmus
Sieb des Erathostenes
schriftliche Addition, Multiplikation usw.
Gauß-Algorithmus
Suchen eines Wörterbucheintrages
Bauanleitung
Kochrezept
Orchester-Partitur
in der Informatik:
I
I
I
I
Programm-Quelltext
Programm-Ablaufplan, Struktogramm
Suchverfahren
Sortierverfahren
4
Algorithmen und Datenstrukturen
Informatik Wissenschaft von der Darstellung und
Verarbeitung symbolischer Information
Darstellung der Information als (strukturierte) Daten
Verarbeitung der Information durch Algorithmen
5
Abstraktionsstufen
Mathematik:
Implementierung:
Funktion
|
Algorithmus
|
Funktion, Methode
Abstrakter DT
|
(konkreter) DT
algebraische Struktur
|
Datenstruktur
|
Typ, Klasse
6
Einordnung in die Informatik
Teilgebiete der Informatik:
theoretisch
I
I
I
technisch
I
I
Formalismen zur Darstellung von Daten und
Algorithmen
Möglichkeiten und Grenzen
der Berechenbarkeit durch Algorithmen
Grundlagen für technische und praktische
(und angewandte) Informatik
maschinelle Darstellung von Information
Mittel zur Ausführung von Algorithmen
praktisch Modellierung (Datenstrukturen)
Entwurf von Algorithmen
Programmierung, Softwaretechnik
angewandt
I
I
Modellierung durch geeignete
Datenstrukturen
Anwendung von Algorithmen (z.B. Suchen,
Sortieren, . . . )
7
Inhalt der Lehrveranstaltung
I
Algorithmen
I Spezifikation
I Laufzeitabschätzungen
I rekursive Algorithmen
I Beispiele, z.B. Sortieralgorithmen
I
abstrakte Datentypen mit häufigen Operationen:
I Mengen
I Folgen
I Zuordnungen (Wörterbücher)
I Relationen
I
Datenstrukturen zu deren Realisierung:
I lineare Datenstrukturen
(Listen, Stack, Queue, Hash-Tabellen)
I hierarchische Datenstrukturen (Bäume, Heaps)
I Graphen
I
Algorithmen auf Graphen
I
Pattern-Matching-Algorithmen
8
Literatur
I
Cormen, Leiserson, Rivest, Stein:
Algorithmen - Eine Einführung (Oldenbourg, 2007)
I
Güting, Dieker:
Datenstrukturen und Algorithmen (Teubner, 2004)
I
Solymosi, Grude:
Grundkurs Algorithmen und Datenstrukturen : eine
Einführung in die praktische Informatik mit Java
(Vieweg, 2000)
I
Preiss:
Data Structures and Algorithms with Object-Oriented
Design Patterns in Java (Online-Version unter
http://www.brpreiss.com/books/opus5/)
9
Organisation
http://www.fh-zwickau.de/~sibsc/lehre/ss13/ad
Montag
11:20-12:50 in R304
Donnerstag Z1 15:05-16:35 in R308
Hausaufgaben I schriftliche Aufgaben
(Prüfungsvorbereitung)
I Vorbereitung des Praktikums (Entwurf)
I Autotool-Aufgaben
Übung für alle gemeinsam (Hörsaalübung)
Donnerstag Z1 9:35-11:05 in PBS 203
I Fragen zum Vorlesungsstoff
I Besprechung der schriftlichen
Übungsaufgaben
Praktika 2 Gruppen (Eintragen im Autotool):
Montag 9:35-11:05 in Pool 242 (14-tägig)
I (einige) Autotool-Aufgaben
I Programmieraufgaben (Implementierung)
Prüfung: Klausur ca. 60 min
(Hälfte von 120 min für Modul PTI621)
Vorlesung
10
Algorithmen in der Informatik
Algorithmus:
in Schritte geordnete Arbeitsvorschrift
I
endliche Beschreibung
I
eines schrittweise ausgeführten Verfahrens
I
in einer formalen Beschreibungssprache.
zur Ausführung eines Algorithmus ist nötig:
Akteur / Maschine, welche den Beschreibungsformalismus
interpretieren kann
11
Algorithmen – Eigenschaften
notwendige Eigenschaften:
endliche Beschreibung
schrittweise Ausführung
oft wird außerdem gefordert
(meist sinnvoll für auf Computer ausgeführten Algorithmen):
deterministischer Ablauf : bei wiederholter Ausführung mit
denselben Eingaben wird immer derselbe Ablauf
ausgeführt
terminierend (Endlichkeit der Ausführung):
Berechnungsvorschrift terminiert gdw. jede
Ausführung bei jeder erlaubten Eingabe nach
endlich vielen Schritten endet
determiniertes Ergebnis : bei wiederholter Ausführung mit
denselben Eingaben wird immer dieselbe
Ausgabe erzeugt
allgemeingültig : löst eine ganze Klasse von Aufgaben
12
Beispiele
Algorithmus : A1
Z
Eingabe : y ∈
Ausgabe : y − x
Wähle beliebige Zahl x ∈
y ←x +4
Algorithmus : A2
Eingabe : x ∈
Ausgabe : y
Z
Z
Algorithmus : A3
Eingabe : n ∈
Ausgabe : n
N
solange n > 1 :
wenn n ≡2 0 dann
n ← n/2
sonst
n ← 3n + 1
y ←1
solange x 6= 0 :
y ← yx
x ←x −1
Welche dieser Algorithmen sind deterministisch, terminierend, haben
determiniertes Ergebnis?
13
Algorithmen zur Lösung eines Berechnungsproblemes
Berechnungsproblem:
Transformation von Eingaben in Ausgaben
Anforderungen an Algorithmen zur Lösung eines speziellen
Berechnungsproblemes:
Korrektheit Algorithmus löst alle Instanzen des gegebenen
Problems (fehlerfrei):
bestimmt für jede Eingabe korrekte Ausgabe.
Berechenbarkeit Zu jeder Eingabe ist eine eindeutige Ausgabe
definiert und wird vom Algorithmus erzeugt.
Nicht alle formulierbaren Algorithmen sind
berechenbar.
(hängt vom Problem und der
Beschreibungssprache ab).
mehr dazu in LV Theoretische Informatik
Effizienz möglicht geringer Ressourcen-Verbrauch
(Speicherplatz, Laufzeit)
14
Algorithmen-Entwicklung
1. informale Aufgabenstellung
2. formale Spezifikation:
Was (welches Berechnungsproblem) soll gelöst werden?
exakte (formale) Beschreibung des Problemes:
I Eingabe des Algorithmus
I Ausgabe des Algorithmus
I Zusammenhang zwischen Ein- und Ausgabe
3. Entwurf des Algorithmus:
Wie soll es gelöst werden?
I formale Darstellung der Arbeitsschritte
I zu jedem Schritt:
I
I
I
Was wird getan? (Aktionen, Anweisungen)
Womit wird es getan? (Daten)
Wie geht es weiter? (nächster Schritt)
4. Verifikation:
Nachweis der Korrektheit des Algorithmenentwurfes
5. Realisierung (Implementierung)
15
Algorithmen – Spezifikation
Problemanalyse: Was soll gelöst werden?
Ausgangspunkt:
Ergebnis:
umgangssprachlich formulierte und oft
ungenaue Aufgabenbeschreibung
exakte und vollständige Definition des
Problemes
Spezifikation eines Berechnungsproblemes:
korrekte formale Beschreibung des Zusammenhanges
zwischen Eingaben und Ausgaben
Spezifikation eines Berechnungsproblemes enthält
Vorbedingung: Forderung an die Eingaben
Nachbedingung: Forderung an die Ausgaben
Instanz eines Berechnungsproblemes: spezielle Eingabe
16
Beispiel: Spezifikation des Sortier-Problems
informale Aufgabenstellung:
Entwurf eines Verfahrens, welches jede Folge (x1 , . . . , xn )
natürlicher Zahlen sortiert
formale Spezifikation dieses Sortier-Problemes:
Vorbedingung: Eingabe (x1 , x2 , . . . , xn ) mit
∀i ∈ {1, . . . , n} : xi ∈
N
Nachbedingung: Ausgabe (y1 , y2 , . . . , yn ) ist
1. y1 ≤ y2 ≤ · · · ≤ yn+1 (aufsteigend geordnet)
und
2. eine Permutation (Umordnung) der Eingabe
(x1 , x2 , . . . , xn )
Instanz dieses Sortier-Problemes: (34, 6, 72, 3, 4, 15)
17
Algorithmen – Korrektheit
“ . . . there are two ways of constructing a software design: One
way is to make it so simple that there are obviously no
deficiencies and the other way is to make it so complicated that
there are no obvious deficiencies. The first method is far more
difficult.”
Tony Hoare, 1980 ACM Turing Award Lecture
Ist der entworfene Algorithmus korrekt?
Erfüllt der entworfene Algorithmus die Spezifikation?
Verifikation: Nachweis, dass Entwurf die Spezifikation erfüllt
sicherer (aber mitunter aufwendiger) als Testen
Es gibt Verfahren / Systeme, die Verifikation automatisch
ausführen oder unterstützen.
mehr dazu im Master-Studium:
LV Spezifikations- und Verifikationsmethoden
18
Effizienz von Algorithmen
Aufwandsanalyse von Algorithmen
I
abhängig von der Größe der Instanz
I
unabhängig von konkreter Hardware
I
im
günstigsten Fall (best case)
ungünstigsten Fall (worst case)
Mittel (average case)
Abschätzungen von Resourcenbedarf bei Ausführung des
Algorithmus
Zeitaufwand: Anzahl elementarer Rechenschritte auf einem
idealisierten Rechnermodell (RAM)
Speicherplatzbedarf
19
Algorithmenentwurf
Algorithmus = in Schritte geordnete Arbeitsvorschrift
I
endliche Beschreibung
I
eines schrittweise von einem Aktuer ausgeführten
Verfahrens
I
in einer formalen Beschreibungssprache.
Ziele beim Entwurf von Algorithmen:
I
I
Korrektheit
geringer Ressourcenverbrauch
I
I
I
Laufzeit
Speicherplatz
sinnvoll strukturierte einfache formale Beschreibung
(z.B. kurzer, lesbarer Programmcode)
20
Beispiel – Summe der ersten n natürlichen Zahlen
informale Aufgabenstellung:
Addiere alle natürlichen Zahlen von 1 bis n.
Spezifikation:
Vorbedingung: Eingabe n ∈
NP
Nachbedingung: Ausgabe s =
n
i=1 i
Algorithmus : A1
Eingabe : n ∈
Ausgabe : s
N
s←0
für jedes i ← 1, . . . , n :
s ←s+i
Algorithmus : A2
Eingabe : n ∈
Ausgabe : s
N
s ← n(n + 1)/2
21
(Idealisiertes) Rechnermodell
Random-Access-Maschine (RAM)
I
I
unendlich viele Speicherzellen für je eine natürliche Zahl
(Alternative: Real-RAM für reelle Zahlen)
Befehle:
I
I
I
I
Laden
Speichern
Operationen (logisch, arithmetisch, Vergleiche)
Unterprogrammaufrufe
I
Ausführung jedes Befehles (elementare Anweisung,
Schritt) dauert (kostet) genau eine Einheit
I
sequentielle Ausführung aller Befehle
22
Laufzeitanalyse
Laufzeit eines Algorithmus auf der Eingabe x:
Anzahl der zur Ausführung des Algorithmus bei Eingabe x
benötigten Einheiten (Schritte)
Laufzeit T eines Algorithmus ist eine Funktion der Größe der
Eingabe x
Definition der Größe hängt vom Berechnungsproblem ab,
z.B. Länge einer zu sortierenden Liste,
Länge der Binärdarstellung zweier zu addierender Zahlen
worst-case Maximum der Laufzeiten des Algorithmus über
alle Eingaben
obere Schranke für die Laufzeit
best-case Minimum der Laufzeiten des Algorithmus über alle
Eingaben
untere Schranke für die Laufzeit
average-case Durchschnitt der Laufzeiten des Algorithmus
über alle Eingaben
23
Beispiel: Durchsuchen einer Folge
Spezifikation des Suchproblemes:
V: Eingaben x = (x1 , . . . , xn ), y
N: Ausgabe:
I Ja, falls ein i ∈ {1, . . . , n} mit xi = y existiert,
I sonst Nein
Algorithmus : Suche 1
Eingabe : (x1 , . . . , xn ), y
Ausgabe : gefunden
gefunden ← Nein
i ←1
solange i ≤ n :
wenn xi = y dann
gefunden ← Ja
i ←i +1
Laufzeit (Tafel)
24
Mathematische Grundlagen: Wachstumsklassen
präzise Laufzeitfunktion meist nicht relevant, nur die
Größenordnung des Wachstums
Ziel:
Abschätzung der Größenordnung der Wachstumsfunktion
durch Vergleich mit einfachen Funktionen
Abschätzungen des asymptotischen Wachstums gelten nur für
hinreichend große Werte
25
Wachstumsklassen
Funktionenklassen zu einer gegebenen Funktion g :
N R
N
N R
N
N R
N
N R
N
N → R≥0
O(g) = {f : → ≥0 | ∃n0 ∈ ∃c > 0∀n ≥ n0 : f (n) ≤ cg(n)}
f wächst höchstens so schnell wie g
(asymptotische obere Wachstumsschranke)
o(g) = {f : → ≥0 | ∃n0 ∈ ∃c > 0∀n ≥ n0 : f (n) < cg(n)}
f wächst langsamer als g
Ω(g) = {f : → ≥0 | ∃n0 ∈ ∃c > 0∀n ≥ n0 : 0 ≤ cg(n) ≤ f (n)}
f wächst mindestens so schnell wie g
(asymptotische untere Wachstumsschranke)
ω(g) = {f : → ≥0 | ∃n0 ∈ ∃c > 0∀n ≥ n0 : 0 ≤ cg(n) < f (n)}
f wächst schneller als g
Θ(g) = O(g) ∩ Ω(g)
(asymptotisch gleiches Wachstum)
Gilt genau dann, wenn f ∈ O(g) und g ∈ O(f )
26
Asymptotische obere Schranke
O(g) = {f :
N → R≥0 | ∃n0 ∈ N∃c > 0∀n ≥ n0 : f (n) ≤ cg(n)}
Beispiele:
I
3/2n2 + 3/2n + 2 ∈ O(n2 )
I
n ∈ O(n3 )
I
2n 6∈ O(n3 )
geeignete Abschätzung für worst-case-Analyse
27
Vereinfachungen in O-Notation
I
O(cf ) = O(f ), konstante Faktoren irrelevant
I
O(f + g) = max(O(f ), O(g)),
Summanden mit kleinerem Wachstum irrelevant,
z.B. Polynome kleineren Grades
I
O(loga n) = O(logb n)
28
Berechnung durch Grenzwerte
1000n5 − 5463524n4 + 13n3 + n2 ∈ O(n5 ) wegen
1000n5 − 5463524n4 + 13n3 + n2
n→∞
n5
5
1000n
= lim
= 1000 < ∞
n→∞
n5
lim
Beispiele:
I
O(n/2) = O(134n) = O(n + 5000) = O(n − 5000) =
O(17n − 5000) = O(n/5000) = O(n)
I
O(log n) ⊆ O(n) ⊆ O(n2 ) ⊆ O(2n )
29
Beispiele
I
n + 1000 ∈ O(n)
I
1000n ∈ O(n)
I
I
1000n ∈ O(n2 )
√
1000n 6∈ O( n)
I
1000n5 + 3524n2 ∈ O(n5 )
I
1000n5 + 3524n2 ∈ O(n6 )
I
n/1000 + 3524 ∈ O(n)
I
loga n ∈ O(logb n)
30
Wichtige Funktionenklassen
I
O(1) konstantes Wachstum
I
O(n) lineares Wachstum
I
O(n2 ) quadratisches Wachstum
I
O(n3 ) kubisches Wachstum
I
O(nk ) polynomielles Wachstum
I
O(log n) logarithmisches Wachstum
I
O(n log n)
I
O(log log n) doppelt logarithmisches Wachstum
I
O(2n ) exponentielles Wachstum
31
Laufzeitabschätzungen für Ablaufstrukturen
elementare Operationen A
(Zuweisung, Berechnung eines arithmetischen
Ausdruckes, Vergleich)
T (A) = 1 ∈ O(1)
sequentielle Verknüpfung (Nacheinanderausführung)
Algorithmus A = A_1; A_2
Laufzeit T (A) = T (A1 ) + T (A2 )
Verzweigung (Alternative)
Algorithmus A = if C then A_1 else A_2
Laufzeit
T (A) = max(T (A1 ), T (A2 )) ∈ O(T (A1 ) + T (A2 ))
Wiederholung (Schleife)
Algorithmus A = for i = 1 to n A_i
Laufzeit T (A) = T (A1 ) + T (A2 ) + . . . + T (An )
oft für jeden Durchlauf gleiche Laufzeit, dann
T (A) = nT (A1 )
32
Beispiel: Suche 2
Spezifikation des Suchproblemes:
V: Eingaben x = (x1 , . . . , xn ), y
N: Ausgabe:
I Ja, falls ein i ∈ {1, . . . , n} mit xi = y existiert,
I sonst Nein
Algorithmus : Suche 2
Eingabe : (x1 , . . . , xn ), y
Ausgabe : gefunden
gefunden ← Nein
i ←1
solange gefunden = Nein und i ≤ n :
wenn xi = y dann
gefunden ← Ja
i ←i +1
33
Laufzeiten
I
Suche 1
best falls y = x1 : T (n) ∈ O(n)
worst falls y nicht in x vorkommt: T (n) ∈ O(n)
average T (n) ∈ O(n)
I
Suche 2
best falls y = x1 : T (n) ∈ O(1)
worst falls y nicht in x vorkommt: T (n) ∈ O(n)
average T (n) ∈ O(n)
34
Beispiel Minimum-Suche
Spezifikation:
I
I
Eingabe x = (x1 , . . . , xn )
Ausgabe y mit
1. y ∈ {x1 , . . . , xn } und
2. ∀z ∈ {x1 , . . . , xn } : y ≤ z
Algorithmus : Minimum-Suche
Eingabe : (x1 , . . . , xn )
Ausgabe : y
y ← x1
für jedes i ← 2, . . . , n :
wenn y > xi dann
y ← xi
Laufzeit: O(n)
35
Beispiele – Laufzeiten
Für alle Algorithmen:
Eingabe : n
Ausgabe : s
Algorithmus : A
Algorithmus : B
k ← 52; s ← 5
für jedes i ← 1, . . . , n :
für jedes j ← 1, . . . , k :
s ← n + ij
k ← 52; s ← 5
für jedes i ← 1, . . . , n :
für jedes j ← 1, . . . , n :
s ← n + ij
Algorithmus : C
k ← 52; s ← 5
für jedes i ← 1, . . . , n :
für jedes j ← 1, . . . , i :
s ←i +j
T (A) ∈ 0(n)
T (B) ∈ 0(n2 )
T (C) ∈ 0(n2 )
36
Rekursive Algorithmen
Basisfall (Induktionsanfang): direkte Lösung
Rekursionsschritt (Induktionsschritt):
Funktionswert wird aus den Funktionswerten derselben
Funktion mit anderen (einfacheren) Argumenten berechnet
Beispiele:
I Fakultät
1
falls n = 0
n! =
n(n − 1)! sonst
I
I
I
Fibonacci-Funktion

falls n = 0
 0
1
falls n = 1
f (n) =

f (n − 1) + f (n − 2) sonst
I
Ackermann-Funktion

falls x = 0
 y +1
a(x − 1, 1)
falls y = 0 und x > 0
a(x, y ) =

a(x − 1, a(x, y − 1)) sonst
37
Laufzeit-Berechnung für n!
Algorithmus : fac
Eingabe : x
Ausgabe : y
Spezifikation:
V: x ∈
N
wenn x = 0 dann y ← 1
sonst y ← x fac(x − 1)
N: y = x!
T (n)
Rekurrenz T (0)
=
1
T (n)
=
T (n − 1) + 1
=
T (n − 1) + 1
=
(T (n − 2) + 1) + 1 = T (n − 2) + 2
=
T (n − 3) + 3
...
=
T (n − n) + n = T (0) + n = 1 + n
Laufzeit O(n)
38
Divide-and-Conquer-Verfahren
(teile und herrsche)
Idee: rekursive Zerlegung des Problemes in Teilprobleme
bis zum Basisfall
Grundprinzip:
Teilung des Problems P in n Teilprobleme Pi
Lösung aller Teilprobleme Pi (Rekursion)
Kombination der Lösungen der Teilprobleme Pi zu einer
Lösung des Problems P
(Baumstruktur)
39
Beispiel: Suche in geordneten Folgen
Spezifikation des Suchproblemes in geordneten Folgen:
V: Eingaben
I totale Ordnung (M, ≤),
I x = (x1 , . . . , xn ) ∈ M ∗ aufsteigend geordneten
(d.h. x1 ≤ x2 ≤ · · · ≤ xn )
I y ∈M
N: Ausgabe:
I Ja, falls ein i ∈ {1, . . . , n} mit xi = y existiert,
I sonst Nein
40
Algorithmus: Suche in geordneten Folgen
Algorithmus : Suche3
Eingabe : (x1 , . . . , xn ), y und l, r ∈ {1, . . . , n} (Bereichsgrenzen)
Ausgabe : gefunden
wenn l > r dann gefunden ← Nein
sonst
m ← b(l + r )/2c
wenn xm = y dann gefunden ← Ja
sonst
wenn xm < y dann Suche3(x, y , m + 1, r )
sonst Suche3(x, y , l, m − 1)
41
Laufzeit: Suche in sortierten Folgen
T (0) = T (1) = a
T (n) = T (bn/2c) + b
mit Konstanten a, b
für n = 2k , also k = log n:
T (n)
=
T (n/21 ) + b
=
T (n/22 ) + b + b
=
T (n/23 ) + 3b
...
=
T (n/2k ) + kb = T (n/n) + kb = a + k b = a + b log n
Laufzeit: O(log n)
42
Häufig vorkommende Rekurrenzen
T (n) = T (n − 1) + 1
T (n) = T (n − 1) + n
T (n) = T (n/2) + 1
T (n) = T (n/2) + n
T (n) = 2T (n/2) + 1
T (n) = 2T (n − 1) + 1
. . . = T (0) + n
. . . = T (0) + n2
. . . = T (0) + log n
. . . = T (0) + n log n
. . . = 2log n T (0) + 2log n log n
O(n)
O(n2 )
O(log n)
O(n log n)
O(n log n)
O(2n )
Allgemeines Verfahren zum Lösen von Rekurrenzen:
Master-Theorem
43
Klassisches Beispiel: Türme von Hanoi
I
Positionen A, B.C
I
n Scheiben {1, . . . , n} der Größen 1, . . . , n
I
Bedingung:
Scheibe i darf nur dann auf Scheibe j liegen, wenn i < j
zulässige Bewegungen (zusammen ein Zug):
I
I
I
Nimm die obere Scheibe i von Position x ∈ {A, B, C} und
Lege diese Scheibe i auf Position y ∈ {A, B, C}, sofern
damit auf Position y die Bedingung nicht verletzt wird
I
Startsituation:
Auf Position A ein Turm aus n (zulässig) gestapelten
Scheiben, Positionen B, C leer
I
Zielsituation:
Auf Position B ein Turm aus n (zulässig) gestapelten
Scheiben, Positionen A, C leer
gesucht: Folge von Schritten vom Start- zum Zielzustand
44
Türme von Hanoi: rekursiver Algorithmus
Verschiebe einen Hanoi-Turm der Höhe n von Position A zu
Position B, falls nötig, unter Verwendung der Position C:
Spezifikation:
V: (x : n, y : 0, z : 0), l = ()
N: (x : 0, y : n, z : 0),
l enthält die Folge aller Züge
(Start- und Zielposition der bewegten Scheibe)
Algorithmus Hanoi(x, y , z):
Basisfall: n = 0 (keine Bewegung)
Rekursionsschritt: 1. die oberen n − 1 Scheiben von Position
x zu Position z verschieben, falls nötig, unter
Verwendung der Position y (rekursiv),
2. Verschiebe die größte Scheibe von Position x
zu Position y ,
Zug (x → y ) an l anhängen
3. die n − 1 Scheiben von Position z zu Position
y verschieben, falls nötig, unter Verwendung
der Position x (rekursiv).
45
Herunterladen