Birkaç milyon 32-bit değerim var. Her değer için 5'lik bir çekiçleme mesafesi içindeki diğer tüm değerleri bulmak istiyorum. Saf yaklaşımda, bu kaçınmak istediğim karşılaştırmaları gerektirir .
Bu 32 bit değerlere tamsayı olarak davranıp listeyi bir kez sıralarsam, o zaman sadece en az anlamlı bitlerde farklılık gösteren değerlerin birbirine çok yakın olduğunu fark ettim. Bu, daha kısa bir "pencere" veya tam çekiçleme mesafesi için gerçek çift karşılaştırmalar yapabileceğim bir sayı aralığına sahip olmamı sağlıyor. Bununla birlikte, 2 değer yalnızca daha yüksek sıra bitlerinde değiştiğinde, bu "pencere" dışında kalırlar ve sıralanan listenin karşı uçlarında görünürler. Örneğin
11010010101001110001111001010110
01010010101001110001111001010110
çekiçleme mesafesi 1 olmasına rağmen çok uzak olacaktır. Her ikisi de döndürüldüğünde 2 değer arasındaki çekiçleme mesafesi korunduğundan, 32 sola dönüş yaparak ve ardından listeyi her seferinde sıralayarak, muhtemelen 2 değerin bunlardan en az birinde sıralanan listede yeterince yakın sonuçlanır.
Her ne kadar bu yaklaşım bana iyi sonuçlar veriyor olsa da, bu yaklaşımın doğruluğunu resmi olarak belirlemeye çalışıyorum.
Darbe mesafesi veya daha az olan eşleşen değerleri aradığım göz önüne alındığında, gerçekten 32 bit dönüşlerin hepsini yapmam gerekir mi? Örneğin, ve pencere boyutum 1000 ise, maksimum 24 bit rotasyonda yapmam gerekir, çünkü kaçak bit 8 alt sıra bitinden birinde görünse bile, elde edilen sayılar 1000'den fazla değişmez.