hilbert
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
groooßer Hilbertbus kommt angefahren:
Zimmerbelegung nach Check-In:
Es scheinen keine freien Zimmer mehr zu sein, doch da kommt noch an bus gefahren:
Gäste müssen umziehen:
Zimmerbelegung nach Check-In:
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: