O algoritmo de Grover é usado, entre outras coisas, para pesquisar um item em uma lista não ordenada de itens de comprimento . Embora haja muitas perguntas aqui sobre esse tópico, ainda não entendi o ponto.
Pesquisando em uma lista, da maneira clássica
Normalmente, eu projetaria uma função de pesquisa dessa maneira
Portanto, dou a lista e o item desejado como entradas e recebo a posição do item na lista como saída. Eu acho que entendi que as informações sobre \ mathbf {y} estão incorporadas no algoritmo através do oracle gate O , então nossa função se torna
\ mathrm {search} _ \ mathbf {y} ([\ mathbf {x} _1, \ mathbf {x} _2, ..., \ mathbf {x} _n]) = i \ in \ mathbb {N} \ quad \ text {tal que} \ mathbf {x} _i = \ mathbf {y}
Vamos fazer um exemplo prático. Considere pesquisar o ás de espadas 1 \ spadesuit
A lista de comprimento é .
O elemento desejado é . Eu deveria obter . Cada placa pode ser codificada com bits, a lista possui 8 elementos, portanto precisamos de 6 \ times 8 = 48 bits para codificar a lista. Nesse caso, o oráculo O implementará a função:
Entretanto, a entrada do algoritmo de Grover não é um estado de qubits.
(Nota: a imagem do baralho embaralhado é tirada daqui )
Grover e seu oráculo
Várias fontes (por exemplo, aqui - explicadas graficamente) dizem que a entrada do algoritmo é diferente: a entrada é um estado retirado do espaço de pesquisa onde é o número de elementos da lista. Cada número corresponde à posição de um elemento na lista.
A entrada de agora é um vetor de qubit , que deve ser uma superposição de todos os itens no espaço de pesquisa .
Nós sabemos
- corresponde a ;
- corresponde a ;
- corresponde a ;
- corresponde a que é o elemento desejado;
- e assim por diante...
Nesse caso, temos
Mas, neste caso, nosso oráculo teria que implementar a função
Construir o oráculo exige que saibamos que está na posição 5. Qual é o sentido de executar o algoritmo se já tivermos pesquisado o elemento para construir o oráculo?