23 giugno 2020, versione 4
Rispondi prima di leggere la spiegazione. I termini sottolineati offrono un aiuto rapido.
- 1
Supponiamo che . Dire se è L-completo
- 2
È vero che CIRC SAT non è 4-EXP-completo?
- 3
Dire se
- 4
Dire se SCHÖNFINKEL-BERNAYS SAT è -completo
- 5
Dire se un problema risolubile in tempo da una MdT nondeterministica può essere risolto in tempo da una MdT deterministica con 1 nastro
- 6
Il controllo di soddisfacibilità di una formula logica del primo ordine è in coRE
- 7
È vero che CLIQUE non appartiene a ?
Programmare una MdT nondeterministica che controlla se una stringa non è palindroma in tempo
| # | 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 esistono due cifre simmetriche diverse, cioè . Con 2 nastri, scegli in modo nondeterministico una posizione dell'input e, per ogni cifra che salti, scrivi una tacca I sul secondo nastro: alla fine hai tacche. Ricorda nello stato la cifra scelta e raggiungi la fine dell'input, poi torna indietro di una cella per ogni tacca e confronta la cifra raggiunta con quella ricordata.
Un ramo accetta quando trova una differenza, e basta un ramo accettante per riconoscere una stringa non palindroma.
| Stato | letto₁ | letto₂ | nuovo stato | scritto₁, mossa₁ | scritto₂, mossa₂ | note |
|---|---|---|---|---|---|---|
| scelta 1: salta la cifra | ||||||
| scelta 2: confronta (ricordata nello stato) | ||||||
| nessuna cifra scelta | ||||||
| va in fondo | ||||||
| torna indietro su entrambi | ||||||
| consuma una tacca per passo | ||||||
| cifre simmetriche diverse | ||||||
| questo ramo rigetta |
Qui , quindi e corrispondono a 2 + 2 stati. La macchina accetta se almeno un ramo accetta, cioè se esiste una coppia di cifre simmetriche diverse; se è palindroma, tutti i rami rigettano.
Il ramo che sceglie la posizione fa passi: per arrivare alla cifra scelta, per arrivare in fondo, per tornare indietro consumando le tacche, più qualche passo di servizio. Ogni ramo si ferma quindi entro passi, cioè il "tempo " della traccia a meno di costanti, che per lo speedup lineare non contano.
Traccia passo passo del ramo che sceglie i = 3 su x = 100
stato nastro 1 nastro 2
s [▷] 1 0 0 [▷] parto
s ▷ [1] 0 0 ▷ [⊔] scelta 1: salto la cifra, scrivo una tacca
s ▷ 1 [0] 0 ▷ I [⊔] scelta 1: salto, seconda tacca
s ▷ 1 0 [0] ▷ I I [⊔] scelta 2: confronto questa (a = 0)
g0 ▷ 1 0 0 [⊔] ▷ I I [⊔] in fondo: torno indietro su entrambi
c0 ▷ 1 0 [0] ⊔ ▷ I [I] ⊔ consumo una tacca
c0 ▷ 1 [0] 0 ⊔ ▷ [I] I ⊔ consumo una tacca
c0 ▷ [1] 0 0 ⊔ [▷] I I ⊔ tacche finite: sono su x1 = 1, diverso da a = 0
yes
Il ramo che sceglie non scrive tacche: dal fondo torna indietro di una sola cella, si trova su , lo confronta con e accetta anche lui. Il ramo confronta la cifra centrale con se stessa e rigetta.
Eseguila passo per passo
Prossima transizione: δ(s, ▷, ▷) = (s, ▷, →, ▷, →)
Mostra il codice della soluzione
s ▷ ▷ -> s ▷ R ▷ R s 0 ⊔ -> s 0 R I R # scelta 1: salta la cifra 0 s 0 ⊔ -> g0 0 R ⊔ S # scelta 2: confronta la cifra 0 s 1 ⊔ -> s 1 R I R # scelta 1: salta la cifra 1 s 1 ⊔ -> g1 1 R ⊔ S # scelta 2: confronta la cifra 1 s ⊔ ⊔ -> no ⊔ S ⊔ S # nessuna cifra scelta g0 b ⊔ -> g0 b R ⊔ S # va in fondo g1 b ⊔ -> g1 b R ⊔ S g0 ⊔ ⊔ -> c0 ⊔ L ⊔ L # torna indietro su entrambi g1 ⊔ ⊔ -> c1 ⊔ L ⊔ L c0 b I -> c0 b L I L # consuma una tacca per passo c1 b I -> c1 b L I L c0 1 ▷ -> yes 1 S ▷ R # cifre simmetriche diverse c1 0 ▷ -> yes 0 S ▷ R c0 0 ▷ -> no 0 S ▷ R # questo ramo rigetta c1 1 ▷ -> no 1 S ▷ R