Abbiamo un numero di articoli che l'utente finale sarà in grado di organizzare in un ordine desiderato. L'insieme di elementi non è ordinato, ma ogni elemento contiene una chiave di ordinamento che può essere modificata.
Stiamo cercando un algoritmo che consenta di generare una nuova chiave di ordinamento per un elemento che viene aggiunto o spostato in modo che sia il primo, l'ultimo o tra due elementi. Speriamo di dover solo modificare la chiave di ordinamento dell'articolo da spostare.
Un algoritmo di esempio sarebbe avere ogni chiave di ordinamento come un numero in virgola mobile e quando si posiziona un elemento tra due elementi, impostare la chiave di ordinamento come media. Posizionare un oggetto per primo o per ultimo richiederebbe il valore più esterno + - 1.
Il problema qui è che la precisione in virgola mobile potrebbe causare errori nell'ordinamento. L'uso di due numeri interi per rappresentare un numero frazionario potrebbe similmente far sì che i numeri diventino così grandi da non poter essere rappresentati con precisione in normali tipi numerici (ad esempio quando si trasferisce come JSON). Non vorremmo usare BigInts.
Esiste un algoritmo adatto a questo che funzionerebbe, ad esempio, usando le stringhe, che non sarebbero interessate da queste carenze?
Non stiamo cercando di supportare un numero enorme di mosse, ma l'algoritmo sopra descritto potrebbe fallire su un numero in virgola mobile a precisione doppia dopo circa 50 mosse.
A, B, C
- A, AA, B, C
- A, AA, AB, B, C
- A, AA, AAA, AAB, AAC, AB, AC, B, C
. Naturalmente, probabilmente vorrai spaziare di più le tue lettere in modo che le stringhe non crescano così rapidamente, ma può essere fatto.