मेरे पास कुछ मिलियन 32-बिट मान हैं। प्रत्येक मूल्य के लिए, मैं 5. के एक हैमिंग दूरी के भीतर अन्य सभी मूल्यों को खोजना चाहता हूं भोले दृष्टिकोण में, इसके लिए तुलना की आवश्यकता होती है , जिससे मैं बचना चाहता हूं।
मुझे एहसास हुआ कि अगर मैंने इन 32-बिट मानों को पूर्णांक के रूप में माना और एक बार सूची को सॉर्ट किया, तो कम से कम महत्वपूर्ण बिट्स में भिन्न होने वाले मान एक साथ बहुत करीब समाप्त हो गए। यह मुझे एक छोटी "विंडो" या संख्याओं की सीमा प्रदान करने की अनुमति देता है जिसके भीतर मैं सटीक हैमिंग दूरी के लिए वास्तविक जोड़ी-वार तुलना कर सकता हूं। हालांकि, जब 2 मान केवल उच्च क्रम बिट्स में भिन्न होते हैं, तो वे इस "विंडो" के बाहर समाप्त होते हैं और क्रमबद्ध सूची के विपरीत छोरों में दिखाई देते हैं। उदाहरण के लिए
11010010101001110001111001010110
01010010101001110001111001010110
बहुत दूर होगा, भले ही उनकी बाधा दूरी 1 है। चूंकि, 2 मानों के बीच की बाधा दूरी तब संरक्षित की जाती है, जब दोनों को घुमाया जाता है, मुझे लगा कि हर बार 32 बाएं घूमते हैं और फिर हर बार सूची को छांटते हैं, यह संभावना है कि 2 मान कम से कम उनमें से एक में सॉर्ट की गई सूची में पर्याप्त रूप से समाप्त हो जाएगा।
हालांकि यह दृष्टिकोण मुझे अच्छे परिणाम दे रहा है, मैं इस दृष्टिकोण की शुद्धता को औपचारिक रूप से स्थापित करने के लिए संघर्ष कर रहा हूं।
यह देखते हुए कि मैं मेल खाने वाले मानों की तलाश कर रहा हूँ जिनकी दूरी या उससे कम है, क्या मुझे वास्तव में सभी 32 बिट रोटेशन करने की आवश्यकता है? उदाहरण के लिए यदि और मेरे विंडो का आकार 1000 है, तो मुझे अधिकतम 24 बिट रोटेशन करने की आवश्यकता है क्योंकि यहां तक कि अगर आवारा बिट 8 निम्न क्रम बिट्स में से किसी में भी दिखाई देता है, तो परिणामी संख्या 1000 से अधिक नहीं होगी।