Kami memiliki sejumlah item yang dapat diatur oleh pengguna akhir menjadi pesanan yang diinginkan. Set item tidak teratur, tetapi setiap item berisi kunci pengurutan yang dapat dimodifikasi.
Kami sedang mencari algoritme yang memungkinkan pembuatan kunci sortir baru untuk item yang ditambahkan atau dipindahkan menjadi item pertama, item terakhir, atau antara dua item. Kami berharap hanya perlu mengubah kunci sortir dari item yang dipindahkan.
Contoh algoritma adalah memiliki setiap kunci sortir menjadi angka floating point, dan ketika menempatkan item di antara dua item, atur kunci sortir menjadi rata-rata. Menempatkan item pertama atau terakhir akan mengambil nilai terluar + - 1.
Masalahnya di sini adalah bahwa presisi floating point dapat menyebabkan penyortiran gagal. Menggunakan dua bilangan bulat untuk merepresentasikan angka fraksional dapat membuat angka tersebut menjadi sangat besar sehingga mereka tidak dapat secara akurat diwakili dalam tipe numerik reguler (misalnya ketika mentransfer sebagai JSON). Kami tidak ingin menggunakan BigInts.
Apakah ada algoritma yang cocok untuk ini yang akan berfungsi, misalnya, menggunakan string, yang tidak akan terpengaruh oleh kekurangan ini?
Kami tidak mencari untuk mendukung sejumlah besar gerakan, tetapi algoritma yang dijelaskan di atas dapat gagal pada angka floating point presisi ganda setelah sekitar 50 gerakan.
A, B, C
- A, AA, B, C
- A, AA, AB, B, C
- A, AA, AAA, AAB, AAC, AB, AC, B, C
. Tentu saja, Anda mungkin ingin melonggarkan surat Anda lebih banyak sehingga string tidak tumbuh begitu cepat, tetapi itu bisa dilakukan.