hilbert

Aus ProgrammingWiki
Archivierte Version vom 2012-04-09T10:21:58+00:00. Aktuelle Version

Inhaltsverzeichnis

Hintergrund

Ein wirkliches Hotel verfügt über genau n, also endlich viele Zimmer, und bietet folglich Platz für höchstens n Gäste.

Dem sehr bekannten Mathematiker David Hilbert (23.01.1862-14.02.1943) verdanken wir die Geschichte von einem Hotel mit unendlich vielen Zimmern. Wie viele Gäste können in dem "unendlichen Hotel" untergebracht werden?

Die Zimmer des unendlichen Hotels werden fortlaufend durchnummeriert. Darüber hinaus verabreden wir, dass die Nummerierung mit der Zahl 0 beginnt. Zur Vereinfachung gehen wir hier davon aus, dass das Hotel ausschließlich über Einzelzimmer verfügt.

Arbeiten mit Streams

Um das Hilberthotel zu realisieren, ist es nötig, mit Streams zu arbeiten. In Scheme kann dies mit Hilfe der verzögerten Evaluation implementiert werden. Dafür ist es zunächst nötig, einige Grundfunktionen zur Verfügung zu stellen. Diese basieren auf dem Buch Programmierparadigmen Seite 63 ff.

Hilberthotel

Zunächst wird das Hilberthotel errichtet. Leere Zimmer werden mit "#f" gekennzeichnet.

Zeigt man sich die ersten 11 Zimmer an, so sieht man, dass bisher noch kein Gast eingezogen ist.

einzelne Gäste

Als erstes ziehen einzelne Gäste in das Hotel ein. Diesen wird eine feste Zimmernummer zugewiesen. Bei der Buchung wird überprüft, ob das gewünschte Zimmer frei ist, wenn nicht, wird ein Fehler ausgegeben.

Nachdem die ersten drei Gäste eingezogen sind, sieht die Zimmerbelegung folgendermaßen aus:

kleine Reisegruppe

Anschließend fährt ein Kleinbus mit acht Passagieren vor. Da immer freie Zimmer zur Verfügung stehen, wird der jedem Gast der Reihe nach das nächste freie Zimmer zugewiesen.

Die Passagiere des Kleinbusses treten in folgender Reihenfolge zum Check-In an:

Nach dem Bezug der Zimmer ergibt sich folgende Zimmerbelegung:


Hilbertbus

Als nächstes kommt ein weiterer Bus gefahren. Diesmal handelt es sich um einen Hilbertbus. Das heißt, dass dieser eine unendliche Menge von Passagieren befördert.

Wie das Hotel, ist der Bus auch als Stream realisiert. Das Verfahren zum Check-In verläuft analog der kleinen Reisegruppe: Jedem Gast wird der Reihe nach das nächste freie Zimmer zugewiesen.

Vor dem Check-In betrachten wir zunächst die Gäste:

Die Zimmerbelegung nach dem Check-In gestaltet sich wie folgt:

Es scheinen keine freien Zimmer mehr zu sein, doch da kommt noch ein Bus gefahren:

Um den neuen Gästen trotzdem ein Zimmer anbieten zu können, müssen die bisherigen Gäste umziehen. Dabei wechselt jeder Gast aus Zimmer n in das Zimmer mit der Nummer 2n. SOmit ist jedes zweite Zimmer wieder unbelegt.

Nach dem Umzug der bisherigen Gäste stehen wieder unendlich viele freie Zimmer zur Verfügung:

Nun können die neuen Gäste ihr Zimmer beziehen.

Sobald alle Gäste ihr Zimmer bezogen haben, ergibt sich nachfolgende Zimmerbelegung:

Hilbertbus-Konvoi

Macrohard macht Betriebsausflug mit folgenden Bussen (eine Zeile = 1 Bus):


Konvoi->Stream

Mathematische Hilfsfunktionen, um aus einen Stream von Hilbertbussen, einen einzelnen Stream von Hotelgästen zu definieren.

Passagiere treten in folgender Reihenfolge zum Check-In an:


Hotelgäste müssen umziehen, damit die ungeraden Zimmer frei werden. Danach beziehen die Konvoi-Gäste ihre Zimmer.

Zimmerbelegung nach Check-In:

Wer wohnt in Zimmer 234?