La lingua delle parole che contiene lo stesso numero di 001 e 100 è regolare?


14

Mi chiedevo quando le lingue che contenevano lo stesso numero di istanze di due sottostringhe fossero regolari. So che la lingua che contiene lo stesso numero di 1 e 0 non è regolare, ma è una lingua come , dove L = { w numero di istanze della sottostringa "001" è uguale al numero di istanze della sottostringa "100" } regolare? Si noti che la stringa "00100" sarebbe accettata.LL{w}

La mia intuizione mi dice che non lo è, ma non sono in grado di dimostrarlo; Non riesco a trasformarlo in una forma che può essere pompata attraverso il lemma di pompaggio, quindi come posso provarlo? D'altra parte, ho provato a creare un DFA o un NFA o un'espressione regolare e ho fallito anche su quei fronti, quindi come devo procedere? Vorrei capirlo in generale, non solo per la lingua proposta.



2
Perché non puoi rispondere alla tua soluzione?
Yuval Filmus,

1
@YuvalFilmus C'è un ritardo per gli utenti di bassa reputazione di rispondere alla propria domanda (8 ore se rep <100).
Gilles 'SO- smetti di essere malvagio'

1
Probabilmente dovrebbe esserci un ulteriore loop su q 5 ? 0q5
Hendrik Jan

1
Un esempio simile di questo fenomeno, ma per le sottostringhe "01" e "10" è stato discusso nel nostro sito gemello. Provare che una lingua è regolare o irregolare . La risposta ha un'osservazione simile a quella fatta nel suo commento: "Cioè, una transizione 01 non può essere seguita da un'altra transizione senza una transizione 10 ". 0110
Hendrik Jan

Risposte:


3

Una risposta estratta dalla domanda.

Come sottolineato da Hendrik Jan, ci dovrebbe essere un ulteriore 0 self-loop in q5.

automa


questa è una costruzione, non una prova
vzn

nelle classi CS per problemi semplici a volte vengono dati solo DFA, ma non dimostra che accetta esattamente la lingua. devi [in qualche modo] mostrare per ogni stringa di input che funziona correttamente. "Come funziona?"
vzn

2
q5q2

3

È una domanda trabocchetto. Prova a costruire una stringa che contenga due 001 e non contenga un 100 e scopri perché non puoi farlo. Se X = "numero di 001" e Y = "numero di 100", allora X = Y o X = Y ± 1.

Una volta che hai capito il trucco, diventa altamente improbabile che la lingua sia irregolare e quindi costruire un DFA è abbastanza semplice. Ci sono solo 8 stati con le loro transizioni se il simbolo successivo è 0/1:

State S0: Input is empty. -> S1/C0

State S1: Input is 0. -> C2/C0

State A: Y = X + 1, input ends in 00. -> A/C0

State B0: X = Y + 1, input ends in 1. -> B1/B0

State B1: X = Y + 1, input ends in 10. -> C2/B0

State C0: X = Y, input ends in 1. -> C1/C0

State C1: X = Y, input ends in 10. -> A/C0

State C2: X = Y, input ends in 00. -> C2/B0

Lo stato iniziale è S0 e S0, S1, C0, C1, C2 stanno accettando gli stati.

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.