Tenemos una serie de elementos que el usuario final podrá organizar en el orden deseado. El conjunto de elementos no está ordenado, pero cada elemento contiene una clave de clasificación que se puede modificar.
Estamos buscando un algoritmo que permita generar una nueva clave de clasificación para un elemento que se agrega o mueve para ser el primer elemento, el último elemento o entre dos elementos. Esperamos tener que modificar la clave de clasificación del elemento que se está moviendo.
Un algoritmo de ejemplo sería hacer que cada clave de clasificación sea un número de coma flotante, y cuando coloque un elemento entre dos elementos, configure la clave de clasificación como su promedio. Colocar un elemento primero o último tomaría el valor más externo + - 1.
El problema aquí es que la precisión de coma flotante puede hacer que falle la clasificación. El uso de dos enteros para representar un número fraccionario podría hacer que los números se vuelvan tan grandes que no se puedan representar con precisión en tipos numéricos regulares (por ejemplo, cuando se transfieren como JSON). No nos gustaría usar BigInts.
¿Existe un algoritmo adecuado para esto que funcione, por ejemplo, usando cadenas, que no se verían afectadas por estas deficiencias?
No buscamos admitir grandes cantidades de movimientos, pero el algoritmo descrito anteriormente podría fallar en un número de coma flotante de doble precisión después de aproximadamente 50 movimientos.
A, B, C- A, AA, B, C- A, AA, AB, B, C- A, AA, AAA, AAB, AAC, AB, AC, B, C. Por supuesto, es probable que desee espaciar más sus letras para que las cadenas no crezcan tan rápido, pero se puede hacer.