Türme von Hanoi in "Java ist auch eine Insel"

dickjustice

Mitglied
Hallo liebes Forum,

ich lese gerade das Buch "Java ist auch eine Insel" und bin auf ein Verständnisproblem gestoßen.
In dem Buch wird das bekannte mathematische Problem der Türme von Hanoi geschildert. Abgesehen davon, dass ich den Code noch nicht verstehe, der im Buch steht, habe ich ein grundsätzliches Problem.

Im Text des Buches steht, dass es 3 Säulen gibt und das Ziel darin besteht, alle Scheiben von Säule 1, der Kupfersäule, auf Säule 3, die Goldsäule, zu übertragen.

Nun spricht sowohl die "an die Tempeltür genagelte" Lösung des Mönchs als auch das Code-Beispiel mit nur 4 Säulen davon, dass der endgültige Turm auf der zweiten Säule gebaut wird. Ich weiß, dass es prinzipiell keinen unterschied machen würde, dennoch stört mich, dass zwei verschiedene Sachverhalte beschrieben werden, vorallem, weil es mir so schwer fällt, das Code-Beispiel nachzuvollziehen.
Abgesehen davon verstehe ich die Lösung des Mönchs nicht so ganz, weil ich finde, dass sie uneindeutig formuliert ist. die "andere Säule" ist wahrscheinlich die zweite Säule, aber wieso nennt man sie nicht eindeutig "zweite Säule"?
Ausserdem ist das Rätsel nach dem zweiten Punkt doch bereits zu Ende, was soll der dritte Stichpunkt noch bewirken?

Ich finde das alles insich etwas widersprüchlich. Könnte mir jemand helfen?

Ich benutze die online-Version des Buchs: Galileo Computing :: Java ist auch eine Insel - 2 Imperative Sprachkonzepte

Danke schonmal für eure Hilfe
 
Zuletzt bearbeitet:

minzee

Bekanntes Mitglied
Da hast dich irgendwie verlesen. Es gibt nur 3 Säulen. Aber in deinem Beispiel gibt es 4 Scheiben. Vielleicht hast die Scheiben mit den Säulen verwechselt.

Ist egal, wie du die Säulen nennst. In meinem Buch werden sie A, B und C genannt.
 

minzee

Bekanntes Mitglied
Und zum Verständnis:

Es gibt die Türme A, B und C.

Aufruf der Funktion.

Auf A befinden sich n = 4 Scheiben. Diese sollen zum Turm B wandern.

Vorgehensweise:

1) n - 1 Scheiben (also 3) vom Turm A zum Turm C (ist in diesem Fall der Hilfsturm)
2) 1 Scheibe vom Turm A (die verbliebene letzte Scheibe) zum Turm B (wo letztendlich alles landen soll)
3) n - 1 Scheiben (also 3) vom Turm C zum Turm B

Erster rekursiver Schritt (zu 1)):

Auf A befinden sich n = 3 Scheiben. Diese sollen zum Turm C wandern.

Vorgehensweise:

1.1) n - 1 Scheiben (also 2) vom Turm A zum Turm B (ist in diesem Fall der Hilfsturm)
1.2) 1 Scheibe vom Turm A (die verbliebene letzte Scheibe) zum Turm C (wo in diesem rekursiven Schritt alles landen soll)
1.3) n - 1 Scheiben (also 2) vom Turm B zum Turm C

Zweiter rekursiver Schritt (zu 1.1)):

Auf A befinden sich n = 2 Scheiben. Diese sollen zum Turm B wandern.

Vorgehensweise:

1.1.1) n - 1 Scheiben (also 1) vom Turm A zum Turm C (ist in diesem Fall der Hilfsturm)
1.1.2) 1 Scheibe vom Turm A (die verbliebene letzte Scheibe) zum Turm B (wo in diesem rekursiven Schritt alles landen soll)
1.1.3) n - 1 Scheiben (also 1) vom Turm C zum Turm B

Dritter rekursiver Schritt (zu 1.1.1)):

Auf A befinden sich n = 1 Scheiben. Diese sollen zum Turm C wandern.

Vorgehensweise: Scheibe vom Turm A zum Turm C

Vierter rekursiver Schritt (zu 3)):

Auf C befinden sich n = 3 Scheiben. Diese sollen zum Turm B wandern.

Vorgehensweise:

3.1) n - 1 Scheiben (also 2) vom Turm C zum Turm A (ist in diesem Fall der Hilfsturm)
3.2) 1 Scheibe vom Turm C (die verbliebene letzte Scheibe) zum Turm B (wo in diesem rekursiven Schritt alles landen soll)
3.3) n - 1 Scheiben (also 2) vom Turm A zum Turm B

Fünfter rekursiver Schritt (zu 3.1))

....

Erkennst du das Muster?

Man spannt hier einen binären Baum auf, der mittels inorder-Variante durchlaufen wird.
Code:
                            ABC
                           /   \
            ACB                             CBA
           /   \                           /   \           
    ABC             BCA             CAB             ABC
   /   \           /   \           /   \           /   \
ACB     CBY     BAC     ACB     CBA     BAC     ACB     CBA

z. B. ABC:

A: fromPeg
B: toPeg
C: usingPeg

Bewegt man sich im Baum nach links, werden toPeg und usingPeg vertauscht. Bewegt man sich im Baum nach rechts, werden fromPeg und usingPeg vertauscht.
 
Zuletzt bearbeitet:

minzee

Bekanntes Mitglied
Ich würde den Ablauf gerne grafisch etwas schöner gestalten. Ich habe schon mal eine erste Skizze:

Anhang anzeigen 6933

Die Linie soll den Ablauf zeigen. Von oben geht es zuerst in Richtung links unten.

Aber ihr seht sicher schon das Problem. Ich bekomme das nicht auf eine Seite. Die Grafik wird leider viel zu breit. Außerdem ist das alles total unübersichtlich.

Bei den Knoten (gilt nicht für die Blätter des Baums) soll man sehen, dass sich gewisse Abläufe immer wiederholen. Darum besteht jeder Knoten aus 3 Teilen: Die oberste Grafik zeigt den Zustand vom Weg von oben nach unten. Die unterste Grafik zeigt den Zustand vom Weg von unten zu diesem Knoten. Die mittlere Grafik zeigt den Zustand, nachdem eine Scheibe ihre Position gewechselt hat.

Diese mittlere Grafik muss unbedingt bei der oberen Grafik bleiben, damit man eben diesen immerwiederkehren Ablauf erkennt.

Wie kann ich denn dieses Bild so gestalten, dass es nicht so breit und übersichtlicher wird? :(
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
wuerg Türme von Hanoi Iterativ Java Basics - Anfänger-Themen 8
S Türme von Hanoi Java Basics - Anfänger-Themen 36
B Türme von Hanoi mit einer beliebigen aber gültigen Eingabe lösen Java Basics - Anfänger-Themen 5
S Rekursion Rückgabe - Türme von Hanoi Java Basics - Anfänger-Themen 16
K Türme von Hanoi - Rekursiv. Java Basics - Anfänger-Themen 1
C Türme von Hanoi - Anzhal der Züge Java Basics - Anfänger-Themen 1
D Türme von hanoi Java Basics - Anfänger-Themen 7
B Türme von Hanoi ausgabe Java Basics - Anfänger-Themen 2
shiroX OOP Türme von Hanoi - einfache grafische Ausgabe Java Basics - Anfänger-Themen 2
T Türme von Hanoi Java Basics - Anfänger-Themen 9
D > 3 Türme von Hanoi Java Basics - Anfänger-Themen 11
J Erste Schritte türme von hanoi verständnisprobleme Java Basics - Anfänger-Themen 6
B Türme von Hanoi - Iterator Java Basics - Anfänger-Themen 50
R Türme von Hanoi mit beliebiger Startposition Java Basics - Anfänger-Themen 5
G Verständnisproblem Türme von Hanoi Java Basics - Anfänger-Themen 4
X Türme von Hanoi - Iterativ Java Basics - Anfänger-Themen 8
B Türme von Hanoi: aktuelle Belegungszustände ausgeben? Java Basics - Anfänger-Themen 2
T Rekursiver Algorithmus: Türme von Hanoi Java Basics - Anfänger-Themen 8
H Quicksort und Rekursiv: Türme von Hanoi Java Basics - Anfänger-Themen 9
X Turm von Haoi - 4 Scheiben 4 Türme Java Basics - Anfänger-Themen 11
P Hanoi Java Basics - Anfänger-Themen 1
R Hanoi rekursiv lösen Problem Java Basics - Anfänger-Themen 1
E Hanoi-Varianten rekursiv Java Basics - Anfänger-Themen 2
P Hanoi rekursiv zu iterativ umbauen Java Basics - Anfänger-Themen 20
F Methoden Hanoi - Anzahl der Bewegungen Java Basics - Anfänger-Themen 8
kulturfenster Probleme mit Hanoi Java Basics - Anfänger-Themen 3
B Kann Quellcode von "Hanoi" nicht verstehen. Bitte Java Basics - Anfänger-Themen 4
kulturfenster Hanoi Java Basics - Anfänger-Themen 28
D Hanoi Java Basics - Anfänger-Themen 6
L Hanoi II : Rekursiviker gesucht Java Basics - Anfänger-Themen 22
W Methoden java map ersatz für c++map Java Basics - Anfänger-Themen 2
M Erste Schritte Java Primzahltester Java Basics - Anfänger-Themen 4
A csv Reader für Java? Java Basics - Anfänger-Themen 24
K Java - Enums Java Basics - Anfänger-Themen 30
tomzen Java Unterstützung für exel dateien installieren. Java Basics - Anfänger-Themen 2
Rookar java.lang.NoClassDefFoundError: org/json/JSONException Java Basics - Anfänger-Themen 2
Rookar Mit Button andere java öffnen Java Basics - Anfänger-Themen 4
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
I Backend in Java und Ansicht von Dateien in statische HTML Seiten? Java Basics - Anfänger-Themen 15
R Input/Output Verwendung des Euro-Zeichens in Java Java Basics - Anfänger-Themen 7
I Push Nachrichten von JAVA EE App an Mobile App Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben