Para una heurística eficiente, sugeriría buscar en la literatura CAD sobre el problema de codificación de estado (asignar identificadores binarios a estados de un DFA para minimizar la cantidad de lógica para la función de transición de estado). Devadas y Newton, "Descomposición y factorización de finito secuencial máquinas de estado ", IEEE TCAD , 8 (11): 1206-1217, 1989 señala que existe una estrecha relación entre la codificación de estado y la descomposición de la máquina de estado.
Si para un DFA con N declara que asigna un único M Identificador de estado de bit a cada estado (lg2N<M≤N), esencialmente ha descompuesto el DFA en una red de Mmáquinas interactivas de dos estados. Equivalente: has definido un conjuntoS con M elementos, y se les asignó un subconjunto único de Sa cada estado en su DFA original. Esto también es lo que hace el algoritmo de construcción de conjuntos de potencia Rabin-Scott . Entonces, al hacer una codificación de estado en el DFA, estamos tratando de aplicar ingeniería inversa al conjunto desde el que comenzó el algoritmo de construcción del conjunto de potencia.
En el problema de codificación de estado tradicional, todas las codificaciones son legales, y hay alguna función objetiva (relacionada con la cantidad de lógica en la función de transición de estado) que está intentando minimizar. Para generar un NFA, debe resolver una versión restringida del problema de detección donde:
una codificación de MLos identificadores de bits para los estados DFA representan un NFA si para cada símbolo del alfabeto la función de transición para cada bit es una simple disyunción de bits. (No se permite conjunción ni negación).
Para que puedas enumerar todos los M codificaciones de bits para todos lg2N<M≤N, y verifique si cada uno satisface la restricción. (Tenga en cuenta que paraM=N la codificación trivial "one-hot" siempre satisface las restricciones y le da el DFA.) Sin embargo, la enumeración es ridículamente grande (el libro de texto de Di Micheli lo da como algo así como 2M!(2M−N)!M!.) La razón por la que sugiero la literatura CAD es que existen técnicas para hacer esta búsqueda implícitamente en lugar de enumerar (por ejemplo, mediante el uso de BDD, ver Lin, Touati y Newton, "No importa la minimización de la secuencial de varios niveles redes lógicas, " Int'l Conf Comp-Aided Dsgn ICCAD-90: 414-417, 1990 .
Ejemplo
Tome el siguiente DFA, (con una codificación de estado que obtuve por engaño (generé el DFA a partir de un NFA usando Rabin-Scott, y la codificación representa los subconjuntos elegidos por Rabin-Scott))
Si llamamos a los bits en la asignación de estado ABCD, cuando el símbolo de entrada es 1, la función de transición es A = A, B = A, C = B, D = C. Cuando el símbolo de entrada es 0, la función de transición es A = A, C = B, D = C. Esta es una función de transición puramente disyuntiva sin conjunción ni negación, por lo que esta codificación de estado nos da un NFA. Los estados en el NFA corresponden uno a uno con los bits en la codificación, y la función de transición es la siguiente:
Formulación como problema de satisfacción booleana
La descripción informal anterior conduce directamente a una codificación como un problema de satisfacción booleana. Hay un conjunto de variables que describe las transiciones en el NFA, y un conjunto de variables para la codificación del estado de DFA que se derivarían de Rabin-Scott para el NFA elegido. Las transiciones del DFA específico que está tratando de descomponer se usan para colocar restricciones en las transiciones NFA.
Supongamos que se nos da un DFA con N estados para un idioma con S símbolos, y nos gustaría obtener un M NFA estatal, con lg2N<M≤N. Utilizaremos las variablesysft para representar las posibles transiciones en la NFA. ysftserá cierto si hay una transición en el NFA de estado NFAf a estado NFAten símbolo s. En el ejemplo anterior NFA, el alfabeto es de tamaño 2 y hay 4 estados NFA, por lo que haySM2=32 y variables y y0AA,y1AAy y1AB son todas verdaderas mientras y1DA Es falso.
Utilizaremos las variables xdn para indicar si el algoritmo Rabin-Scott debe incluir o no el estado NFA n en el conjunto de estados que etiquetan el estado de DFA d. En el ejemplo anterior tenemosN=8 DFA declara y M=4 NFA dice que hay 32 xvariables En el ejemplo anterior, suponga que el estado más bajo (el etiquetado "1011") es el estadok, entonces xkA, xkCy xkD son ciertas mientras xkB Es falso.
Ahora las limitaciones. En primer lugar, Rabin-Scott debe encontrar una codificación diferente para cada estado de DFA, por lo que para los estados de DFAi<j y todos los estados de la NFA {A,B,⋯,D}:
(xiA≠xjA)+(xiB≠xjB)+⋯+(xiD≠xjD).
A continuación, debe darse el caso de que si Rabin-Scott encuentra una transición del estado de DFA i al estado de DFA j en símbolo s entonces para cada estado NFA k incluido en la codificación de j debe haber un estado NFA l de la codificación del estado DFA j tal que la NFA original tuvo una transición de l a k. En el ejemplo anterior, en el símbolo "1" hay una transición de DFA del estado de DFA "1000" al estado de DFA "1100", por lo que debe haber una transición de NFA del estado de NFA A a los estados de NFA A y B y no transición de NFA de NFA estado A al estado NFA C o D. Entonces, para cada uno de loso(SN2) bordes en el DFA tenemos las restricciones:
xjAxjBxjD===ysAAxiA+ysBAxiB+⋯+ysDAxiDysABxiA+ysBBxiB+⋯+ysDBxiD⋯ysADxiA+ysBDxiB+⋯+ysDDxiD.
Finalmente tenemos que lidiar con el inicio y aceptar los estados. El estado de inicio de DFA se codifica con la unión de los estados de inicio de NFA, por lo que es mejor que el estado de inicio de DFA no se codifique con el conjunto vacío.x0A+x0B+⋯+x0D. Y finalmente necesitamos un conjunto de variablesfnpara indicar si cada estado NFA es un estado de aceptación NFA. Debe darse el caso de que la codificación de cada estado de aceptación de DFA contenga al menos un estado de aceptación de NFA y que la codificación de cada estado de no aceptación de DFA no contenga ningún estado de aceptación de NFA, por lo que:xiAfA+xiBfB+⋯+xiDfD para DFA aceptar estados i y ¬(xjAfA+xjBfB+⋯+xjDfD) para los estados no aceptados de DFA j.