Domande sparse e MdT senza traccia (SP)
Rispondi prima di leggere la spiegazione. I termini sottolineati offrono un aiuto rapido.
- a
Sia L un problema in PP. È noto un metodo per ridurre la probabilità di errore sotto una soglia prefissata in tempo polinomiale?
- b
Un problema risolubile con 1 nastro in tempo non può essere risolto in tempo con 1 nastro solo?
- c
Esistono linguaggi che sono accettati da MdT nondeterministiche ma non sono in RE?
- d
Dire se HAMILTON PATH può essere risolto in tempo con un algoritmo quantistico
- e
Esistono problemi risolubili nondeterministicamente in spazio che non sono risolubili deterministicamente in tempo ?
Programmare una MdT con oracolo che decide se un grafo ha un independent set di almeno K nodi, usando un oracolo per CLIQUE
| # | Stato | Legge₁ | Legge₂ | Nuovo stato | Scrive₁ | Mossa₁ | Scrive₂ | Mossa₂ | Commento | ||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 |
Prossima transizione (riga 1): δ(s, ▷, ▷) = (s, ▷, →, ▷, →) · supera l'inizio dei due nastri
La macchina deve decidere se un grafo ha un insieme di almeno nodi senza archi tra loro, usando un oracolo CLIQUE. Copia la matrice sul nastro di query invertendo 0 e 1, poi copia senza modificarlo e interroga l'oracolo. Basta una domanda: «il complemento ha una cricca di almeno nodi?».
Funziona perché un insieme indipendente in è una cricca nel grafo complemento , che tra nodi distinti ha un arco dove prima non c'era.
Nell'input scrivi la matrice di adiacenza con , tra gli elementi e ; tra le righe, poi : e in binario.
Per esempio, nel cammino in cui 2 è collegato sia a 1 sia a 3, i nodi 1 e 3 non sono collegati. Nel complemento formano una cricca, quindi con l'oracolo risponde sì. La diagonale non influenza il test, come spiegato sotto.
| Stato | letto₁ | letto₂ | nuovo stato | scritto₁, mossa₁ | scritto₂, mossa₂ | note |
|---|---|---|---|---|---|---|
| inverte il bit: c'è un arco in | ||||||
| inverte il bit: niente arco in | ||||||
| copia il separatore | ||||||
| copia il separatore | ||||||
| fine della matrice | ||||||
| copia senza cambiarlo | ||||||
| " ha una cricca di almeno nodi?" | ||||||
| c'è un independent set di almeno nodi | ||||||
| non c'è |
In tutti gli altri casi (per esempio se manca ":") rigetta. La macchina è verificata con un simulatore, usando un oracolo simulato, su tutti i grafi fino a 4 nodi e su tutte le soglie da 0 a 5.
Traccia per fasi sull'esempio:
fase nastro 1 (input) nastro 2 (query) stato
inverte la matrice ▷ 0,1,0;1,0,1;0,1,0 [:] 10 ▷ 1,0,1;0,1,0;1,0,1 [⊔] s → k
copia K ▷ 0,1,0;1,0,1;0,1,0:10 [⊔] ▷ 1,0,1;0,1,0;1,0,1:10 [⊔] k → q?
domanda "il complemento ha una cricca di 2 nodi?" sì, {1, 3} q? → qYES
fine yes
E la diagonale della matrice?
Invertendo tutte le celle, anche la diagonale passa da 0 a 1, come se ogni nodo fosse collegato a sé stesso. La risposta non cambia: una cricca chiede archi tra nodi distinti, quindi l'oracolo non guarda la diagonale (lo assumiamo, come è naturale). Per lasciarla a 0 bisognerebbe contare riga e colonna con due contatori in binario, cioè aggiungere stati senza nessuna idea nuova.
La macchina fa una passata sull'input e una sola domanda all'oracolo, quindi lavora in tempo polinomiale e INDEPENDENT SET sta in . Non sorprende, perché la traduzione "prendi il complemento del grafo" è la riduzione da INDEPENDENT SET a CLIQUE: qui la macchina la calcola e passa il risultato all'oracolo.
Eseguila passo per passo
Prossima transizione: δ(s, ▷, ▷) = (s, ▷, →, ▷, →)
Mostra il codice della soluzione
s ▷ ▷ -> s ▷ R ▷ R s 0 ⊔ -> s 0 R 1 R # inverte il bit: c'è un arco nel complemento s 1 ⊔ -> s 1 R 0 R # inverte il bit: niente arco nel complemento s , ⊔ -> s , R , R # copia il separatore s ; ⊔ -> s ; R ; R s : ⊔ -> k : R : R # fine della matrice k b ⊔ -> k b R b R # copia K senza cambiarlo k ⊔ ⊔ -> q? ⊔ S ⊔ S # "il complemento ha una cricca di almeno K nodi?" qYES ⊔ ⊔ -> yes ⊔ S ⊔ S # c'è un independent set di almeno K nodi qNO ⊔ ⊔ -> no ⊔ S ⊔ S # non c'è