Son kullanıcının istediği bir siparişte organize edebileceği birkaç öğemiz var. Öğe kümesi sıralanmamış, ancak her öğe değiştirilebilen bir sıralama anahtarı içeriyor.
Eklenen veya taşınan bir öğe için ilk öğe, son öğe veya herhangi iki öğe arasında yeni bir sıralama anahtarı oluşturulmasına izin verecek bir algoritma arıyoruz. Yalnızca taşınan öğenin sıralama anahtarını değiştirmek zorundayız.
Örnek bir algoritma, her bir sıralama anahtarının bir kayan nokta sayısı olması ve bir öğeyi iki öğe arasına yerleştirirken, sıralama anahtarını ortalama olarak ayarlamanızdır. Bir öğeyi ilk veya son yerleştirmek en dıştaki değeri + - 1 alır.
Buradaki sorun, kayan nokta hassasiyetinin sıralamanın başarısız olmasına neden olabilmesidir. Kesirli bir sayıyı temsil etmek için iki tamsayı kullanmak, sayıların o kadar büyük olmasını sağlayabilir ki, bunlar normal sayısal türlerde (örn. JSON olarak aktarılırken) doğru bir şekilde temsil edilemez. BigInts kullanmak istemezdik.
Bunun için, örneğin bu eksikliklerden etkilenmeyecek olan dizeleri kullanarak işe yarayacak uygun bir algoritma var mı?
Çok sayıda hamleyi desteklemiyoruz, ancak yukarıda açıklanan algoritma, yaklaşık 50 hamleden sonra çift kesinlikli kayar nokta sayısı üzerinde başarısız olabilir.
A, B, C
- A, AA, B, C
- A, AA, AB, B, C
- A, AA, AAA, AAB, AAC, AB, AC, B, C
. Tabii ki, muhtemelen harflerinizi daha fazla boşluk bırakmak istersiniz, böylece dizeler çok hızlı büyümez, ancak yapılabilir.