Certamente! Imagine que você tem K=2k cópias do oráculo de pesquisa US que você pode usar. Normalmente, você pesquisar por iteração a ação
H⊗n(In−2|0⟩⟨0|⊗n)H⊗nUS,
a partir de um estado inicial (H|0⟩)⊗n . Isso leva tempo Θ(N−−√). (Estou usandoInpara denotar amatriz de identidade2n×2n.)
Pode-se substituir este com 2k cópias paralelas, cada um indexado por um x ∈ { 0 , 1 }k , usando
( Euk⊗ H⊗ ( n - k )) Ik⊗ ( eun - k- 2 | 0 ⟩ ⟨ 0 |⊗ ( n - k )) ( Ik⊗ H⊗ ( n - k )) US
e a partir de um estado| x⟩(H| 0⟩ )⊗ ( n - k )
O tempo necessário para executar estes seria reduzida aO ( N/ K----√), ao custo de exigirKvezes mais espaço.
Em um sentido de escala, pode-se considerar isso um resultado irrelevante. Se você possui um número fixo de oráculos, K , obtém um número fixo ( K--√ ) melhoria (assim como, se você tiverKnúcleos clássicos paralelos, a melhor melhoria possível é um fator deK), e isso não altera a escala. Mas isso muda o tempo de execução fundamental. Sabemos que o algoritmo de Grover é exatamente ideal. Leva o tempo mínimo absoluto possível com um único oráculo. Então, sabendo que você recebe umK--√ melhoria no tempo é útil no que diz respeito a esse valor de referência de um tempo específico em execução em um valor específico deN.
mas se você fizer isso, a comparação com a performance clássica perde parte de seu significado, não é? Afinal, você também pode acelerar a pesquisa clássica executando a operação que verifica se um determinado é o alvo em paralelo em todas as entradas. Isso claramente requer suposições adicionais sobre os recursos disponíveis, mas o mesmo tipo de suposição que é feito em seu argumentox
glS 25/10/1918
11
vai para o infinito, mas K não. Seu problema aumenta, mas seus recursos permanecem poucos. NK
AHusain
11
Esta resposta está correta (embora possa não ser a ideal, como o DaftWullie adverte). Este é o mesmo atestado à paralelização que se observa na complexidade clássica dos circuitos. Se você deseja uma aceleração devido à paralelização, analisa a profundidade do circuito (porque a coordenação de vários processos não reduzirá o trabalho total). Não importa se é constante - ou você está interessado na melhoria da profundidade da paralelização ou não. Como na computação quântica, apenas jogar mais computadores em um problema não magicamente torna tudo rápido! K
Niel de Beaudrap 26/10/19
3
De certa forma, se estivéssemos fazendo isso em paralelo em diferentes nós, você economizaria tempo para executar. Mas se falamos de complexidade (é o que geralmente chamamos de aceleração), precisamos de um pouco de análise.
Você concorda que precisamos sobre N--√ operações para o caso não paralelo. Digamos que temos dois nós e separamos a lista de N elementos em duas listas de tamanhoN1 1, N2. A pesquisa nas sub-listas leva cerca deN1 1---√, N2---√ .
No entanto, temos que
N--√= N1 1+ N2-------√≤ N1 1---√+ N2---√
E você ainda precisaria verificar qual saída entre o que é retornado pelos processos paralelos é a que você procura. Ele adiciona uma constante na complexidade, de modo que geralmente a ocultamos na notação O
No entanto, isso ainda seria interessante, especialmente se tivermos que agrupar o hardware, porque somos limitados em número de qubits ou outras limitações.
Para N1 = N2 é ainda uma desigualdade: sqrt (2) * sqrt (N1) <2 * sqrt (N1)
Mariia Mykhailova
Ah, de fato. Na minha cabeça $ \ sqrt {a b} = \ sqrt {a} \ sqrt {b} $ pensei. Eu deveria parar de responder aqui à meia-noite e quando estiver cansado. Obrigado por apontar isso.
Cnada
3
@cnada: Existem pelo menos duas noções diferentes de complexidade, ambas relevantes para acelerar. Um é a complexidade do tamanho e o outro é a complexidade profunda A menos que especificado de outra forma, geralmente preferimos considerar a complexidade do tamanho, mas a profundidade ainda é algo que interessa muito à complexidade computacional quântica, por exemplo, no MBQC [arXiv: quant-ph / 0301052 , arXiv: 0704.1736 ] e resultados recentes em separações incondicionais de profundidade [arXiv: 1704.00690 ].
Niel de Beaudrap 25/10/19
@NieldeBeaudrap Eu pensei que as pessoas olham mais profundamente na complexidade. Mas para Grover, o tamanho e a complexidade da profundidade são da mesma ordem. Isso é quadrático no tamanho do problema (geralmente visto como o tamanho de uma lista de N elementos). Você acha que minha abordagem aqui não está certa?
Cnada
2
Você não está dizendo nada de errado , estou apenas apontando que você está enfatizando indevidamente a complexidade do tamanho e não está realmente trabalhando no benefício da complexidade profunda. Não acontece muita coisa interessante se você apenas fizer processos paralelos de Grover, mas, como sugere a resposta de DaftWullie (e considerando o pós-processamento clássico), a complexidade da profundidade vai de √k ∈ O ( 1 ) paralogaritmo(k) √N--√ parak(N)∈Ω(1)processos paralelos de Grover, que é uma melhoria por um fator de √registro(k)N/k−−−−√k(N)∈Ω(1) (o fator de log vem da identificação de qual processo, se houver, encontrou uma solução). k−−√/log(k)
De certa forma, se estivéssemos fazendo isso em paralelo em diferentes nós, você economizaria tempo para executar. Mas se falamos de complexidade (é o que geralmente chamamos de aceleração), precisamos de um pouco de análise.
Você concorda que precisamos sobreN--√ operações para o caso não paralelo. Digamos que temos dois nós e separamos a lista de N elementos em duas listas de tamanhoN1 1, N2 . A pesquisa nas sub-listas leva cerca deN1 1---√, N2---√ .
No entanto, temos queN--√= N1 1+ N2-------√≤ N1 1---√+ N2---√
E você ainda precisaria verificar qual saída entre o que é retornado pelos processos paralelos é a que você procura. Ele adiciona uma constante na complexidade, de modo que geralmente a ocultamos na notaçãoO
No entanto, isso ainda seria interessante, especialmente se tivermos que agrupar o hardware, porque somos limitados em número de qubits ou outras limitações.
fonte