У нас есть ряд предметов, которые конечный пользователь сможет организовать в желаемом порядке. Набор элементов неупорядочен, но каждый элемент содержит ключ сортировки, который можно изменить.
Мы ищем алгоритм, который позволил бы генерировать новый ключ сортировки для элемента, который добавляется или перемещается в качестве первого элемента, последнего элемента или между любыми двумя элементами. Мы надеемся только изменить ключ сортировки перемещаемого элемента.
В качестве примера алгоритма каждый ключ сортировки должен иметь число с плавающей запятой, а при размещении элемента между двумя элементами установите ключ сортировки равным их среднему значению. Размещение элемента первым или последним будет иметь крайнее значение + - 1.
Проблема здесь в том, что точность с плавающей точкой может привести к сбою сортировки. Использование двух целых чисел для представления дробного числа может также привести к тому, что числа станут настолько большими, что их невозможно будет точно представить в обычных числовых типах (например, при передаче в формате JSON). Мы бы не хотели использовать BigInts.
Существует ли подходящий для этого алгоритм, который бы работал, например, с использованием строк, на которые эти недостатки не влияли бы?
Мы не стремимся поддерживать огромное количество ходов, но описанный выше алгоритм может дать сбой для числа с плавающей запятой двойной точности примерно через 50 ходов.
A, B, C
- A, AA, B, C
- A, AA, AB, B, C
- A, AA, AAA, AAB, AAC, AB, AC, B, C
. Конечно, вы, вероятно, захотите разместить буквы больше, чтобы строки не росли так быстро, но это можно сделать.