Parole che hanno lo stesso prodotto associativo destro e sinistro


9

Ho iniziato a studiare automi non deterministici usando il libro di Hopcroft e Ullman . Sono bloccato in un problema che ho trovato molto interessante:

Fornire un automa finito non deterministico accettando tutte le stringhe che hanno lo stesso valore quando valutate da sinistra a destra come da destra a sinistra moltiplicando secondo la seguente tabella:

×abcaaacbcabcbca

Quindi se abbiamo la stringa , il prodotto da sinistra a destra è ( a × b ) × c = a × c = c e il prodotto da destra a sinistra è a × ( b × c ) = a × b = un'abc
(a×b)×c=a×c=c
a×(b×c)=a×b=a

Quindi non dovrebbe essere accettabile per gli automi. Per me è ovvio che qualsiasi stringa a a o b b o c c è una stringa accettabile (la loro valutazione destra e sinistra funzionano sulle stesse stringhe parziali). È facile fornire un NFA che descriva la valutazione da sinistra a destra, ma il problema è che se la macchina prova a calcolare la valutazione da destra a sinistra, penso che debba conoscere la lunghezza della stringa (quindi è necessaria una memoria infinita).abcaabbcc

Quindi, come possono gli automi non deterministici valutare da destra a sinistra al fine di confrontare con la valutazione da sinistra a destra?

Risposte:


6

Il primo trucco qui è pensare alla tabella di moltiplicazione come alla tabella di transizione di un automa con ogni stato che rappresenta una lettera nella tabella di moltiplicazione, ma non preoccuparsi ancora dell'accettazione. Quindi le lettere a sinistra e nel corpo del tavolo sono in realtà stati - sarebbe più preciso scriverle come q a , q b , q c , ma non lo farò. Le lettere nella parte superiore sono input.Aqa,qb,qc

Quindi costruire l'automa (" T " per trasporre) per la moltiplicazione inversa trasponendo A :ATTA

ATabcaacbbaacccba

Quindi ti porta allo stato c , e allo stesso modo A T ( c b a ) si sposta nello stato a di A T , come noti.A(abc)cAT(cba)aAT

Tuttavia, presume che tu stia andando da destra a sinistra e vogliamo ancora andare da sinistra a destra. Quindi il secondo trucco è quello di invertire l'automa (non la moltiplicazione, che ci riporterebbe indietro se avessimo iniziato), invertendo tutte le frecce, il che porta ad un automa non deterministico A T R dato dalla tabella di transizione sotto, con sottoinsiemi indicati da lettere concatenate per tenere il pollo graffiato, quindi a c è davvero { a , c } . (spero di aver capito bene, sembra funzionare).ATATRac{a,c}

ATRabcaabbcbcaccabababbcacbccacabcacabcabbcabcabcabcabc

Puoi interpretarlo come un automa non deterministico con solo le tre righe sopra la linea o una versione determinata con tutte e 8 le righe.

Infine, la macchina per risolvere il problema è l'automa a prodotto incrociato degli originali e A T R , ovvero A × A T R per eseguire il comportamento dell'intersezione dei due automi (non abbiamo più bisogno di A T ) . Un × A T R trovi stati che sono coppie come una , un c . La funzione di transizione esegue A e A T R in modo indipendente. Un singolo stato iniziale 1 , 1 AATRA×ATRATA×ATRa,acAATR1,1va in sotto ingresso una , in b , b sotto ingresso b , etc. a,aab,bb

Accettare stati nella versione non-deterministico sono ecc Nella versione deterministica, accettando stati sono coppie in cui il primo componente è del secondo set di componenti, come ad esempio una , una o b , b c .a,aa,ab,bc

aumentato e determinato come mostrato ha 25 = 3 8 + 1 stati, quindi perdonami se non lo scrivo in dettaglio. Ma la versione non deterministica ha solo 10 = 3 3 + 1 stati.A×ATR25=38+110=33+1


Grazie, mi ha davvero aiutato la tua risposta per comprendere l'idea alla base del non determinismo e il "contrario" di un automa. Avevo problemi a comprendere questi concetti usando il libro di Hopcroft, ora sto usando il libro di Sipser "Introduzione alla teoria del calcolo", il suo vero bene.
Mr. Ariel,

Considera l'input . 1 , 1 sposta b , b dopo ingresso b , e poi a c , sotto ingresso una , quindi b un non viene accettata, ma dovrebbe essere? ba1,1b,bbc,aba
cemulate il

8

Se L è una lingua normale, allora anche L R , la lingua che consistenell'inversodi tutte le parole in L , è regolare. Prendi questo come esercizio.()LLRL

In che modo questo ci aiuta a risolvere il problema? Let le lingue, comprensivi di tutte le stringhe che restituiscono un , b , c quando si valuta da sinistra a destra. La lingua che ti interessa è ( L aL R a ) ( L bL R b ) ( L cL R c ) . Ciò dimostra che se sai come provare (La,Lb,Lca,b,c

(LaLaR)(LbLbR)(LcLcR).
, quindi puoi costruire un NFA per la lingua in questione.()

In effetti, se usi l' idea della prova di , probabilmente puoi semplicemente andare avanti e costruire l'automa. Quindi consideriamo questo. In particolare, cerchiamo di costruire un NFA per L R una , il linguaggio di tutte le stringhe che restituiscono un quando valutato da destra a sinistra.()LaRa

L'idea è questa. Supponiamo che la prima lettera che vedi sia . Quindi il resto della stringa deve essere valutato in b (poiché b x = a implica x = b ). Ragionamento simile si applica quando la prima lettera è c . Quando la prima lettera è una , tuttavia, il resto può restituire sia una o b , o essere nullo. Con un NFA, possiamo indovinare (e successivamente verificare la nostra ipotesi).bbbx=ax=bcaab

Questo suggerimento dovrebbe darti abbastanza su cui riflettere e, si spera, risolvere il problema.


Bel modo di dimostrarlo con la formula - voto positivo per questo. Per quanto riguarda l'idea alternativa di "indovinare e verificare" non deterministico, di solito va bene per una prova, ma è piuttosto difficile da realizzare, come richiesto dal problema. Penso che qui ci siano molti dettagli mancanti, come come tenere traccia della stringa dal back-end.
David Lewis,

@ David, i dettagli mancano apposta.
Yuval Filmus,

@Yuval - non ha detto che erano i compiti - ci fidiamo delle persone qui, giusto? Penso anche che questa prova dell'esistenza si tradurrà in una macchina abbastanza grande, probabilmente molto più grande del necessario.
David Lewis,

@DavidLewis: Gilles ha dato una risposta più completa che dimostra che l'NFA non è davvero troppo grande; il non determinismo lo fa per te. Il DFA corrispondente potrebbe essere enorme, però.
Raffaello

@MohamedAbbas Forse, non ho intenzione di controllare.
Yuval Filmus,

6

Carina.

xyzxy=z{a,b,c}11xxxxx

Ora costruiamo un automa che calcola il prodotto da destra a sinistra. Questo non sarà deterministico. Come lo facciamo? Semplice ... Per andare nell'altra direzione, basta invertire tutto : le frecce e la direzione del prodotto.

xyxyxyxyxyyx.

1

(x1,x2)y(z1,z2)x1yz1x2yz2(1,x)(x,x)x


xyyxporta a uno stato finito impostato? IAC, non è solo semplice come "invertire tutto", dal momento che devi ancora consumare da sinistra a destra, ma moltiplicare da destra a sinistra, e non sono sicuro che tu l'abbia fatto.
David Lewis,

{overleftarrowa,b,b,1}

5

Sembra che il tuo problema principale sia l'utilizzo del non determinismo, quindi lasciami approfondire.

L'idea di base che gli altri utilizzano è che una macchina non deterministica può indovinare il risultato finale.

abc

  • aabcab
    • abb
      • bc
    • bbc
      • cc
  • ba
  • cabcc
    • cba
      • ac

Come puoi vedere, l'NFA è in grado di indovinare e controllare ogni possibile calcolo dal basso verso l'alto . Poiché la lingua accettata è definita come l'insieme di stringhe accettate da almeno una corsa , tutte le corse non accettanti sull'input vengono ignorate; l'NFA "indovina sempre bene".

Ora è facile per questo NFA ricordare la sua prima scelta fino alla fine. Se accetta, può confrontare il simbolo ricordato con il prodotto lr (deterministicamente) ottenuto in parallelo (il modo in cui l'intersezione linguistica si riferisce a NFA è sicuramente trattato in Ullman / Hopcroft e in qualsiasi altro libro di testo di base).


L'idea di indovinare una stringa era strana per me, ma ho letto il libro di Sipser e penso che sia un approccio migliore per i neofiti come me nella teoria del calcolo.
Sig. Ariel,

Pensa a indovinare come biforcarsi con input assunto. Ma devi stare attento con le strategie di indovinare - assicurati che qualsiasi spazio di archiviazione necessario per indovinare sia limitato in modo uniforme per tutti i thread biforcati, altrimenti non avrai più un automa a stati finiti . Inoltre, è necessario un limite uniforme sul numero di thread biforcati attivi. Penso che la descrizione di Raffaello qui funzioni, ma deve essere menzionata almeno.
David Lewis,
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.