J'ai quelques millions de valeurs 32 bits. Pour chaque valeur, je veux trouver toutes les autres valeurs dans une distance de 5 brouillage. Dans l'approche naïve, cela nécessite des comparaisons , que je veux éviter.
J'ai réalisé que si je traitais simplement ces valeurs 32 bits comme des entiers et triais la liste une fois, alors les valeurs qui ne différaient que dans les bits les moins significatifs se retrouvaient très proches les unes des autres. Cela me permet d'avoir une "fenêtre" ou une plage de nombres plus courte à l'intérieur de laquelle je peux effectuer des comparaisons par paires réelles pour la distance exacte de brouillage. Cependant, lorsque 2 valeurs varient uniquement dans les bits d'ordre supérieur, elles se retrouvent en dehors de cette "fenêtre" et apparaissent aux extrémités opposées de la liste triée. Par exemple
11010010101001110001111001010110
01010010101001110001111001010110
serait très éloigné, même si leur distance de hamming est 1. Puisque, la distance de hamming entre 2 valeurs est préservée lorsque les deux sont tournées, je me suis dit qu'en faisant 32 rotations à gauche puis en triant la liste à chaque fois, il est probable que 2 valeurs finira assez près dans la liste triée dans au moins l'un d'entre eux.
Bien que cette approche me donne de bons résultats, j'ai du mal à établir officiellement l'exactitude de cette approche.
Étant donné que je recherche des valeurs correspondantes ayant une distance de brouillage ou moins, ai-je vraiment besoin de faire toutes les rotations 32 bits? Par exemple, si et que la taille de ma fenêtre est de 1000, je dois le faire à des rotations de 24 bits maximum car même si le bit errant est apparu dans l'un des 8 bits d'ordre inférieur, les nombres résultants ne différeront pas de plus de 1000.