2016-04-01 9 views
1

Ich erstelle ein Buchungssystem, mit dem eine bestimmte Anzahl von Zimmern/Plätzen gebucht werden kann. Angenommen, ein Benutzer kann Sitzplätze/Räume buchen, die mit 1-100 nummeriert sind. Mein Dozent hat vorgeschlagen, dass ich einen Algorithmus verwende, der die Reservierungsnummern wirtschaftlich teilt, so dass die nicht verkauften Plätze auf ein Minimum beschränkt bleiben. Wenn zum Beispiel 10 Plätze zur Verfügung standen:Eine Art von Algorithmus zur Nummernvergabe

Benutzer 1 Bücher 4 Sitzplätze. Gegeben (Nr. 1-4). Benutzer 2 Bücher 1 Platz. Gegeben (Nr. 5). Benutzer 3 Bücher 4 Sitze. Gegeben (Nr. 6-9). Benutzer 2 bricht dann ab. Freimachen (Nr. 5). Benutzer 4 möchte dann 2 Plätze buchen, aber die einzigen verfügbaren Plätze sind 5 & 10 (nicht zusammen, also buchen sie nicht).

Mein Dozent sagte, ein gemeinsamer Algorithmus existiert für dieses Problem, konnte sich aber nicht an den Namen erinnern. Ich nehme an, es ist wie der Algorithmus für Daten auf einer Festplatte.

Irgendwelche Ideen? Vielen Dank.

+0

Die gleichen Algorithmen werden für die Implementierung von 'malloc()' und 'free()' in C verwendet. Sie verwenden häufig "freelists" - verknüpfte Listen von (Speicher-) Bereichen, die frei sind. Wenn eine neue Anfrage eingeht, wird die Freiliste nach einem Block durchsucht, der groß genug ist, um die Anfrage zu erfüllen; Es gibt verschiedene Kompromisse bei der Auswahl des Blocks (z. B. wähle den ersten, der passt, wähle den kleinsten, der passt, wähle den größten) und keine Richtlinie, die überall optimal ist. –

Antwort

1

Es gibt keinen Algorithmus, der Optimalität garantiert.

Nehmen Sie Ihr Beispiel. Um sicherzustellen, dass Sie das beste Setup erhalten, müssen Sie wissen, wer annulliert wird, um sicherzustellen, dass sie sich neben dem freien Speicherplatz befinden, sodass der freie Speicherplatz fortlaufend ist (und Sie mehr buchen können). Nur 2 Reservierungen können neben dem freien Speicherplatz sein. Wenn Sie nicht in die Zukunft schauen und sagen können, welche der 3 Buchungen nicht storniert wird, haben Sie die Chance, einen Fehler zu machen und keine optimale Zuteilung zu haben.

Sie können etwas ähnliches wie Allokationstechniken (malloc) versuchen, die versuchen, neue Buchung in den kleinsten verfügbaren Raum zu passen. Wenn Sie mehr Informationen über die Buchungen haben (Wahrscheinlichkeit, dass sie storniert werden), können Sie versuchen, klügere Entscheidungen zu treffen (wie doppelte Buchungen, wie bei den Fluggesellschaften). Gelingt dies nicht, können Sie immer noch mehr aus dem System herausquetschen, wenn Sie Buchungen neu zuordnen können (das macht der Java Garbage Collector bei einer großen Komprimierung).

Verwandte Themen