エンドユーザーが目的の順序に整理できるアイテムがいくつかあります。アイテムのセットは順不同ですが、各アイテムには変更可能な並べ替えキーが含まれています。
最初のアイテム、最後のアイテム、または2つのアイテムの間に追加または移動されたアイテムの新しい並べ替えキーを生成できるアルゴリズムを探しています。移動するアイテムの並べ替えキーを変更するだけで済みます。
アルゴリズムの例としては、各ソートキーを浮動小数点数にして、2つのアイテムの間にアイテムを配置するときに、ソートキーをそれらの平均に設定します。アイテムを最初または最後に配置すると、最も外側の値+-1になります。
ここでの問題は、浮動小数点の精度が原因でソートが失敗する可能性があることです。同様に、2つの整数を使用して小数を表すと、数値が非常に大きくなり、通常の数値型で正確に表すことができなくなる場合があります(JSONとして転送する場合など)。BigIntsを使用したくありません。
これらの欠点の影響を受けない文字列を使用するなど、機能する適切なアルゴリズムはありますか?
膨大な数の移動をサポートするつもりはありませんが、上記のアルゴリズムは、約50回の移動後に倍精度浮動小数点数で失敗する可能性があります。
A, B, C
- - A, AA, B, C
- 。A, AA, AB, B, C
A, AA, AAA, AAB, AAC, AB, AC, B, C
もちろん、文字列の間隔が狭くなりすぎて文字列が急速に成長しないようにすることもできますが、可能です。