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:
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.
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?