Estou interessado em algoritmos eficientes para interseção do DFA em casos especiais. Ou seja, quando os DFAs se cruzam, obedecem a uma certa estrutura e / ou operam com um alfabeto limitado. Existe alguma fonte onde eu possa encontrar algoritmos nesses casos?
Para não tornar a pergunta muito ampla, a seguinte estrutura é de particular interesse: todos os DFAs a cruzar operam no alfabeto binário (0 | 1), eles também podem usar símbolos de não se importar. Além disso, todos os estados têm apenas uma transição, exceto no máximo K estados especiais, que possuem apenas duas transições (e essas transições são sempre 0 ou 1, mas não se importam). K é um número inteiro menor que 10 para fins práticos. Além disso, eles têm um único estado de aceitação. Além disso, sabe-se que a interseção SEMPRE é um DFA na forma de "faixa", ou seja, sem ramificações, como na imagem a seguir:
EDIT: Talvez a descrição da restrição nos DFAs de entrada não esteja muito clara. Vou tentar melhorá-lo neste parágrafo. Você tem como entrada T DFAs. Cada um desses DFAs opera apenas no alfabeto binário. Cada um deles tem no máximo N estados. Para cada DFA, cada um de seus estados é um dos seguintes:
1) o estado de aceitação (é apenas um e não há transição para outro estado)
2) um estado com duas transições (0 e 1) para o mesmo estado de destino (a maioria dos estados é desse tipo)
3) um estado com duas transições (0 e 1) para diferentes estados-alvo (no máximo K desse tipo)
É garantido que haja apenas um estado de aceitação e que haja no máximo K estados do tipo (3) em cada DFA de entrada. Também é garantido que a intersecção DFA de todos os AFDs de entrada é uma "tira" (como descrito acima), de tamanho menor do que N .
EDIT2: Algumas restrições adicionais, conforme solicitado pela DW nos comentários:
- Os DFAs de entrada são DAGs.
- Os DFAs de entrada são "nivelados", seguindo a definição de DW nos comentários. Ou seja, você pode atribuir números inteiros diferentes a todos os estados, de forma que todas as transições passem de um número inteiro u para um número inteiro v , de modo que u + 1 = v .
- O número de estados de aceitação para cada entrada DFA, não exceda K .
Alguma ideia? Obrigado.
a DFA in form of "strip", i.e., no branches
? Você tem algum motivo específico para acreditar que alguém pode fazer melhor do que o algoritmo padrão no seu caso?