Algoritmo di intersezione DFA per casi speciali


9

Sono interessato a algoritmi efficienti per l'intersezione DFA per casi speciali. Vale a dire, quando i DFA da intersecare obbediscono a una determinata struttura e / o operano con un alfabeto limitato. Esiste una fonte in cui posso trovare algoritmi in questi casi?

Al fine di non rendere la domanda troppo ampia, la seguente struttura è di particolare interesse: tutti i DFA da intersecare operano con l'alfabeto binario (0 | 1), possono anche usare simboli non importa. Inoltre, tutti gli stati hanno solo una transizione tranne per al massimo K stati speciali, che hanno solo due transizioni (e queste transizioni sono sempre 0 o 1, ma non importa). K è un numero intero, inferiore a 10 per scopi pratici. Inoltre, hanno un unico stato accettante. Inoltre, è noto che l'intersezione è SEMPRE un DFA in forma di "striscia", ovvero senza rami come nella seguente immagine:

inserisci qui la descrizione dell'immagine

EDIT: forse la descrizione del vincolo sui DFA di input non è molto chiara. Proverò a migliorarlo in questo paragrafo. Hai come input T DFA. Ognuno di questi DFA funziona solo sull'alfabeto binario. Ognuno di essi ha al massimo N stati. Per ogni DFA, ciascuno dei suoi stati è uno dei seguenti:

1) lo stato accettante (è solo uno e non c'è transizione da esso a nessun altro stato)

2) uno stato con due transizioni (0 e 1) allo stesso stato target (la maggior parte degli stati è di questo tipo)

3) uno stato con due transizioni (0 e 1) verso diversi stati target (al massimo K di questo tipo)

È garantito che esiste solo uno stato accettante e che ci sono al massimo K stati di tipo (3) in ciascun DFA di input. È anche garantito che l'intersezione DFA di tutti i DFA ingresso è un "strip" (come descritto sopra), di dimensioni inferiori a N .

EDIT2: alcuni vincoli aggiuntivi, come richiesto da DW nei commenti:

  • I DFA di input sono DAG.
  • I DFA di input vengono "livellati", seguendo la definizione DW nei commenti. Vale a dire, è possibile assegnare numeri interi diversi a ogni stato in modo tale che ogni transizione passi da un intero u a un intero v , in modo tale che u + 1 = v .
  • Il numero di stati accettare per ciascun ingresso DFA, non superi K .

Qualche idea? Grazie.


Come si modella esattamente "non importa"? Sembra rendere gli automi non deterministici, in un certo senso.
Shaull

@Shaull Perché dovrebbe rendere l'automa non deterministico. Ciò può accadere solo se esiste un'altra transizione dallo stesso stato, che viene esplicitamente esclusa.
babou,

1
Che cosa è a DFA in form of "strip", i.e., no branches? Hai qualche motivo specifico per credere che si possa fare di meglio dell'algoritmo standard nel tuo caso?
babou,

1
Ciao. Il calcolo dell'intersezione effettiva sarebbe ottimo, poiché semplificherebbe molte cose, ma sarebbe utile anche decidere il vuoto.
ale64bit

1
Ho appena incontrato un nuovo articolo sui grafici delle intersezioni , parte di questa teoria potrebbe essere rilevante? potresti espandere la tua applicazione menzionata nel tuo commento nella Teorical Computer Science Chat ? e invita gli altri a continuare ulteriori discussioni lì.
vzn

Risposte:


9

[2]

NC3


[1]{0,1}uvuv

  1. L-complete per uno stato finale in ciascun DFA,
  2. NL completato per due stati finali in ciascun DFA e
  3. NP-completo per tre o più stati finali in ciascun DFA.

KK=2

Pertanto, no , non credo che esista un algoritmo efficiente per il tuo problema.

[3]


x2x3x5

gadget di riduzione

Si noti che gli automi sono alberi (e quindi DAG), sono livellati e hanno tre stati finali. In realtà, i tre stati finali potrebbero essere fusi in uno solo, se uno è soddisfatto dei DAG. Inoltre, solo due stati hanno due transizioni (distinte) in uscita.

  1. Michael Blondin. Complessità raffinata del problème d'intersection d'automates, M.Sc. tesi, Université de Montréal, 2012.
  2. Michael Blondin, Andreas Krebs e Pierre McKenzie. La complessità di intersecare gli automi finiti con pochi stati finali, complessità computazionale (CC), 2014.
  3. Michael Wehar. Risultati di durezza per intersezione non vuoto. ICALP, 2014.

2
Molte grazie! Accetto la tua risposta La domanda è nata da alcuni test pratici in cui tutto si è ridotto dopo molti passaggi per intersecare le soluzioni di molti DFA con queste caratteristiche particolari. Tuttavia, abbiamo osservato che sebbene alla fine avremmo ottenuto un DFA semplice, il processo non è mai terminato a causa dei DFA intermedi (mentre si intersecano sequenzialmente) stavano crescendo selvaggiamente in un numero esponenziale di stati. Quindi la domanda, su come ottenere la risposta senza passare attraverso i passaggi "ingenui" intermedi.
ale64bit

1
Grazie mille (e mi dispiace per essere poco chiaro, sono al di sotto dei novizi in questo settore). Ora c'è qualcosa che non capisco. Dici che "a forma di albero" significa "percorso univoco dalla radice ad ogni altro nodo". Ma, ad esempio, nell'immagine che hai pubblicato nella modifica, quello non sarebbe un albero (a meno che non conti le transizioni 0/1 come una singola etichetta)?
ale64bit

1
Hai ragione, ma la mia comprensione è stata che permetti transizioni "non importa". Non è così?
Michael Blondin,

2
Ciao Michael Grazie per la bella risposta Spero che tutto vada bene. :)
Michael Wehar,

2
@MichaelWehar Nel caso in cui risolvi sia k che c, dici che puoi risolvere il problema "rapidamente". Ma non menzioni la complessità del tempo, ma solo la complessità dello spazio. Cosa significa esattamente "rapidamente" in quel contesto?
ale64bit
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.