Planteamiento del problema :
Deje que sea un autómata pushdown (potencialmente no determinista) y deje que sea su alfabeto de entrada. ¿Hay una palabra st que es aceptado por ?A w ∈ A ∗ | w | ≤ k M
¿Es este problema NP-completo? ¿Ha sido estudiado? ¿Hay algún algoritmo que permita encontrar una palabra así?
Respuestas:
Calcule la intersección de su lenguaje CFG con el lenguaje regular (esto equivale a multiplicar el número de estados por k y agregar un estado "sin salida"). Ahora compruebe si el resultado está vacío: conviértalo en una gramática (creo que el resultado tendrá un tamaño polinómico) y "retroceda" de las producciones de epsilon.∑ki = 0UNAk k
Editar: Kaveh mencionó que esto es polinomial en , por lo que si k se da como entrada, el algoritmo es exponencial en | k | . Sin embargo, Kaveh encontró una manera de arreglarlo. Convierta el autómata original en un CFG y reemplace todos los terminales por un terminal fijo. Ahora use un algoritmo iterativo para encontrar el tamaño mínimo de una palabra generada por cada no terminal, de la siguiente manera.k k El | k |
fuente
Cambie todos los caracteres del alfabeto a un solo carácter específico. Ahora, tiene un PDA definido sobre un solo carácter. Su lenguaje es una gramática libre de contexto. Sin embargo, la gramática libre de contexto sobre un solo carácter es regular. Por lo tanto, convierta el CFG a un idioma normal y luego verifique si contiene una palabra de longitud k.
Ahora, todas estas conversiones tienden a requerir un tiempo exponencial, pero me parece poco probable que el problema sea NP completo. Especialmente si permite el tiempo polinomial en .k
Podría estar equivocado, y me disculpo por mi respuesta inicial ...
Por cierto, el hecho de que un CFG sobre una sola letra sea regular se deduce del teorema de Parikh. Aunque una prueba directa no es demasiado difícil. Consulte el enlace para obtener más detalles sobre el teorema de Parikh: es un resultado hermoso ... http://www8.cs.umu.se/kurser/TDBC92/VT06/final/3.pdf
fuente
Un método probablemente subóptimo: ejecutar el algoritmo de Djikstra. Luego, para cada estado final, compare las distancias con . Si alguno es ≤ k , acepte. Rechazar.k ≤ k EDITAR: ¡Lo anterior solo funciona para los NFA! Lo siento por eso.
fuente