Tôi có một vài triệu giá trị 32 bit. Đối với mỗi giá trị, tôi muốn tìm tất cả các giá trị khác trong khoảng cách hãm là 5. Trong cách tiếp cận ngây thơ, điều này đòi hỏi so sánh , điều mà tôi muốn tránh.
Tôi nhận ra rằng nếu tôi chỉ coi các giá trị 32 bit này là số nguyên và sắp xếp danh sách một lần, thì các giá trị chỉ khác nhau ở các bit có ý nghĩa nhỏ nhất đã kết thúc rất gần nhau. Điều này cho phép tôi có một "cửa sổ" ngắn hơn hoặc một dãy số trong đó tôi có thể thực hiện các so sánh cặp thực tế cho khoảng cách hãm chính xác. Tuy nhiên, khi 2 giá trị chỉ khác nhau ở các bit thứ tự cao hơn, thì chúng sẽ nằm ngoài "cửa sổ" này và xuất hiện ở hai đầu đối diện của danh sách được sắp xếp. Ví dụ
11010010101001110001111001010110
01010010101001110001111001010110
sẽ cách nhau rất xa, mặc dù khoảng cách hãm của chúng là 1. Vì, khoảng cách hãm giữa 2 giá trị được giữ nguyên khi cả hai được xoay, tôi nhận ra rằng bằng cách thực hiện 32 lần xoay trái và sau đó sắp xếp danh sách mỗi lần, có khả năng là 2 giá trị sẽ kết thúc đủ gần trong danh sách được sắp xếp trong ít nhất một trong số họ.
Mặc dù phương pháp này mang lại cho tôi kết quả tốt, tôi đang đấu tranh để chính thức thiết lập tính đúng đắn của phương pháp này.
Cho rằng tôi đang tìm kiếm các giá trị khớp có khoảng cách hoặc ít hơn, tôi có thực sự cần phải thực hiện tất cả các phép quay 32 bit không? Ví dụ: nếu và kích thước cửa sổ của tôi là 1000, tôi cần thực hiện ở mức xoay tối đa 24 bit vì ngay cả khi bit đi lạc xuất hiện ở bất kỳ 8 bit thứ tự thấp hơn, các số kết quả sẽ không khác nhau hơn 1000.k = 1
A[i].close