Boletín 2 – COD Por Javier Belenguer Faguás 1)Sea un alfabeto con un solo símbolo ¿cuáles son sus lenguajes código? Sus lenguajes códigos son todos aquellos compuestos de una sola palabra que es la concatenación un determinado número de veces del símbolo del alfabeto, esto es así porque si el lenguaje código estuviera formado por varias palabras, al haber un solo símbolo, las palabras que fueran la concatenación del símbolo un número de veces que fuera común múltiplo de los números de veces que aparece el símbolo en las palabras del lenguaje código podrían ser formadas con cualquiera de las palabras del lenguaje y por lo tanto tendría más de una factorización y no sería un lenguaje código. 2) ¿Es {ab,abb,babb} un lenguaje código? No es un lenguaje código dado que la palabra “abbabb” tiene varias factorizaciones en palabras del lenguaje, pudiendo ser escrita concatenando dos veces el símbolo “abb” o concatenando “ab” y “babb”. 3) ¿Son los lenguajes códigos cerrados para la unión? Teniendo los lenguajes código {a, ab} y {ab, ba} que aparecen en el tema 2 de la asignatura, su unión {a, ab, ba} no es un lenguaje código dado que la palabra “aba” tiene varias factorizaciones en palabras del lenguaje, pudiendo escribirse concatenando los símbolos “a” y “ba” o concatenando “ab” y “a”, por lo que los lenguajes códigos NO son cerrados para la unión. 4) ¿Son los lenguajes códigos cerrados para la concatenación? La concatenación L1L2 consiste de todas aquellas palabras de la forma vw donde v es una palabra de L1 y w es una palabra de L2, dado que L1 y L2 son lenguajes código solo hay como máximo una forma de escribir cada palabra mediante L1 y una mediante L2, CONTINUAR 5) Demuestre que los códigos instantáneos son cerrados para la concatenación. Dado que la condición necesaria y suficiente para que un lenguaje código sea instantáneo es que sea prefijo y todo lenguaje prefijo que no contenga λ es un lenguaje código y mediante la concatenación de palabras que no sean λ no se puede generar λ, es condición necesaria y suficiente demostrar que los lenguajes generados son prefijos. Dados dos lenguajes L1 y L2 que son lenguajes códigos instantáneos, su concatenación L1L2 consiste de todas aquellas palabras de la forma vw donde v es una palabra de L1 y w es una palabra de L2, y dado que L1 y L2 son lenguajes prefijos, las partes v de las palabras de L1L2 no serán prefijos unas de las otras y lo mismo ocurrirás con las partes w, y dado que si una palabra es prefijo de otra cualquier subconjunto de la primera palabra que contenga el principio de la misma será prefijo, al no ser v un prefijo de ninguna otra parte v de una palabra las palabras que forman tampoco son prefijos entre sí, y por lo tanto L1L2 es un lenguaje prefijo. Por lo tanto los códigos instantáneos son cerrados para la concatenación. 1 7) Demuestre que si L ⊆ A* es un lenguaje código, entonces Ln también lo es para cada n > 0. Dado el lenguaje código L, Ln es el lenguaje formado por la concatenación de n veces el lenguaje L, por lo que las palabras que lo forman son un subconjunto de las palabras que se pueden formar a partir del lenguaje L, y dado que L es un lenguaje código, un subconjunto de las palabras también es un lenguaje código, al tener como mucho el mismo número de formas de escribir una palabra que L, es decir, una. Por lo tanto si L ⊆ A* es un lenguaje código, entonces Ln también lo es para cada n > 0. 8) Sea A un alfabeto. Demuestre que An es un lenguaje código maximal para cada n > 0. Para un alfabeto A, el lenguaje código que más palabras es capaz de escribir es A, es decir, el propio alfabeto, ya que puede generar cualquier palabra que se puede escribir mediante ese alfabeto. El lenguaje An está formado por todas las posibles palabras que de longitud n que se pueden escribir a partir de A ya que es la concatenación n veces de A, por ello es un lenguaje código, ya que es un subconjunto de las palabras de A y este es un lenguaje código, y dado que no se puede añadir ninguna palabra a An sin que deje de ser un lenguaje código ya que ya contiene todas las palabras de longitud n y añadir otra haría que hubiera más de una forma de generar una palabra, An es un lenguaje código maximal. Por lo tanto An es un lenguaje código maximal para cada n > 0. 9) Sea L = {a}n ∪ ({a}m)*{b} ¿Cuáles son los casos, dependiendo de n y de m, en los que L es un lenguaje código? Dado que ({a}m)*{b} siempre causa que el lenguaje L incluya la palabra “b”, el lenguaje L NO es código para ningún valor de n y de m en el que m > 0 o, ya que ({a}m)n{b} = ({a}n)m{b} y esa palabra y sus múltiplos podrán escribirse tanto concatenando {a}n m veces y concatenando al final “b”, como usando directamente la palabra ({a}m)n{b}. Por otro lado λ no puede pertenecer a un lenguaje código por lo que n tiene que ser mayor o igual a 0, por lo tanto L es un lenguaje código para n > 0 y m = 0. 11) i) Si un código es completo, entonces ¿es un lenguaje código maximal? Un lenguaje código completo no es necesariamente maximal, dado que la condición para que un lenguaje código sea maximal es que al añadir cualquier palabra al lenguaje este deje de ser código, mientras que la condición para que un lenguaje código sea completo es que al añadir cualquier palabra al lenguaje este deje de ser prefijo, y por lo tanto deje de ser instantáneo, la cual es una condición menos restrictiva que la de los lenguajes maximales e incluye más lenguajes, algunos de los cuales no son maximales. 12) Sea una fuente de memoria nula S = (A,p) con A = {a,b,c} y p(a) = p(b) = p(c) = 1/3. Obtenga un código binario para S de acuerdo al desarrollo del primer teorema de Shannon y calcule su longitud media. ¿Es óptimo? La longitudes de los símbolos de la fuente son: 𝑙(𝑎) = 𝑙(𝑏) = 𝑙(𝑐) = 1 Por lo que la longitud media es: 1 ℒ(𝐴) = 𝑝(𝑎) ∗ 𝑙(𝑎) + 𝑝(𝑏) ∗ 𝑙(𝑏) + 𝑝(𝑐) ∗ 𝑙(𝑐) = 3 ∗ ( ∗ 1) = 1 3 Por otro lado, la entropía de la memoria nula es: 2 ℋ(𝑆) = − ∑ 1 ≤ 𝑖≤ 𝑛 𝑝𝑖 log 2 𝑝𝑖 = −(𝑝(𝑎) ∗ log 2 𝑝(𝑎) + 𝑝(𝑏) ∗ log 2 𝑝(𝑏) + 𝑝(𝑐) ∗ log 2 𝑝(𝑐)) 1 1 = −3 ∗ ( ∗ log 2 ) = −(−1.58) = 1.58 3 3 Si expresamos la entropía en r unidades entonces: ℋ𝑟 (𝑆) = ℋ(𝑆) log 2 𝑟 Donde r es el número de símbolos del alfabeto, por lo que: ℋ3 (𝑆) = ℋ(𝑆) 1.58 = =1 log 2 3 1.58 Se tiene por lo tanto que: ℋ3 (𝑆) ≤ ℒ(𝐴) ≤ ℋ3 (𝑆) + 1; 1 ≤ 1 ≤ 2 Por lo que no hay ningún lenguaje con mejor longitud media, y por lo tanto es óptimo para 3 símbolos. El lenguaje código B generado por la codificación de Shannon es {1, 00, 01}, cuyas longitudes son: 𝑙1 = 1; 𝑙2 = 2; 𝑙3 = 2; ℒ(𝐵) = 𝑝1 ∗ 𝑙1 + 𝑝2 ∗ 𝑙2 + 𝑝3 ∗ 𝑙3 = 1 1 1 5 ∗ 1 + ∗ 2 + ∗ 2 = = 1.67 3 3 3 3 La entropía en r unidades para 2 símbolos es: ℋ(𝑆) 1.58 ℋ2 (𝑆) = = = 1.58 log 2 2 1 Por lo que: ℋ2 (𝑆) ≤ ℒ(𝐵) ≤ ℋ2 (𝑆) + 1; 1.58 ≤ 1.67 ≤ 2.58 Por lo tanto B es un código binario óptimo. 13) ¿Qué condición debe cumplirse en el alfabeto fuente para que la codificación de Shannon proporcione códigos binarios óptimos en el caso de que todos los símbolos del alfabeto fuente sean equiprobables? CONTINUAR 14) ¿Son completos los códigos binarios óptimos? Los lenguajes código óptimos son instantáneos, y por tanto prefijos, CONTINUAR 3