È {ww '| HamDist (w, w ')> 1} senza contesto?


13

Dopo aver letto la domanda recente "è il complemento di {www...} Context-free?" ; Ho ricordato un problema simile che non sono riuscito a confutare:

È L={www,w{0,1}|w|=|w|HamDist(w,w)>1} senza contesto?

Qui richiediamo che le due stringhe differiscano in almeno due posizioni (la distanza di Hamming deve essere maggiore di 1 ).

È privo di contesto se richiediamo che HamDist(w,w)1 (ovvero che le due stringhe devono essere semplicemente diverse).

Ho il sospetto che la lingua non sia senza contesto: se la interseciamo con il normale 0101010 otteniamo casi in cui un PDA dovrebbe "ricordare" due posizioni in ordine inverso dopo aver raggiunto la metà della stringa.

Aggiornamento: se interseciamo L con il normale R={0101010} otteniamo un linguaggio privo di contesto come mostrato da domotorp nella sua risposta; un LR leggermente più complesso con R={01010101010} (un altro 1 per "tenere traccia" di) suggerisce ancora che L non dovrebbe essere privo di contesto.


è in realtà più semplice, poiché sono esattamente le parole che non sono della forma w w (intersecate da R ). LRwwR
domotorp,

@domotorp: giusto! modificato in dispari fissi s (a meno che la tua risposta non possa essere adattata anche a { ( 0 1 0 ) k } , per eventuali dispari fissi k )1{(010)k}k
Marzio De Biasi

Un commento finale: non aiuta a iniziare con zero iniziali, poiché le lingue senza contesto sono chiuse per tutti i tipi di turni ciclici. Potresti semplicemente spingerli nello stack, contrassegnare l'ultimo con un simbolo speciale, fare il resto dell'algoritmo fingendo che lo stack inizi lì e alla fine lo svuoti. (Questo utilizza -transizioni, ma è anche facile che tali PDA siano equivalenti a quelli senza.)ϵ
domotorp

potrebbe essere più semplice pensare all'alfabeto {0,1,2} e considerare le stringhe con esattamente due 1 e due 2. Non è nella tua lingua se la distanza tra 1s e la distanza tra 2s sono entrambe n.
Kaveh

Risposte:


4

L'intersezione con R={0101010 parole di lunghezza pari } è senza contesto, perché un PDA può ricordare due posizioni, in un certo senso. In ogni caso, si deve prima vedere che cosa questo linguaggio L è. Il suo complemento è RL={0a10b10c10db=n/2c=n/2a+d=n/2} . Pertanto, L={0a10b10c10dbn/2cn/2a+dn/2} . Possiamo riscriverlo come L={0a10b10c10db>n/2c>n/2a+d>n/2b,c,a+d<n/2} .

I primi 3 casi possono essere facilmente verificati, così come il quarto.

b>n/2 : inizia a mettere nello stack fino al primo 1, quindi inizia a saltar fuori dallo stack fino a quando non è vuoto. Dopo che è vuoto, inizia nuovamente a mettere in pila fino a raggiungere il secondo 1. Da quel momento in poi fai scoppiare la pila.

c>n/2 : uguale.

a+d>n/2 : inizia a mettere nello stack fino al primo 1, quindi inizia a saltar fuori dallo stack fino a quando non è vuoto. Dopo che è vuoto, inizia nuovamente a mettere in pila fino a raggiungere il terzo 1. Da quel momento in poi fai scoppiare la pila.

b,c,a+d<n/2 : inizia a mettere nello stack fino al primo 1, quindi inizia a saltar fuori dallo stack fino a quando non è vuoto. Dopo che è vuoto, inizia nuovamente a mettere in pila fino a raggiungerea+n/2 (indovinato in modo non deterministico, da qualche parte tra il secondo e il terzo 1). Da quel momento in poi pop lo stack.


Grazie domotorp, sto leggendo la tua idea; Penso che sia { 0 a 1 0 b 1 0 c 0 c 1 0 d( n / 2 = a + b + c = c + d + 1 ) [ ( a = c ) ( c = d ) }RL{0a10b10c0c10d (n/2=a+b+c=c+d+1)[(a=c)(c=d)}(due 1s nella metà sinistra) uniscono il suo rovescio (due 1s nella metà destra). Quindi, come si ottiene ? b=n/2c=n/2a+d=n/2
Marzio De Biasi,

è che HamDist è al massimo 1 . Questo accade esattamente se due dei tre 1 corrispondono, ovvero uno è nella stessa posizione nel primo tempo, mentre l'altro è nel secondo tempo. Se questi due 1 sono il primo e il secondo 1, allora otteniamo b = n / 2 , se sono il secondo e il terzo 1, otteniamo c = n / 2 e se sono il primo e il terzo 1, otteniamo b + c = n / 2 , o equivalentemente, a + d = n / 2RL1b=n/2c=n/2b+c=n/2a+d=n/2(dove sto barando un po 'con qualche costante ). ±1
domotorp,

Questo risponde alla domanda completa?
Michaël Cadilhac,

@domotorp: ok ho capito, grazie! Un altro dubbio: da (che è ok) scrivi L R = { . . . b > n / 2 c > n / 2 b , c < n / 2 } ma è equivalente a: L RLR={...bn/2cn/2...}LR={...b>n/2c>n/2b,c<n/2}LR={...(b<n/2b>n/2)(c<n/2c>n/2)}a+d

@Michael: No. 
domotorp il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.