• Keine Ergebnisse gefunden

Die Türme von Hanoi

N/A
N/A
Protected

Academic year: 2021

Aktie "Die Türme von Hanoi"

Copied!
20
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

m a r c – o l i v e r p a h l

Die Türme von Hanoi

Die Lösungsfindung nach dem Prinzip der Rekursion wird noch einmal textuell und grafisch erläutert.

20.1.2004

(2)

2

m a r c – o l i v e r p a h l

Was sind die Tuerme von Hanoi ueberhaupt?

Die Türme von Hanoi sind ein klassisches Puzzle, meist als Spiel angesehen. Das Puzzle besteht aus einer Platte mit drei Pfählen. Auf einem der Pfähle sind runde Scheiben mit Loch in Pyramidenform aufgetürmt: stets kleinere auf größeren Scheiben.

Die Aufgabe des Puzzles ist es, den Turm auf einen der anderen Pfähle zu bewegen, allerdings unter den folgenden Einschränkungen:

– Es darf nur eine Scheibe auf einmal bewegt werden.

– Es darf nie eine größere Scheibe auf eine kleinere Scheibe gelegt werden.

[Quelle: Michael Sperber, Script zur Vorlesung im WS1999/ 2000, veröffentlicht als Herbert Klaeren, Michael Sperber: Vom Problem zum Programm. 3. Auflage. Teubner 2001]

(3)

3

m a r c – o l i v e r p a h l

Eine Loesungsstrategie

Eine mögliche Strategie zur Lösung des Puzzles ist folgende:

Falls der Turm die Höhe n hat, bewege den Turm der Höhe n-1 zunächst auf den dritten Pfahl. (Wie das zu machen ist, wird auf morgen verschoben.)

– Bewege die untere, größte Scheibe auf den Zielpfahl.

– Bewege den Turm der Höhe n-1 auf den Zielpfahl. (Wie das zu machen ist, wird auf morgen verschoben.)

Einen Tag später hat sich das Problem darauf reduziert, das Hanoi-Puzzle für n-1 Scheiben zu lösen, Das lässt sich wiederum auf das Puzzle für n-2 Scheiben reduzieren etc., bis schließlich das Problem nur noch für eine Scheibe zu lösen ist und damit trivial geworden ist.

[Quelle: (leicht geändert) Michael Sperber, Script zur Vorlesung im WS1999/ 2000, veröffentlicht als Herbert Klaeren, Michael Sperber: Vom Problem zum Programm. 3. Auflage. Teubner 2001]

(4)

4

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

Wollen

(5)

5

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

Nehmen wir an, wir könnten den Turm der Höhe n-1, also den oberen gelben Teil, bewegen. Was würden wir tun?

(6)

6

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

Den (n-1)-Turm auf den Hilfspfahl bewegen...

(7)

7

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

... und dann die unterste Scheibe.

Damit haben wir schon viel gewonnen, denn unser Problem, einen Turm der Höhe n zu bewegen, hat sich darauf reduziert, einen Turm der Höhe

n-1 zu bewegen...

(8)

8

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

Die ehemals unterste Scheibe können wir uns wegdenken.

Das neue Problem sieht so aus.

Wollen

(9)

9

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

Wir bewegen also den Turm der Höhe n-2 auf den Hilfspfahl...

(10)

10

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

Wir bewegen also den Turm der Höhe n-2 auf den Hilfspfahl...

...und dann die neue unterste, noch zu bewegende, Scheibe.

(11)

11

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

Die ehemals unterste Scheibe können wir uns wieder wegdenken.

Das neue Problem sieht jetzt so aus.

Wollen

(12)

12

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

Wir bewegen also den Turm der Höhe n-3 auf den Hilfspfahl...

...und dann die neue unterste, noch zu bewegende, Scheibe.

(13)

13

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

Die ehemals unterste Scheibe können wir uns wieder wegdenken.

Das neue Problem sieht jetzt so aus.

Wir lösen es wieder genau gleich...

Wollen

(14)

14

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

Die ehemals unterste Scheibe können wir uns wieder wegdenken.

Das neue Problem sieht jetzt so aus.

Wir lösen es wieder genau gleich...

Wollen

(15)

15

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

Die ehemals unterste Scheibe können wir uns wieder wegdenken.

Das neue Problem sieht jetzt so aus.

Wir lösen es wieder genau gleich...

Wollen

(16)

16

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

Die ehemals unterste Scheibe können wir uns wieder wegdenken.

Das neue Problem sieht jetzt so aus und das ist einfach ;)

Wollen

(17)

17

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

Wir bewegen die neue unterste, noch zu bewegende, Scheibe.

(18)

18

m a r c – o l i v e r p a h l

Wie sieht das grafisch aus?

FERTIG!

(19)

19

m a r c – o l i v e r p a h l

Wie sieht also der Code aus?

public void moveTower(int layers, int from, int via, int to) { if (layers > 1){

moveTower(layers-1, from, to, via); // Bewege den Turm der Höhe n-1

moveLayer(from, to); // Versetze die unterste Scheibe

moveTower(layers-1, via, from, to); // Löse das Problem für den Restturm

}else{

moveLayer(from, to); // Der einfachste Fall: nur noch eine Scheibe...

} }

(20)

20

m a r c – o l i v e r p a h l

Schlussbemerkung

Anmerkung:

Die Folien stellen nur wichtige Zwischenschritte dar.

Wenn Du das Beispiel einmal testest, indem Du Deine Lösung von Aufgabe 8.3 nimmst* und in der main-Methode (TowersOfHanoi.java) numberOfLayers

= 7 setzt, wirst Du feststellen, dass sehr viele Schritte geschehen.

Das ist klar, denn das Bewegen eines jeden der gelben Türme stellt genau wieder das Ausgangsproblem dar - will heißen, für jeden dieser Teiltürme müssen wir alle Überlegungen wieder treffen, um zu der Lösung zu kommen.

Bewege gelben Turm von links nach rechts zerfällt also in viele Schritte.

Dennoch hast Du alles verstanden, wenn Dir die Folien bis hier alle klar geworden sind, denn die fehlenden Schritte funktionieren genau gleich nur auf einer Teilmenge der Scheiben – das ist gerade das Prinzip der Rekursion...

* falls Du die Aufgabe nicht gelöst haben solltest, musst Du einfach den Code der vorhergehenden Folie in der HanoiModel-Klasse einbauen

Referenzen

ÄHNLICHE DOKUMENTE

er selbst seine Erinnerungen veröfEenthcht.) t)ber die Vorgeschichte des Eingreifens der Vereinigten Staaten (1915), über Hahnenkämpfe,.. über den (im Frühjahr 1931

• Der Verformungsbedarf kann mit vereinfachenden Annahmen (konstante Biegesteifigkeiten der elastischen Bereiche, starr-ideal plastische M-Q-Beziehungen der plastischen Gelenke)

Bei schiefwinkliger Bewehrung wird die Ermittlung der Fliessbedingungen mathematisch deutlich komplizierter. Für Regime 1 erhält

Für linear elastisches Materialverhalten können die Verzerrungen H x , H z und H 3 in den Viertelspunkten zwischen den Rissen über die Spannung im Beton und in der Bewehrung

Large Universal Shell Element Tester LUSET, ETH Zürich (2017).. spannungsfreie Risse mit variabler Richtung) Aufgebrachte..

Übung 1.10 Das Spiel ”Die Türme von Hanoi” besteht aus 3 Spielfeldern, auf denen n Scheiben paarweise verschiedener Grö- ße gestapelt werden können (siehe Abbildung 1.11).. Zu

– Zuerst muss der Rest auf die mittlere Säule verschoben werden. – Dann wird die untere Scheibe ins Ziel verschoben. – Und am Ende wird der Rest auch ins Ziel verschoben. 2a)

• Integer n = Anzahl Scheiben, die von Quell-Stange nach Ziel-Stange bewegt werden sollen (evtl.. Zachmann Grundlagen der Programmierung in C - WS 05/06