Il modello di calcolo a query
Quando modelliamo i calcoli in termini matematici, di solito abbiamo in mente il tipo di processo rappresentato dalla figura seguente, dove le informazioni vengono fornite come input, viene eseguito un calcolo e viene prodotto un output.
Sebbene sia vero che i computer che usiamo oggi ricevono continuamente input e producono output, interagendo essenzialmente sia con noi sia con altri computer in un modo che la figura non riflette, l'intenzione non è quella di rappresentare il funzionamento continuo dei computer. Piuttosto, si tratta di creare una semplice astrazione del calcolo, concentrandosi su attività computazionali isolate. Ad esempio, l'input potrebbe codificare un numero, un vettore, una matrice, un grafo, la descrizione di una molecola, o qualcosa di più complesso, mentre l'output codifica la soluzione al problema computazionale che abbiamo in mente.
Il punto chiave è che l'input viene fornito al calcolo, di solito sotto forma di stringa binaria, senza che nessuna sua parte sia nascosta.
Descrizione del modello​
Nel modello a query di calcolo, l'intero input non viene fornito al calcolo come nel modello più standard suggerito sopra. Piuttosto, l'input è reso disponibile sotto forma di funzione, a cui il calcolo accede effettuando delle query. In alternativa, possiamo vedere i calcoli nel modello a query come aventi accesso casuale ai bit (o a segmenti di bit) dell'input.
Spesso ci riferiamo all'input come fornito da un oracolo o scatola nera nel contesto del modello a query. Entrambi i termini suggeriscono che una descrizione completa dell'input è nascosta al calcolo, e l'unico modo per accedervi è fare domande. È come se stessimo consultando l'Oracolo di Delfi riguardo all'input: lei non ci dirà tutto ciò che sa, risponde solo a domande specifiche. Il termine scatola nera ha senso soprattutto quando pensiamo all'input come rappresentato da una funzione; non possiamo guardare dentro la funzione e capire come funziona, possiamo solo valutarla sugli argomenti che scegliamo.
In questa lezione lavoreremo esclusivamente con stringhe binarie, al contrario di stringhe contenenti simboli diversi, quindi scriviamo d'ora in poi per riferirci comodamente all'alfabeto binario. Prenderemo in considerazione diversi problemi computazionali, con alcuni semplici esempi descritti a breve, ma per tutti loro l'input sarà rappresentato da una funzione della forma
per due interi positivi e Naturalmente, potremmo scegliere un nome diverso al posto di ma useremo per tutta la lezione.
Dire che un calcolo fa una query significa che viene selezionata una stringa e poi la stringa viene resa disponibile al calcolo dall'oracolo. Il modo preciso in cui questo funziona per gli algoritmi quantistici verrà discusso a breve — dobbiamo assicurarci che sia possibile farlo con un'operazione quantistica unitaria che permetta di effettuare query in sovrapposizione — ma per ora possiamo pensarci intuitivamente ad alto livello.
Infine, il modo in cui misureremo l'efficienza degli algoritmi a query è semplice: conteremo il numero di query che richiedono. Questo è correlato al tempo necessario per eseguire un calcolo, ma non è esattamente la stessa cosa perché stiamo ignorando il tempo per le operazioni diverse dalle query, e stiamo anche trattando le query come se ciascuna avesse costo unitario. Possiamo tenere conto delle operazioni diverse dalle query se vogliamo (e questo a volte viene fatto), ma limitare la nostra attenzione solo al numero di query aiuta a mantenere le cose semplici.
Esempi di problemi a query​
Ecco alcuni semplici esempi di problemi a query.
-
OR. La funzione di input ha la forma (quindi per questo problema). Il compito è restituire se esiste una stringa per cui e restituire se non esiste tale stringa. Se pensiamo alla funzione come a una sequenza di bit a cui abbiamo accesso casuale, il problema è calcolare l'OR di questi bit.
-
Parità . La funzione di input ha di nuovo la forma Il compito è determinare se il numero di stringhe per cui è pari o dispari. Per essere precisi, l'output richiesto è se l'insieme ha un numero pari di elementi e se ne ha un numero dispari. Se pensiamo alla funzione come a una sequenza di bit a cui abbiamo accesso casuale, il problema è calcolare la parità (o OR esclusivo) di questi bit.
-
Minimo. La funzione di input ha la forma per qualsiasi scelta di interi positivi e L'output richiesto è la stringa che viene prima nell'ordinamento lessicografico (cioè, dizionario) di Se pensiamo alla funzione come a una sequenza di interi codificati come stringhe di lunghezza in notazione binaria a cui abbiamo accesso casuale, il problema è calcolare il minimo di questi interi.
Consideriamo anche problemi a query in cui abbiamo una promessa sull'input. Questo significa che ci viene data una qualche garanzia sull'input, e non siamo responsabili di ciò che accade quando questa garanzia non è rispettata. Un altro modo per descrivere questo tipo di problema è dire che alcune funzioni di input (quelle per cui la promessa non è soddisfatta) sono considerate input "don't care". Nessun requisito viene imposto agli algoritmi quando ricevono input "don't care".
Ecco un esempio di problema con una promessa:
- Ricerca unica. La funzione di input ha la forma ed è promesso che esiste esattamente una stringa per cui con per tutte le stringhe Il compito è trovare questa stringa unica
Tutti e quattro gli esempi appena descritti sono naturali, nel senso che sono facili da descrivere e possiamo immaginare una varietà di situazioni o contesti in cui potrebbero presentarsi.
Al contrario, alcuni problemi a query non sono affatto "naturali" in questo modo. In effetti, nello studio del modello a query, a volte ci imbattiamo in problemi molto complessi e altamente artificiosi in cui è difficile immaginare che qualcuno voglia mai effettivamente risolverli in pratica. Questo non significa però che i problemi non siano interessanti! Cose che potrebbero sembrare artificiose o innaturali all'inizio possono fornire indizi inaspettati o ispirare nuove idee. L'algoritmo quantistico di Shor per la fattorizzazione, ispirato dall'algoritmo di Simon, ne è un ottimo esempio. È anche una parte importante dello studio del modello a query cercare gli estremi, che possono far luce sia sui potenziali vantaggi sia sui limiti del calcolo quantistico.
gate a query​
Quando descriviamo i calcoli con circuiti, le query vengono effettuate tramite gate speciali chiamati gate a query.
Il modo più semplice per definire i gate a query per i circuiti booleani classici è semplicemente consentire loro di calcolare direttamente la funzione di input come suggerisce la figura seguente.
Quando viene creato un circuito booleano per un problema a query, la funzione di input viene acceduta tramite questi gate, e il numero di query che il circuito effettua è semplicemente il numero di gate a query presenti nel circuito. I fili di input del circuito booleano stesso vengono inizializzati a valori fissi, che devono essere considerati parte dell'algoritmo (al contrario degli input del problema).
Ad esempio, ecco un circuito booleano con gate a query classici che risolve il problema della parità descritto sopra per una funzione della forma :
Questo algoritmo effettua due query perché ci sono due gate a query. Il modo in cui funziona è che la funzione viene interrogata sui due possibili input, e e i risultati vengono inseriti in un circuito booleano che calcola lo XOR. (Questo particolare circuito è apparso come esempio di circuito booleano nella lezione Circuiti quantistici del corso Basi dell'informazione quantistica.)
Per i circuiti quantistici, questa definizione di gate a query non funziona, perché questi gate sarebbero non unitari per alcune scelte della funzione Quindi, quello che facciamo invece è definire gate a query unitari che operano come suggerisce questa figura sugli stati della base standard:
Qui, assumiamo che e siano stringhe arbitrarie. La notazione si riferisce all'OR esclusivo bit a bit di due stringhe, che in questo caso hanno lunghezza Ad esempio,
Intuitivamente, ciò che fa il gate (per qualsiasi funzione scelta) è fare l'eco della stringa di input superiore e applicare tramite XOR il valore della funzione sulla stringa di input inferiore che è un'operazione unitaria per ogni scelta della funzione In effetti, è un'operazione deterministica ed è il proprio inverso. Ciò implica che, come matrice, è sempre una matrice di permutazione, cioè una matrice con un singolo in ogni riga e in ogni colonna, con tutte le altre voci pari a Applicare una matrice di permutazione a un vettore semplicemente mescola le voci del vettore (da cui il termine matrice di permutazione), e quindi non cambia la norma euclidea di quel vettore — il che rivela che le matrici di permutazione sono sempre unitarie.
Va sottolineato che, quando analizziamo gli algoritmi a query semplicemente contando il numero di query che un algoritmo effettua, stiamo completamente ignorando la difficoltà di costruire fisicamente i gate a query — sia per le versioni classiche che quantistiche appena descritte. Intuitivamente, la costruzione dei gate a query fa parte della preparazione dell'input, non della ricerca di una soluzione.
Questo potrebbe sembrare irragionevole, ma dobbiamo tenere a mente che non stiamo cercando di descrivere il calcolo pratico né di tenere pienamente conto delle risorse necessarie. Piuttosto, stiamo definendo un modello teorico che aiuta a far luce sui potenziali vantaggi del calcolo quantistico. Diremo di più su questo punto nella lezione successiva a questa, quando volgeremo la nostra attenzione a un modello di calcolo più standard in cui gli input vengono forniti esplicitamente ai circuiti come stringhe binarie.