Wir haben eine Reihe von Artikeln, die der Endbenutzer in einer gewünschten Reihenfolge organisieren kann. Die Menge der Elemente ist ungeordnet, aber jedes Element enthält einen Sortierschlüssel, der geändert werden kann.
Wir suchen nach einem Algorithmus, mit dem ein neuer Sortierschlüssel für ein Element generiert werden kann, das hinzugefügt oder verschoben wird, um entweder das erste Element, das letzte Element oder zwischen zwei beliebigen Elementen zu sein. Wir hoffen, dass wir nur den Sortierschlüssel des zu verschiebenden Elements ändern müssen.
Ein Beispielalgorithmus wäre, dass jeder Sortierschlüssel eine Gleitkommazahl ist, und wenn Sie ein Element zwischen zwei Elementen platzieren, setzen Sie den Sortierschlüssel auf ihren Durchschnitt. Das erste oder letzte Platzieren eines Elements würde den äußersten Wert + - 1 annehmen.
Das Problem hierbei ist, dass die Gleitkommapräzision dazu führen kann, dass die Sortierung fehlschlägt. Die Verwendung von zwei Ganzzahlen zur Darstellung einer Bruchzahl könnte in ähnlicher Weise dazu führen, dass die Zahlen so groß werden, dass sie in regulären numerischen Typen nicht genau dargestellt werden können (z. B. bei der Übertragung als JSON). Wir würden BigInts nicht verwenden wollen.
Gibt es dafür einen geeigneten Algorithmus, der beispielsweise mit Strings funktioniert, die von diesen Mängeln nicht betroffen sind?
Wir möchten keine große Anzahl von Zügen unterstützen, aber der oben beschriebene Algorithmus könnte bei einer Gleitkommazahl mit doppelter Genauigkeit nach etwa 50 Zügen fehlschlagen.
A, B, C
- A, AA, B, C
- A, AA, AB, B, C
- A, AA, AAA, AAB, AAC, AB, AC, B, C
. Natürlich möchten Sie Ihre Buchstaben wahrscheinlich mehr platzieren, damit die Zeichenfolgen nicht so schnell wachsen, aber es kann getan werden.