15 luglio 2024, prova 4
Rispondi prima di leggere la spiegazione. I termini sottolineati offrono un aiuto rapido.
- 1
Dire se
- 2
Dire se 3-COL è riducibile a GEOGRAPHY
- 3
Un problema risolubile in tempo da una MdT nondeterministica può essere risolto in tempo da una MdT deterministica con 1 nastro?
- 4
Dire se le risposte a test di soddisfacibilità di knowledge base SROIQ (OWL-2) ammettono disqualifiers succinti
- 5
Assumiamo che NL e PH coincidano. Dire se
- 6
Dire se
- 7
Dire se è una one-way function
Programmare una MdT che accetta le stringhe nel formato (l'ultima virgola è parte dell'input) con key diversa da tutti gli
| # | 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 accettare se la chiave è diversa da tutti gli elementi della lista. Usa 2 nastri: copia la chiave sul secondo e, prima di ogni confronto, riporta la testina all'inizio della copia. Se chiave ed elemento hanno gli stessi bit e finiscono insieme, rifiuta. Se trovi bit diversi o lunghezze diverse, passa all'elemento successivo; se la lista finisce senza corrispondenze, accetta.
L'input ha il formato key,el1,el2,…,eln,, con la virgola obbligatoria anche dopo l'ultimo elemento, come in 01,1,011,.
| Stato | letto₁ | letto₂ | nuovo stato | scritto₁, mossa₁ | scritto₂, mossa₂ | note |
|---|---|---|---|---|---|---|
| copia key | ||||||
| fine di key | ||||||
| riavvolge il 2° nastro | ||||||
| pronto a confrontare | ||||||
| qualsiasi | — | — | lista finita (dopo l'ultima virgola) | |||
| finora uguali | ||||||
| oppure | (uguale), | cifre diverse, o elemento più lungo di key | ||||
| elemento più corto: diverso | ||||||
| — | — | elemento uguale a key | ||||
| qualsiasi | (uguale), | salta il resto dell'elemento | ||||
| qualsiasi | (uguale), | passa al prossimo elemento |
Nel formato della traccia la tabella è corretta (verificata con il simulatore).
Traccia passo passo su 01,00,01,
stato nastro 1 nastro 2
s [▷] 0 1 , 0 0 , 0 1 , [▷]
c ▷ [0] 1 , 0 0 , 0 1 , ▷ [⊔] copio key
c ▷ 0 [1] , 0 0 , 0 1 , ▷ 0 [⊔]
c ▷ 0 1 [,] 0 0 , 0 1 , ▷ 0 1 [⊔] fine di key
r ▷ 0 1 , [0] 0 , 0 1 , ▷ 0 [1] ⊔ riavvolgo il nastro 2
r ▷ 0 1 , [0] 0 , 0 1 , ▷ [0] 1 ⊔
r ▷ 0 1 , [0] 0 , 0 1 , [▷] 0 1 ⊔
m ▷ 0 1 , [0] 0 , 0 1 , ▷ [0] 1 ⊔ 0 = 0
m ▷ 0 1 , 0 [0] , 0 1 , ▷ 0 [1] ⊔ 0 ≠ 1: elemento diverso
k ▷ 0 1 , 0 0 [,] 0 1 , ▷ 0 [1] ⊔ virgola: prossimo elemento
r ▷ 0 1 , 0 0 , [0] 1 , ▷ [0] 1 ⊔ riavvolgo
r ▷ 0 1 , 0 0 , [0] 1 , [▷] 0 1 ⊔
m ▷ 0 1 , 0 0 , [0] 1 , ▷ [0] 1 ⊔ 0 = 0
m ▷ 0 1 , 0 0 , 0 [1] , ▷ 0 [1] ⊔ 1 = 1
m ▷ 0 1 , 0 0 , 0 1 [,] ▷ 0 1 [⊔] finiscono insieme: uguale a key
no
Con 01,1,, invece, l'elemento 1 differisce da 01 già alla prima cifra: la macchina salta alla virgola, riavvolge e all'inizio del nuovo elemento trova , quindi accetta.
La variante senza virgola finale
Su input senza la virgola finale, come 0,0, l'ultimo elemento finisce con e la tabella sbaglia: accetta 0,0 e rigetta 0,1. Per quel formato, al posto della riga "lista finita" servono tre righe:
- : l'ultimo elemento è uguale a key;
- : l'ultimo elemento è più corto, quindi diverso;
- : l'ultimo elemento era diverso.
All'esame vale la tabella principale, perché la traccia dice che la virgola finale fa parte dell'input. In quel formato la variante sbaglia con key vuota: rigetta ,0,.
Come nelle soluzioni della dispensa, l'input si assume ben formato. Per controllare anche il formato, aggiungi uno stato , "inizio di un elemento": va in invece che in , il simbolo porta a yes solo da , e per il resto si comporta come . Così e su rigettano (verificato con il simulatore).
Eseguila passo per passo
Prossima transizione: δ(s, ▷, ▷) = (c, ▷, →, ▷, →)
Mostra il codice della soluzione
s ▷ ▷ -> c ▷ R ▷ R c b ⊔ -> c b R b R # copia key c , ⊔ -> r , R ⊔ L # fine di key r σ b -> r σ S b L # riavvolge il 2° nastro r σ ▷ -> m σ S ▷ R # pronto a confrontare m ⊔ σ -> yes ⊔ S σ S # lista finita (dopo l'ultima virgola) m b b -> m b R b R # finora uguali m b b̄ -> k b R b̄ S # cifre diverse m b ⊔ -> k b R ⊔ S # elemento più lungo di key m , b -> r , R b L # elemento più corto: diverso m , ⊔ -> no , S ⊔ S # elemento uguale a key k b σ -> k b R σ S # salta il resto dell'elemento k , σ -> r , R σ L # passa al prossimo elemento