8 - Sea A un alfabeto. Demuestre que A n es un lenguaje

Anuncio
COD
Ejercicios Boletín II
Jaime Barrachina Verdia
1- Sea un alfabeto con un solo símbolo ¿cuáles son sus lenguajes código?
Partiendo de:
Sea un lenguaje 𝐿 ⊆ 𝐴∗ , siendo A un alfabeto arbitrario, es un lenguaje código siempre que:
𝑥1 … 𝑥𝑛 = 𝑦1 … 𝑦𝑛 → (𝑛 = 𝑚) & (𝑥𝑖 = 𝑦𝑖 , 𝑖 = 1, … , 𝑛), ∀ 𝑥1 , … , 𝑥𝑛 , 𝑦1 , … , 𝑦𝑛 ∈ 𝐿
Podemos decir que cada palabra de L+ puede ser escrita de una única forma a partir de las
palabras de L. Para el caso de un alfabeto A con un solo símbolo s, eso quiere decir que los
lenguajes código de A son aquellos que tienen una sola palabra, hecha con n repeticiones del
símbolo s. Por tanto los lenguajes de A son:
{𝐿 = 𝑠 𝑘 },
2-
𝑘 = 1…𝑛
¿Es {ab, abb, babb} un lenguaje código?
Por el razonamiento del ejercicio anterior sabemos que las concatenaciones de las palabras de
este lenguaje debieran dar factorizaciones univocas, pero no es el caso con “abbabb”, que se
puede descomponer de más de una forma (“abb | abb” o bien “ab | babb”), por lo que no es un
lenguaje código.
3- ¿Son los lenguajes códigos cerrados para la unión?
Con lo restrictiva que es la propiedad de factorizaciones unívocas, podemos intuir a priori que la
unión de dos lenguajes códigos no va a ser cerrada para la unión. Se puede demostrar claramente
usando el L.C. {ab, abb} y el L.C. {a, b}.
La unión de {ab, abb} y {a, b} nos da {a, b, ab, abb}, donde el símbolo “ab” pertenece al L.C.
obtenido y además es concatenación de otros dos símbolos del L.C. (“a” y “b”).
4- ¿Son los lenguajes códigos cerrados para la concatenación?
No. De nuevo lo podemos ver con un contraejemplo sencillo como {ab, a} concatenado con {ab, b},
lo que nos da {abab, abb, aab, ab}. Como abab puede formarse de dos maneras, (usando el
símbolo abab, o dos veces ab), queda demostrado que no son cerrados para la concatenación.
5 - Demuestre que los códigos instantáneos son cerrados para la concatenación.
Podemos plantear esto como demostrar que los lenguajes generados por la concatenación de
lenguajes instantáneos sean lenguajes prefijos.
Cuando concatenamos dos lenguajes prefijos, al concatenar sus palabras, obtenemos un lenguaje
donde la primera mitad de cada palabra no son prefijos unas de otras, por lo que se puede ver
que el lenguaje generado es prefijo.
Puesto que es prefijo, y puesto que la concatenación no puede introducir ningún λ, el lenguaje es
instantáneo y queda demostrado que los códigos instantáneos son cerrados bajo la
concatenación.
7 – Demuestre que si L ⊆ A* es un lenguaje código, entonces Ln también lo es para
cada n > 0.
Puesto que las palabras que pueden ser generadas por un lenguaje Ln , hecho al concatenar L
consigo mismo cualquier numero de veces, son un subconjunto de las palabras generadas por L, y
L es un lenguaje código, entonces Ln también debe serlo.
8 - Sea A un alfabeto. Demuestre que An es un lenguaje código maximal para cada n > 0.
Para el alfabeto A, el lenguaje código L = A es aquel que puede generar todas las posibles palabras
con los símbolos de A. Como hemos demostrado en el ejercicio 7, si A es un lenguaje código,
entonces An es un lenguaje código, y puesto que no se pueden añadir mas palabras a An sin que
solo siga habiendo una sola factorización para cada posible palabra generada por An, entonces es
maximal.
9 – Sea L = { a }n U ( { a }m)* {b}
¿Cuáles son los casos, dependiendo de n y de m, en los que L es un lenguaje código?
Podemos comenzar visualizando algunos ejemplos de L, para hacernos una idea de la forma de
este lenguaje:







Para n = 0, m = 0  L = a0 U a0b
λ,b
0
Para n = 0, m = 1  L = a U { λ , a}b
 λ , b, ab
0
Para n = 0, m = 2  L = a U { λ , a, aa} b  λ , b, ab, aab
Para n = 1, m = 0  L = a1 U{ λ }b
 a, b
1
Para n = 1, m = 1  L = a U { λ , a }b
 a, b, ab
1
Para n = 1, m = 2  L = a U { λ , a, aa} b  a, b, ab, aab
Para n = 2, m = 1  L = a2 U { λ ,a} b
 aa, b, ab
Por lo que podemos ver que mientras que el problema es que haya un numero de “a” generados
por an las cuales, unidas con la “b” generada por {am}b, puedan dar más de una factorización para
las ab, aab, aaab … generadas por {am}b. Por lo tanto, mientras n > m, no tendremos ese
problema. Además, debe cumplirse que n >0, ya que sino tenemos λ en el lenguaje, y entonces ya
no es código.
Por tanto n>m, n > 0 son las condiciones para que L sea lenguaje código.
11- Si un código es completo, entonces ¿es un lenguaje código maximal?
Un lenguaje código X es maximal sobre un alfabeto A si no está contenido estrictamente en ningún
otro lenguaje código sobre A, osea, si le añadimos cualquier palabra deja de ser lenguaje código.
Por otro lado, un código es completo si en su árbol asociado cada nodo es una hoja o tiene nnodos inmediatamente descendientes, osea, es aquel que si le añadimos cualquier palabra deja de
ser prefijo.
Sabiendo esto podemos decir que los lenguajes código completos incluyen a los maximales, pero
también incluyen otros lenguajes prefijos que no son maximales y por tanto que un código sea
completo no implica que sea maximal.
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?
Podemos calcular la entropía como:
𝐻(𝑆) = − ∑ 𝑝𝑖 ∗ 𝑙𝑜𝑔2(𝑝𝑖 )
1≤𝑖≤𝑛
En nuestro caso, puesto que todas las probabilidades son iguales:
1
𝑙𝑜𝑔2( )
3 ) = 1.585
𝐻(𝑆) = −1 ∗ 3 ∗ (
3
Expresándolo en r-unidades (para r = 3):
𝐻3 (𝑆) =
𝐻(𝑆)
1.585
=
=1
𝑙𝑜𝑔2(3)
1.585
Tenemos que la longitud media de los símbolos de A es 1 { = (1 + 1 + 1) /3}, por tanto se cumple:
H3(S) <= Longitud Media <= H3(S) + 1
Con lo cual sabemos que este lenguaje es óptimo para 3 símbolos.
Si calculamos el lenguaje generado por la codificación de Shannon tenemos:
B = 1, 00, 01
Haciendo los mismos cálculos de antes, tenemos que la entropía para 2-unidades es 1.585 y la
longitud media es 1.667, por tanto, se sigue cumpliendo:
H3(S) <= Longitud Media <= H3(S) + 1
Descargar