Introdução :
O problema da colisão geralmente se refere à versão 2 para 1, descrita por Scott Aaronson em sua tese de doutorado. Dado que é mesmo e uma função f : { 1 , . . . , N } → { 1 , . . . , n } sabemos de antemão que f é 1 para 1 ou 2 para 1. Só é permitido fazer consultas sobre o valor de f ( i ) para qualquer i ∈ { 1 , 2 ,nf: { 1 , . . . , n } → { 1 , . . . , n }ff( I ) . O problema, então, pergunta quantas consultas nós precisamos fazer para determinar com certeza se f é de 1 para 1 ou 2-para-1.i ∈ { 1 , 2 , . . . , n }f
A solução da versão 2 para 1 deterministicamente requer consultas e, em geral, distinguir as funções r-1 para 1 das funções 1 para 1 exige n / r + 1 consultas.n / 2+ 1n / r+ 1
Solução clássica determinística :
Essa é uma aplicação direta do princípio do buraco de pombo: se uma função é r-para-1, depois de consultas, é garantido que encontramos uma colisão. Se uma função é 1 para 1, não existe colisão. Se tivermos azar, as consultas n / r poderão retornar respostas distintas. Portanto, n / r + 1 consultas são necessárias.n / r + 1n / rn / r + 1
Solução clássica aleatória :
Se permitirmos aleatoriedade, o problema é mais fácil. Pelo paradoxo do aniversário, se escolhermos consultas (distintas) aleatoriamente, com alta probabilidade, encontraremos uma colisão em qualquer função fixa de 2 para 1 após
consultas.Θ ( n--√)
Solução Quantum BHT :
Intuitivamente, o algoritmo combina a aceleração da raiz quadrada do paradoxo do
aniversário
usando aleatoriedade (clássica) com a aceleração da raiz quadrada do algoritmo de Grover (quantum).
Em primeiro lugar, entradas para f são seleccionados ao acaso e f é consultada em todos eles. Se houver uma colisão entre essas entradas, retornamos o par de entradas em colisão. Caso contrário, todas essas entradas são mapeadas para valores distintos por f . O algoritmo de Grover é usado para encontrar uma nova entrada para f que colide. Uma vez que existem apenas
n 2 / 3 desses insumos para f , o algoritmo de Grover pode encontrar um (se existir), tornando única
O ( √n1 / 3ffffn2 / 3fconsultas paraf.O ( n2 / 3----√) = O ( n1 / 3)f