Penso che ahelwer
la risposta tocchi alcuni modi in cui pensiamo alla complessità degli algoritmi. Tuttavia, dato che non abbiamo letteralmente "oracoli" nel mondo reale che desideriamo interrogare, potresti chiederti perché dovremmo preoccuparci della complessità delle interrogazioni o dell'idea degli oracoli. Cercherò di dare una prospettiva su questo, e in particolare di descrivere come potresti provare a pensare ai modi per costruire un "oracolo di Deutsch-Josza" in un modo in cui non ti senti come se stessi barando.
(Come Norbert Schuch
sottolineato, per il problema di Deutsch, che è il caso elementare di Deutsch-Josza, non c'è molto spazio per le intuizioni, ma mi aspetto che la tua domanda sugli oracoli si applichi anche più in generale. Ecco di cosa parlerò qui.)
Un'intuizione sugli oracoli
Il concetto di oracolo è un modo per permetterci di semplificare il modo in cui parliamo di problemi computazionali.
L'applicazione originale del concetto di oracolo era di considerare ipoteticamente cosa potremmo fare se fossimo in grado di risolvere problemi difficili, anche impossibili, senza impegnarci a come potremmo farlo anche in linea di principio. Ma nella complessità computazionale in questi giorni - in particolare nel calcolo quantistico, ad esempio nei casi di Deutsch – Josza, Bernstein – Vazirani e altri problemi dell'oracolo - la situazione è diversa: l'oracolo descrive una funzione che è alla base del problema. Il fatto che sia "un oracolo" è un modo per strutturare il modo in cui descriviamo la funzione che è al centro del problema: non che non dobbiamo mai contemplare come viene calcolata la funzione, ma che queste informazioni semplicemente non sono fornite come parte del problema e che non ci occupiamo del tempo o di altre complessità associate a tale funzione.
Quando adottiamo questo approccio, possiamo effettivamente ottenere risposte relative a domande molto difficili nel calcolo. Per esempio, si può sapere che non sappiamo come dimostrare sia P ≠ NP o P = NP , ma che ci può mostrare che ci sono oracoli A tali che possiamo dimostrare che P A ≠ NP A . Ciò che l'oracolo A fa qui non aiuta un computer (più precisamente, una macchina di Turing deterministica o una macchina di Turing non deterministica) a risolvere un problema: rappresenta il problema che il computer deve risolvere. Il fatto che possiamo dimostrare in alcuni casi che P A ≠ NP A , non significa che P sia davvero diverso da NP : significa solo che l'uso del non determinismo è davvero una risorsa significativa per un modello di calcolo - ti consente di risolvere alcuni problemi in modo efficiente, e non c'è modo genericamente per simulare il non determinismo in modo efficiente su un computer deterministico. Quindi, se vuoi risolvere il problema relativo a ciò che A calcola, avresti assolutamente bisogno di alcune informazioni sulla struttura di qualsiasi funzione che potrebbe calcolare A in modo efficiente .
Questa è una delle cose principali che riguardano gli oracoli: ti permettono di parlare dei modi in cui i modelli di calcolo possono o non possono risolvere i problemi, quando ti vengono fornite informazioni limitate sul problema.
Utilizzo di algoritmi oracle per risolvere problemi non oracle
L'algoritmo Deutsch – Josza o l'algoritmo Bernstein – Vazirani, in linea di principio, non sono algoritmi che uno esegue per il proprio interesse. (Beh, non proprio - vedi la prossima sezione.) Rappresentano i modi in cui puoi risolvere un problema . Quali problemi risolvono? Ti consentono di scoprire alcune caratteristiche di una funzione che ti interessa, sia essa costante / bilanciata, o quale vettore è associato in una funzione lineare con valori scalari sui vettori.
Su quali funzioni le esegui? - Li esegui su qualsiasi funzione per la quale sei interessato alla risposta.
La descrizione di questi come algoritmi basati su Oracle è accanto al punto. I problemi dell'oracolo consentono sostanzialmente di sapere che, con un computer quantistico ideale, è possibile risolvere il problema anche se si conosce molto poco della funzione , a condizione che si possa effettivamente valutare la funzione in modo efficace nella pratica. Per valutare effettivamente una tale funzione, ovviamente avrai bisogno di una descrizione di come farlo, e quindi hai più informazioni che nell'impostazione dell'oracolo; ma ciò non ti impedisce di utilizzare lo stesso algoritmo.
Ciò che accade quando si hanno più informazioni rispetto all'impostazione dell'oracolo, è che improvvisamente ci sono altri modi in cui si potrebbe essere in grado di risolvere il problema. In particolare, potrebbe diventare possibile risolvere il problema in modo efficiente in modo classico . (Questa è la stessa osservazione di P A ≠ NP A : dimostra che ci sono problemi che sono in NP , che qualsiasi algoritmo deterministico efficiente richiederebbe almeno informazioni strutturali effettive per essere in grado di risolvere - in modo che quando si fornisce una descrizione di una funzione calcolabile in modo efficiente piuttosto che un "oracolo", è possibile che il problema si presentiP. ) Significa che l'algoritmo quantistico potrebbe non avere lo stesso vantaggio rispetto agli algoritmi classici nel risolvere il particolare problema che presenti - e in effetti potrebbe essere che l'approccio classico sia migliore (in particolare con i dispositivi che abbiamo al momento).
Alla fine, solo perché hai un algoritmo quantico per risolvere qualcosa, non significa che sia necessariamente il modo migliore per risolvere qualcosa. Questo è certamente vero per l'algoritmo Deutsch – Josza: anche nell'oracolo, l'uso della casualità è quasi altrettanto buono, ed è molto meglio dato che non abbiamo ancora grandi computer quantistici affidabili! Ma poi di nuovo ...
"Implementare" un oracolo
Lo scopo dell'implementazione dell'algoritmo Deutsch-Josza è lo stesso dell'implementazione di " Hello, World! " - non per risolvere un problema irrisolto urgente, ma per esercitarsi con uno strumento che ci si aspetta sarà utile per fare altre cose.
Per esercitarsi nella programmazione, dovresti sentirti assolutamente rilassato e a tuo agio con l' idea di implementare un oracolo e con l'idea del computer che sta valutando l'oracolo. In linea di principio, questo è il punto di ciò che vuoi fare. Anche se stai usando un emulatore classico, in cui il computer classico sta effettivamente valutando tutti i rami della sovrapposizione e quindi trova esplicitamente la risposta a un problema per far finta che si tratti di un computer quantistico che agisce in modo leggermente più circolare, quindi sia - stai esercitando su come utilizzare uno strumento che può essere utile per altre cose e che un giorno non verrà eseguito su un computer classico.
Quindi, come dovresti implementare il tuo oracolo?
(i) Se sei veramente impegnato nell'idea che stai solo facendo pratica, non devi fingere di fare qualcosa di magico. Trova qualsiasi modo per implementare la funzione oracolo, anche se è palesemente ovvio per l'osservatore casuale se il risultato è costante o equilibrato. Stai solo cercando di esercitarti a realizzare un algoritmo - non preoccuparti che qualcuno ti accusa di essere un impostore, che stai fingendo di curare il cancro ma in realtà stai giocando con Lego. Non si può mai eri finta di curare il cancro, e si sta giocando con il Lego per scelta deliberata. Abbraccialo e fallo.
f(x)=g(x,r)rg(x,r)xre dove non è ovvio come risolverlo in modo classico, non è banale.
g(x,r)=x⋅rx,r∈{0,1}ng(x,r)f(x)f(x)r≠0
È concepibile che la costruzione di cui sopra possa essere elaborata / offuscata in qualche modo, per ottenere una costruzione che è garantita per valutare una funzione costante o una funzione bilanciata, e dove quale di questi due si verifica non è ovvio o addirittura difficile - ma posso ' Non penso a come, al momento.
Ricorda che questo in realtà è molto difficile da fare, ma se riesci a vedere un modo per farlo, potrebbe essere molto utile: Bravyi, Gossett e Koening hanno fatto qualcosa del genere per il problema Bernstein – Vazirani, e questo gli ha permesso mostrare una piccola ma incondizionata separazione tra complessità quantistica e classica, che è stata una delle cose più interessanti che si sono verificate nella complessità quantistica negli ultimi anni.
TL; DR
Non preoccuparti del fatto che stai "valutando" un oracolo.
Se sudi per qualcosa, preoccupati solo che una descrizione effettiva della funzione potrebbe consentire di risolvere facilmente lo stesso problema senza un computer quantistico.
Se la tua motivazione è solo quella di esercitarti con la programmazione quantistica, non preoccuparti nemmeno di questo. Salva il tuo preoccupante per i problemi di Worthier, come il riscaldamento globale. Nel frattempo divertiti a giocare con Legos mentre costruisci qualcosa di più.