Pesquisa no hash sensível à localidade

Estou tentando entender a seção 5. deeste papel sobre o LSH, em particular como fazer o bucket dos hashes gerados. Citando o artigo vinculado:

Dados vetores de bits consistindo em d bits cada, escolhemos N = O (n 1 / (1 + epsilon)) permutações aleatórias dos bits. Para cada permutação aleatória σ, mantemos uma ordem classificada O σ dos vetores de bits, em ordem lexicográfica dos bits permutados por σ. Dado um vetor de bits de consulta q, encontramos o vizinho mais próximo aproximado, fazendo o seguinte: Para cada permissão σ, realizamos uma pesquisa binária em O σ para localizar os dois vetores de bits mais próximos de q (na ordem lexicográfica obtida por bits permutados por σ). Agora, pesquisamos em cada uma das ordens classificadas O σ examinando os elementos acima e abaixo da posição retornada pela pesquisa binária na ordem do comprimento do prefixo mais longo que corresponde a q. Isso pode ser feito mantendo dois ponteiros para cada ordem classificada O σ (uma se move para cima e a outra para baixo). Em cada etapa, movemos um dos ponteiros para cima ou para baixo, correspondendo ao elemento com o prefixo correspondente mais longo. (Aqui, o comprimento do prefixo correspondente mais longo em O σ é calculado em relação a q com seus bits permutados por σ). Examinamos os vetores de 2N = O (n 1 / (1 + epsilon)) bit dessa maneira. De todos os vetores de bits examinados, retornamos o que tem a menor distância de Hamming para q.

Estou confuso com esse algoritmo e acho que não entendi como ele funciona.

Eu já encontreiessa questão no tópico, mas não entendi a resposta nos comentários. Também emesta pergunta no ponto 2, o mesmo algoritmo é descrito, mas novamente, eu não entendo como ele funciona.

Você pode, por favor, tentar me explicar como funciona passo a passo, tentando ser o mais simples possível?

Até tentei fazer uma lista de coisas que não entendo, mas na prática é tão ruim escrever que não entendo a maioria das frases!

EDITAR após a resposta do gsamaras:

Eu entendi a resposta principalmente, mas ainda tenho algumas dúvidas:

É correto dizer que o custo total da execução doN permutações éO(Nnlogn), já que temos que classificar cada um deles?

O processo de permutação + classificação descrito acima é realizado apenas uma vez durante o pré-processamento ou paracada inquerirq? Parece já bastante caroO(Nnlogn) mesmo no pré-processamento, se for necessário fazer isso no momento da consulta, é um desastre: D

No último ponto, onde comparamosv0 ev4 paraq, comparamos a versão permutada ou a original (antes da permutação)?

questionAnswers(1)

yourAnswerToTheQuestion