11.07.2015 Views

Teor´ıa de Autómatas y Lenguajes Formales

Teor´ıa de Autómatas y Lenguajes Formales

Teor´ıa de Autómatas y Lenguajes Formales

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

114 CHAPTER 6. PROPIEDADES DE LOS LENGUAJES LIBRES DE CONTEXTOpor estado final. Como las construcciones <strong>de</strong>l capítulo 5 son todas efectivas, un algoritmo que usa una representaciónse pue<strong>de</strong> hacer funcionar para cualquiera <strong>de</strong> las otras. En esta sección se usará la representaciónpor gramáticas libres <strong>de</strong> contexto.Teorema 33 Existen algoritmos para <strong>de</strong>terminar si un lenguaje libre <strong>de</strong> contexto es1. vacío,2. finito, o3. infinito.Demostración : Ya se ha dado un algoritmo para probar si un lenguaje libre <strong>de</strong> contexto es vacío. Para unagramática G = (V, T, P, S), el test <strong>de</strong>l primer lema para remover símbolos inútiles <strong>de</strong>termina si una variablegenera algún string <strong>de</strong> terminales. Obviamente L(G) es no vacío si y sólo si el símbolo inicial, S, generaalgún string <strong>de</strong> terminales.Para saber si L(G) es finito, utilice el algoritmo <strong>de</strong>l teorema correspondiente para construir una gramáticaG ′ = (V ′ , T, P ′ , S) en la forma normal <strong>de</strong> Chomsky, que genera L(G) − {ε}. L(G ′ ) es finito si y sólo si L(G)es finito. Un test simple para la finitud <strong>de</strong> una gramática en forma normal <strong>de</strong> Chomsky sin símbolos inútiles,es construir un grafo dirigido con un vértice por variable y un arco <strong>de</strong> A a B, si hay una producción <strong>de</strong> laforma A → BC o A → CB para algún C. El lenguaje generado es finito si y sólo si este grafo no tiene ciclos.(Ver texto).Otra pregunta que se pue<strong>de</strong> respon<strong>de</strong>r es: dada una gramática libre <strong>de</strong> contexto, G = (V, T, P, S) y unstring x en T ∗ , ¿está x ∈ L(G)? Aquí se presentará un algoritmo simple <strong>de</strong> or<strong>de</strong>n ϑ(|x| 3 ) conocido como elalgoritmo <strong>de</strong> Cocke-Younger-Kasami o CYK. Dado x <strong>de</strong> longitud N ≥ 1 y una gramática G, que se asumeestá en la forma normal <strong>de</strong> Chomsky, se <strong>de</strong>termina para cada i, para cada j y para cada variable A, siA ∗ ⇒X ij , en que X ij es el substring <strong>de</strong> x que tiene largo j y comienza en la posición i.El proceso es por inducción en j. Para j = 1, A ∗ ⇒X ij si y sólo si A → X ij es una producción, ya queX ij tiene largo 1. Para valores mayores <strong>de</strong> j, si j > 1, entonces A ∗ ⇒X ij si y sólo si hay alguna producciónA → BC y algún k, 1 ≤ k ≤ j, tal que B <strong>de</strong>riva los primeros k símbolos <strong>de</strong> X ij y C <strong>de</strong>riva los últimosj − k símbolos <strong>de</strong> X ij . Esto es, B ∗ ⇒X ij y C ⇒ X i+k,j+k . Ya que tanto k como j − k son menores que j,en el proceso ya se sabe si estas dos últimas <strong>de</strong>rivaciones son posibles. Por lo tanto, se pue<strong>de</strong> <strong>de</strong>terminar siA ∗ ⇒X ij . Cuando j = N, se pue<strong>de</strong> <strong>de</strong>terminar si S ∗ ⇒X 1N = x. Es <strong>de</strong>cir, se pue<strong>de</strong> saber si x ∈ L(G).Para <strong>de</strong>finir el algoritmo <strong>de</strong> CYK en forma precisa, sea V ij el conjunto <strong>de</strong> variables A, tales que A ∗ ⇒X ij .Se pue<strong>de</strong> asumir que 1 ≤ i ≤ N − j + 1 ya que no hay string más largo <strong>de</strong> N − i + 1 que comienza en posicióni.(1) FOR i := 1 TO N DO(2) V i1 := {A/A → a ∈ P y a es el i-esimo simbolo <strong>de</strong> x }(3) FOR j := 2 TO N DO(4) FOR i := 1 TO N − j + 1 DO BEGIN(5) V ij := ∅;(6) FOR k := 1 TO J − 1 DO(7) V ij := V ij ∪ {A/A → BC ∈ P , B ∈ V ik y C ∈ V i+k,j−k }ENDEl loop <strong>de</strong> líneas (1) y (2) inicializan para j = 1. Como la gramática es fija, línea (2) toma tiempoconstante. Por lo tanto el ciclo toma ϑ(N) pasos.Los loops anidados <strong>de</strong> líneas (3) y (4) hacen que las líneas (5) a (7) se ejecuten a lo más N 2 veces.La línea (5) toma tiempo constante cada vez, es <strong>de</strong>cir, en total se ejecuta ϑ(N 2 ) veces. El loop <strong>de</strong> lalínea (6) hace que la línea (7) se ejecute ϑ(N 3 )veces. Es <strong>de</strong>cir el algoritmo es ϑ(N 3 ).✷

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!