Je suis intéressé par des algorithmes efficaces pour l'intersection DFA pour des cas spéciaux. A savoir, lorsque les DFA se croisent obéissent à une certaine structure et / ou opèrent sur un alphabet limité. Y a-t-il une source où je peux trouver des algorithmes de tels cas?
Afin de ne pas rendre la question trop large, la structure suivante présente un intérêt particulier: tous les DFA à intersecter fonctionnent dans l'alphabet binaire (0 | 1), ils peuvent également utiliser des symboles indifférents. De plus, tous les états n'ont qu'une seule transition à l'exception d'au plus K états spéciaux, qui n'ont que deux transitions (et ces transitions sont toujours 0 ou 1, mais peu importe). K est un entier inférieur à 10 pour des raisons pratiques. En outre, ils ont un seul État acceptant. De plus, il est connu que l'intersection est TOUJOURS un DFA sous forme de "bande", c'est-à-dire sans branches comme dans l'image suivante:
EDIT: La description de la contrainte sur les DFA d'entrée n'est peut-être pas très claire. Je vais essayer de l'améliorer dans ce paragraphe. Vous avez en entrée T DFA. Chacun de ces DFA fonctionne uniquement sur l'alphabet binaire. Chacun d'eux a au plus N états. Pour chaque DFA, chacun de ses états est l'un des suivants:
1) l'état acceptant (il n'en est qu'un et il n'y a pas de transition de celui-ci vers un autre état)
2) un état avec deux transitions (0 et 1) vers le même état cible (la majorité des états est de ce type)
3) un état avec deux transitions (0 et 1) vers différents états cibles (tout au plus K de ce type)
Il est garanti qu'il n'y a qu'un seul état acceptant et qu'il y a au plus K états de type (3) dans chaque DFA d'entrée. Il est également garanti que l'intersection de tous les DFA DFA d'entrée est une « bande » (comme décrit ci - dessus), de taille inférieure à N .
EDIT2: Quelques contraintes supplémentaires, comme demandé par DW dans les commentaires:
- Les DFA en entrée sont des DAG.
- Les DFA d'entrée sont "nivelés", suivant la définition DW dans les commentaires. A savoir, vous pouvez affecter différents entiers à chaque état de telle manière que chaque transition passe d'un entier u à un entier v , tel que u + 1 = v .
- Le nombre d'états acceptant pour chaque entrée DFA, ne dépasse pas K .
Des idées? Merci.
a DFA in form of "strip", i.e., no branches
? Avez-vous des raisons spécifiques de croire que l'on peut faire mieux que l'algorithme standard dans votre cas?