Sortieren eines ungeordneten Stapels von Gegenständen in Schubladen mit minimalen Schubladenbewegungen


7

Vor einiger Zeit habe ich spät abends meine Wäsche gewaschen. Als ich meine Wäsche zurück in meinen Schlafsaal brachte, fing ich an, sie wegzulegen.

Mein Kleiderschrank ist wie folgt aufgebaut:

  • Meine Schubladen sind nach der Art der Kleidung kategorisiert, die sie tragen, und das ist mir sehr wichtig. Das heißt, ich kann keine T-Shirts in meine Hosenschublade stecken (sonst bin ich zu nervös, um zu schlafen). Natürlich kenne ich diese Kategorisierung und weiß, welche Schublade welche auch im Dunkeln ist.
  • Ich habe saubere Wäschestücke und vertikal angeordnete Schubladen (wobei die Schublade oben ).NMD0
  • Ich kann Schubladen nach öffnen und schließen, aber wenn Schublade geöffnet ist, kann ich keine Kleidung in Schublade legen (weil sie von blockiert wird ).DiDi+1Di
  • Alle meine Schubladen sind bereits geschlossen, als ich den Raum betrete.
  • Wenn ich fertig bin, muss ich alle offenen Schubladen schließen.

Rücksichtsvoller Herr, der ich bin, ich möchte meinen Mitbewohner nicht wecken (dies war ein Studentenwohnheim, also haben wir im selben Raum geschlafen). Ich beschloss, das Licht nicht einzuschalten und so wenig Lärm wie möglich zu machen.

Dies bedeutet, dass ich meine Wäsche unter folgenden Bedingungen weglegen muss:

  • Ich kann nicht in meinen Wäschesack sehen, daher weiß ich erst, was ich greife, wenn ich ihn herausziehe.
  • Das Öffnen und Schließen einer Schublade macht Geräusche. Das Herausziehen von Gegenständen aus meinem Wäschesack oder das tatsächliche Einlegen in die Schublade ist nicht möglich.
  • Ich kann immer nur ein Kleidungsstück weglegen. Ich kann mich nicht wie Kleidung falten und sie in Stapel legen (und diese Stapel dann weglegen), weil der Boden zu schmutzig ist und auf den Möbeln kein Platz in meiner Nähe ist.
  • Ich kann ein Kleidungsstück wieder in meine Tasche stecken und ein anderes herausnehmen, aber das, das ich als nächstes herausnehme, könnte das sein, das ich gerade wieder hineingelegt habe (denken Sie daran, ich habe keine Kontrolle darüber, was ich aus der Tasche ziehe).

Vor diesem Hintergrund habe ich drei Fragen:

  • Wie kann ich meine Wäsche weglegen, während ich die Schubladen so oft wie möglich öffne und schließe?
  • Hat jemand anderes an dieses Problem oder ähnliches gedacht?
  • Hat dieses Problem praktische Anwendungen?

Können Sie einen Gegenstand stillschweigend wieder in den Wäschesack stopfen und etwas anderes herausziehen, oder müssen Sie ihn als Stapel behandeln?
Kyle Jones

Ich habe das nie als mögliche Variable angesehen. Angenommen, ich kann einen Gegenstand zurücklegen und etwas anderes herausziehen (aber der Gegenstand, den ich wieder herausziehe, könnte der Gegenstand sein, den ich gerade wieder hineingelegt habe).
JesseTG

@KyleJones Mit dieser Strategie kann Jesse mit hoher Wahrscheinlichkeit keinen Schlaf bekommen.
Raphael

1
Natürlich gibt es mehrere praktische Antworten. 1) Tu es nicht, während dein Mitbewohner schläft. 2) Erstellen Sie einen sauberen Raum zum Vorsortieren und Falten. 3) Nach Art waschen. 4) Sortieren Sie nach einer Schublade im Waschraum, während Sie Gegenstände aus der Waschmaschine ziehen. (Holen Sie sich eine Tasche pro Schublade, wenn dort auch kein sauberer Platz ist.)
Raphael

1
Was die Informatikfrage betrifft: interessant. Es ist vor allem eine Übung in der Wahrscheinlichkeitstheorie, ich denke: es sei denn , Sie erhalten eine gewisse Kontrolle über das, was Sie als nächstes Element erhalten, Ihr Algorithmus hat wenig Arbeit mit.
Raphael

Antworten:


4

Wie wäre es mit folgendem:

  1. Geh durch deine Tasche; Falten und Stapeln von Elementen für die Schubladen und , , in / auf der Schublade (die Sie bei Bedarf öffnen).DiDi+1i2NDi

    Stellen Sie sicher, dass Sie die Elemente für oben haben. Das erfordert möglicherweise eine Neuordnung des Pfannkuchenstils , aber Sie scheinen sich über solche Vorgänge keine Sorgen zu machen.Di+1

    Beachten Sie, dass dafür immer genügend Platz vorhanden ist (zwei Schubladenhöhen), vorausgesetzt, die Schubladen sind ungefähr gleich und Ihre Kleidung passt so wie sie ist hinein.

  2. Für jede offene Schublade ,Di

    • nimm den Stapel für (und lege ihn gegebenenfalls in den Beutel),Di+1
    • schließe ,Di
    • öffne ,Di+1
    • lege den Stapel dort hinein und
    • schließe .Di+1

Dieser Algorithmus erfordert 2 Schubladenbewegungen, wenn alle Schubladen Kleidung erhalten, daher ist er im schlimmsten Fall optimal.2M

Es werden einige Bewegungen verschwendet, wenn es Elemente für aber nicht für ; Wenn nur ungerade Schubladen Gegenstände erhalten, führen wir doppelt so viele Schubladenbewegungen aus. Da dies das Schlimmste ist, was passieren kann, haben wir immer noch eine Annäherung.Di+1Di2


2
Eine gute Sache an diesem Algorithmus ist, dass er deterministisch ist. Sie müssen keine Würfel werfen, die Ihren Mitbewohner wecken könnten.
Raphael
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.