Introducción :
El problema de colisión se refiere con mayor frecuencia a la versión 2 a 1 que fue descrita por Scott Aaronson en su tesis doctoral. Dado que es par y una función f : { 1 , . . . , N } → { 1 , . . . , n } sabemos de antemano que f es 1 a 1 o 2 a 1. Solo se nos permite hacer consultas sobre el valor de f ( i ) para cualquier i ∈ { 1 , 2 ,nF: { 1 , ... , N } → { 1 , . . . , n }FF( i ) . El problema luego pregunta cuántas consultas debemos hacer para determinar con certeza si f es 1 a 1 o 2 a 1.i ∈ { 1 , 2 , . . . , n }F
Resolver la versión 2-a-1 de manera determinista requiere consultas, y en general distinguir las funciones r-a-1 de las funciones 1-a-1 requiere n / r + 1 consultas.n/2+1n/r+1
Solución determinista clásica :
Esta es una aplicación directa del principio de casillero: si una función es r-a-1, entonces después de consultas, se garantiza que hemos encontrado una colisión. Si una función es 1 a 1, entonces no existe colisión. Si no tenemos suerte, entonces las consultas n / r podrían devolver respuestas distintas. Por lo tanto, n / r + 1 consultas son necesarias.n/r+1n/rn/r+1
Solución clásica aleatorizada :
Si permitimos la aleatoriedad, el problema es más fácil. Según la paradoja del cumpleaños, si elegimos consultas (distintas) al azar, entonces con alta probabilidad encontramos una colisión en cualquier función fija 2 a 1 después de
consultas.Θ(n−−√)
Solución Quantum BHT :
Intuitivamente, el algoritmo combina la aceleración de la raíz cuadrada de la paradoja del
cumpleaños
usando aleatoriedad (clásica) con la aceleración de la raíz cuadrada del algoritmo de Grover (cuántico).
En primer lugar, entradas a f se seleccionan al azar y f se consulta a todos ellos. Si hay una colisión entre estas entradas, entonces devolvemos el par de entradas en colisión. De lo contrario, todas estas entradas se asignan a valores distintos por f . Luego, el algoritmo de Grover se usa para encontrar una nueva entrada para f que colisiona. Dado que sólo hay
n 2 / 3 tales entradas a f , el algoritmo de Grover puede encontrar uno (si existe) haciendo solamente
O ( √n1/3ffffn2/3fO(n2/3−−−−√)=O(n1/3)f