Remachado en Acero

23 Septiembre 2009

Problemas con el castellano: Soluciones (Segundo Problema)

Archivado en: Matemáticas — Etiquetas:, , , — Adrian @ 15:30

Viene de : problemas con el castellano: Soluciones( Primer problema )

En el post anterior resolvimos, usando funciones generatrices, el problema de hallar el numero de derivaciones de una cadena de n símbolos en una gramatica ambigua G sobre un alfabeto de una sola letra . Como las gramáticas independientes del contexto se usan casi como estándar para especificar la sintaxis de lenguajes de programación podemos contestar a preguntas como: ¿ Cuantos programas sintácticamente distintos se pueden hacer en C que tengan exactamente 37 símbolos ( o token’s ) ? Buscamos en la estantería el libro de Kerningham & Ritchie, seguramente fotocopiado en nuestro primer año de carrera, y vamos al apéndice en el que se especifica la gramatica. Recorremos y agrupamos todas sus reglas sustituyendo símbolos como ‘{‘ , ‘(‘ por símbolos iguales. Como ya hicimos el el post anterior traducimos cada grupo de reglas que deriva de un no terminal por una ecuación y resolvemos o bien a mano o ( si la idea de resolver un sistema de 100 ecuaciones no nos seduce demasiado) usando el ordenador . Una vez tenemos la función generatriz asociada al axioma no tenemos mas que calcular el coeficiente 37. Fácil, rápido y para toda la familia.

El segundo problema era: Encontrar el número p_n de cadenas bien formadas de n símbolos a escoger entre paréntesis de apertura ‘( ‘ y multiparentesis de cierre )^n . Donde bien formado quiere decir que si sustituimos cada )^n por n ) se obtiene una cadena bien formada de paréntesis.
La gramatica no-ambigua que genera estas cadenas podría ser algo del estilo de:

\displaystyle{ \begin{cases} S ::= ES \mbox{ } | E \\  E ::=  ( S )_2 \mbox{ } | (( S )_2 \mbox{ } | (((S )_3 \mbox{ } | \underbrace{ ((( \dots ((  }_\text{ i veces } S )_i  \dots \mbox{ } | \mbox{ } ( )_1 \mbox{ } | \mbox{ } (( \mbox{ } )_2 \mbox{ } | \mbox{ } ((( \mbox{ } )_3 \mbox{ } | \mbox{ } \underbrace{ ((( \dots ((  }_\text{ i veces }  \mbox{ } )_i \dots \end{cases} }

Pueden ponerse pegas por aquello de que la gramatica tiene infinitas reglas y esta construida sobre un alfabeto infinito, pero ¿qué es el infinito para nosotros?. Podemos sustituir los no terminales por simbolos iguales y obtener un sistema de dos ecuaciones como ya hicimos antes:

\displaystyle{ \begin{cases} f_S(z) = f_E (z) f_S(z) + f_E(z) \\ f_E(z) = z^2 f_S (z) + z^3 f_S (z) + z^4 f_S (z) \dots + \dots  + z^2 + z^3 + z^4 \dots \end{cases} }

Y sumando queda:

\displaystyle{ \begin{cases} \displaystyle{ f_S(z) = f_E (z) f_S(z) + f_E(z) } \\ \displaystyle{ f_E(z) = \frac{ z^2 }{ 1 - z } f_S (z) + \frac{ z^2 }{ 1- z } } \end{cases} }

Con esto ya podemos despejar f_S (z) . Ahora toca intentar encontrar una serie de potencias exactas o usar propiedades analíticas para obtener información de la sucesión p_n. Sustiyudendo y despejando se tiene :

\displaystyle{ f_S(z) = \frac{ 1- 2 w - \sqrt{ 1 - 4w } } { 2 w } \mbox{ Donde  } w = \frac{ z^2 }{ 1 - z } }

Ya conocemos la serie de potencias de f_S(w) del ejercicio anterior, solo tenemos que sustitur w(z) por su serie de potencias y operar :

\displaystyle{ \sum_{n=1}^{\infty} C_n \left ( \frac{ z^2 }{ 1 - z } \right )^n = \sum_{n=1}^{\infty} C_n z^{ 2 n } \sum_{m=0}^{\infty} {m+n-1 \choose n-1 } z^m }

Por lo que obtenemos una fórmula, no demasiado bonita ni cerrada para los p_N pero esto es lo que hay. No se me ha ocurrido ningún trucaje para redondearla un poco más. Por lo demas es fácil de obtener por razonamientos combinatorios aunque se deja para el lector, que yo empiezo a estar hasta los pelotaris del latex de wordpress.

\displaystyle{ p_N = \sum_{ 2n + m = N } C_n { m + n - 1 \choose n - 1 } }

16 Septiembre 2009

Problemas con el Castellano: Soluciones (Primer Problema)

Viene de Problemas con el castellano.

Advertencia: Todo lo que se diga aquí puede contener errores. Seguramente estas soluciones no sean las únicas ni las mejores.

Bueno, después de acabar el divertidísimo examen de Redes, toca solucionar los problemas.
Empecemos por el primero: contar el numero de cadenas de n paréntesis bien formadas. Llamemosle P_{n} . Quizás os recuerde un poco a los que habéis estudiado Matemática Discreta a los números de Catalán. Estos numeros aparecen cuando se quiere enumerar las maneras de parentizar una expresión de n + 1 elementos o lo que es lo mismo el número de maneras distintas de aplicar una operación binaria ( como la multiplicación ) a ( a_0, a_1...a_n ) (*). Algunos ejemplos:

\displaystyle{ \mbox{ Para } n = 2 \mbox{  } \begin{cases} (( a_0 * a_1 ) * a_2 ) \\ ( a_0 * ( a_1 * a_2 )) \end{cases} } \displaystyle{ \mbox{ Para } n = 3 \mbox{  } \begin{cases} ( a_0 * ( a_3 * ( a_2 * a_3 )) \\ ( a_0 * (( a_1 * a_2 ) * a_3)) \\ (( a_0 * a_1 ) * (a_2 * a_3 )) \\ (( a_0 * ( a_1 * a_2 )) * a_3) \\ ((( a_0 * a_1 ) * a_2 ) * a_3) \end{cases} }

Como vemos para n = 2 hay 2 mientras que para n = 3 hay 5 maneras; para un n cualquiera usamos la estrategia de dividir a nuestro enemigo. Supongamos que la cadena tiene la operación más externa después de a_k:

( ( a_0...a_k ) * ( a_{k+1}...a_n ) )

Sabiendo esto el número de maneras en la que podemos hacer las multiplicaciones es, el numero de maneras de las que podemos hacer la parte derecha C_{k} por el número de maneras de las que podemos hacer la parte izquierda C_{n-k-1}. Como la operación más externa puede estar en cualquier posición entre el 0 y el n-1 y dos expresiones son distintas si sus operaciones mas externa están en posiciones distintas tenemos que:

\displaystyle{ C_{n} = \sum_{ i = 0 }^{ n-1} { C_{i} C_{n-i-1} } }

Pero ¿ Que tiene que ver todo esto con nuestro problema inicial ? Pues mucho, supongamos que recorremos una de las cadenas de multiplicaciones de arriba asignando un +1 a cada asterisco y un -1 a cada símbolo de cierre ‘)’. Obtenemos una n-tupla ( x_1 ... x_{2n} ) con x_i \in \{-1,+1\} que cumple :

\displaystyle{ \begin{cases} x_1 + x_2 ... + x_{2n} = 0 \\ x_1  ... + x_k \ge 0 \mbox{ para todo } k \end{cases} }

Y cambiando ‘(‘ por +1 y ‘)’ por -1 esta es la definición de una cadena bien formada de paréntesis. Luego la solución es:

P_n = \displaystyle{ \begin{cases} C_{ n \over 2} \mbox{ si } n \mbox{ par } \\ 0 \mbox{ en otro caso } \end{cases} }

No obstante el problema puede plantearse de la siguiente manera alternativa. Sea G una gramatica no ambigua que genera cadenas bien formadas de paréntesis, como la que se muestra abajo; sustituyamos los paréntesis por símbolos iguales \alpha :

\displaystyle{ S ::= ES | E }
\displaystyle{ E ::= (S) | () }
\displaystyle{ S ::= ES | E }
\displaystyle{ E ::= \alpha S \alpha | \alpha \alpha }

Llamemos C_{S}(n) al número de derivaciones de una cadena de longitud n con S como axioma y C_{E}(n) si el axioma es E . Ya hemos nombrado a nuestro enemigo, primer paso hacia la victoria según Dorronsoro, ahora vamos a calcularlo. Imaginemos un árbol de derivación con el símbolo S en la raíz. Por las primeras 2 reglas ( las que parten de S ) lo que deriva de el es o bien un árbol con E en la raíz y n hojas o bien dos símbolos E y S cada uno de los cuales tiene j y n-j hojas, por ello:

\displaystyle{ C_S(n) = C_E(n) + \sum_{ i = 0}^{ n } C_E(i) C_S(n-i) }

Si tenemos un árbol de derivación con n hojas y con E en la raíz y n es igual a 2 solo podemos aplicar E ::= \alpha \alpha por lo que hay una única derivación. En otro caso el numero de derivaciones con E en la raíz es el mismo que el número de derivaciones de una cadena de n-2 elementos y S en la raíz, ya que E ::= \alpha S \alpha es la única regla aplicable. Luego (**) :

C_E(n) = \delta_2(n) + C_S(n-2)

Ahora tenemos un sistema de dos ecuaciones en recurrencia con dos incógnitas, que se reducen a una sustituyendo C_E(n) en C_S(n) . Haciendo algunas manipulaciones y suponiendo que n = 2n' queda la formula recursiva de los números de Cátalan C_{n'} de nuevo (***).

Despues de este pequeño triunfo gramatical, nos sentimos con ánimos como para abordar una gramatica cualquiera sobre el alfabeto \{ \alpha \} . Por simplificar supondremos que no tiene reglas lambda. Sea G una gramatica, imaginemos todas las reglas que derivan de un símbolo no terminal cualquiera E_k :

\displaystyle{ E_k ::= \omega_1 | \mbox{ } \omega_2 \mbox{ } ... | \mbox{ } \omega_i \mbox{ } ... \mbox{ } | \mbox{ } \omega_{m_k} \mbox{ con } \omega_i \in ( \Sigma_T \cup \Sigma_N )^{*} \mbox{ y } \omega_i  \ne \omega_j }

Si queremos saber cuantas derivaciones tiene la cadena de n símbolos, definimos C_{E_k}(n) para todos los E_k \in \Sigma_N como el número de arboles de derivación con n hojas y con E_k en la raíz. Cada una de las derivaciones E_k ::= \omega_i da un arbol distinto ( ya que \omega_i \ne \omega_j ) por lo que C_{E_k}(n) es la suma de todos los arboles posibles E_k en la raiz y en los que la primera regla aplicada fue E_k ::= \omega_i :

\displaystyle{ C_{E_k}(n) = \sum_{i=1}^{m_k} \# \{ \mbox{ arboles de } n \mbox{ hojas cuya primera derivacion fue } E_k ::= \omega_i  \} }

Como \omega_i = A_1 ... A_l la cadena de n símbolos terminales se puede descomponer en l subcadenas disjuntas, cada una de ellas derivando de un A_j en caso de qeu sean no terminal o siendo la la misma cadena en caso de que sean terminales. Esas subcadenas tienen longitudes n_1, n2, \mbox{ } ... \mbox{ } n_l con n_1 + n_2 \mbox{ } ... \mbox{ } n_l = n . Sabemos cuantas derivaciones tiene una cadena de n_j alfas que derive de A_j , esto es C_{A_j}(n_j) , por lo que el número de derivaciones para una “particion” n_1, n_2 \mbox{ } ... \mbox{ } n_l concreta es:

C_{A_1}(n_1) C_{A_2}(n_2) ... C_{A_l}(n_l)

Si sumamos para todas las particiones queda:

\displaystyle{ \sum_{ n_1 + ...n_l = n } C_{A_1}(n_1) C_{A_2}(n_2) ... C_{A_l}(n_l)  }

Con esto sabemos cuantos arboles hay con n hojas y cuya primera regla aplicada es E_k ::= \omega_i . Tenemos r incógnitas, C_{E_k}(n) , una por cada no terminal;y r ecuaciones en recurencia, una por cada grupo de derivaciones que parta de E_k . Solo hay que aplicarlas hasta llegar a n para obtener C_{S}(n) con S el axioma de la gramatica. Solo falta un caso base. Lo natural es pensar que los casos base pueden obtenerse cuando A_j es el simbolo terminal \alpha , ya que C_{\alpha}(n) = \delta_1(n) .

No nos engañemos, nada de esto es magnífico aun. Ya hemos resuelto el problema de hallar el número de arboles de derivacion solo que de una manera un tanto asquerosa ( con sistemas de muchas ecuaciones en recurrencia ). ¡ Es hora de dar recuperar la elegancia perdida ! . Vamos a usar funciones generatrices, la razon es facil: Si tenemos dos series \{a_n \} y \{ b_n \} cuyas funciones generatrices son f(z) y g(z) la serie \{ \sum_{ i + j = n } {a_i b_j } \} corresponde al producto de funciones f(z)g(x) . La expresion de arriba recuerda mucho a estas por lo que si definimos:

f_{E_k} ( z ) = C_{E_k}(1) z + C_{E_k}(2)z^2 + C_{E_k}(3)z^3 .....

Y todas las reglas que derivan de E_k estan en E_k ::= \omega_1 | \mbox{ } ... \mbox{ } \omega_{m_{k}} entonces:

f_{E_k} (z) = f_{\omega_1}(z) + f_{\omega_2}(z) .... + f_{\omega_{m_k}}(z)

\mbox{ Donde } \omega_{i} = A_1 ... A_l \mbox{ entonces } f_{\omega_i} (z) = f_{A_1}(z) f_{A_2}(z) ...f_{A_l}(z)

Como f_{\alpha}(z) = z tenemos un sistema de r funciones a despejar mediante r ecuaciones.
¡ Magnifico ! Las uniones (|) se traducen como sumas de funciones mientras que las concatenaciones se traducen como productos de funciones. Todo esto no deja de ser una curiosidad, pero choca que a veces unos objetos representen tan bien las propiedades de otros, al fin y al cabo la concatenacion de simbolos en cierto sentido es distributiva con la union y la union es conmutativa. De hecho en algunos contextos se usan los signos + y * para representar union y concatenacion, los mismos caracteres que para la suma y la multiplicacion ordinarias.

Si lo aplicamos a la gramatica de los paréntesis perdidos, tenemos:

\displaystyle{ \begin{cases} f_S(z) = f_E(z) f_S(z) + f_E(z) \\ f_E(z) = z^2 + z^2 f_S(z) \end{cases} }

Despejando f_S(z) se obtiene una funcion par por lo que g(z) = f_S( \sqrt{z} ) es una serie de potencias igual a la que generan los números de Catalan salvo en el termino independiente:

\displaystyle{ f_S(\sqrt{w}) = \frac{ 1 - 2w - \sqrt{ 1 - 4w } }{ 2w } }

Con esto resolvamos bastante más que el primer problema. Nos queda acabar el tercer problema y hacer de una vez el segundo problema, aunque creo que eso se deja para el siguiente post, que este ya es demasiado largo.

(*) : Podéis ver mas detalles sobre los números de Catalan en el libro de Pablo Fernandez, Capítulo 2 pagina 78.
(**) : He llamado \delta_k(n) a la función que vale \delta_k(n)= 1 si y solo si k = n y en otro caso es cero.
(***) : Hacerlo se deja para el maltratado lector.
(****) : Para escribir este post he hecho cosas muy muy feas mezclado html y latex para compensar las pobres opciones que tiene el latex de wordpress. A partir de ahora no hare nada por lo que el Dios de Tex no me deje entrar en su cielo.

Milagro

Archivado en: Personal — Adrian @ 12:04

Ha ocurrido un milagro. ¡He aprobado redes II ! Como no me lo creo del todo estoy deseando que cierren actas.

Ya he cumplido con dejar una mierda de entrada intermedia. Ahora a publicar las soluciones de los problemas.

3 Septiembre 2009

Problemas con el castellano

Mientras escribía el post anterior se me ocurrieron los siguientes problemas.
Cuando en castellano formamos una frase tenemos la posibilidad de hacer:

“Mi ordenador, comprado hace menos de un año, se desintegra”

o bien:

“Mi ordenador (comprado hace menos de un año) se desintegra”

Es decir podemos poner en un sintagma nominal una aclaración tanto entre comas como entre paréntesis
La aclaración puede llevar a su vez otro sintagma nominal, que puede llevar otra aclaración y así hasta el infinito y mas allá. Lo que da lugar a construcciones como:

“Calígula, asesinado por Tito mientras comía, yacía en el suelo.”
“Calígula, asesinado por Tito, atacado por Claudio mientras se bañaba, mientras comía, yacía en el suelo.”
“Calígula, asesinado por Tito, atacado por Claudio, derrotado por Lépido mientras dormía, mientras se bañaba, mientras comía, yacía en el suelo.”
etc (*) (**)

El primer problema es: En una frase como las de arriba en la que aparezcan n comas, ¿ cuantas interpretaciones como máximo hay ? No tener en cuenta ambigüedades dentro de las partes entre comas.

Vale, esta un poco forzado, pero me pareció gracioso. El problema es la ambiguedad. Si usáramos paréntesis no habría ambiguedades al analizar sintácticamente la frase, al menos no por este motivo, pero al sustituir en la gramática de los paréntesis tanto el paréntesis izquierdo como el derecho por símbolos iguales no podemos saber si terminamos una aclaración o empezamos una nueva. El problema matemático no parece ser mas que contar el número de cadenas bien formadas de paréntesis. La respuesta es bastante facil. ( Mentira, solo si has dado algo de discreta/resolver problemas antes, en otro caso es de un nivel normal )

El segundo problema es más interesante. Si a las frases anteriores les retiramos el “mientras…” queda algo del estilo:

“Calígula, asesinado por Tito, yacía en el suelo.”
“Calígula, asesinado por Tito, atacado por Claudio,, yacía en el suelo.”
“Calígula, asesinado por Tito, atacado por Claudio, derrotado por Lépido,,, yacía en el suelo.”
etc

Por razones que me son ajenas nuestros académicos desaconsejan escribir sucesiones de comas de longitud arbitraria, lo que introduce aún mas ambiguedad en el castellano. ¿ De cuantas maneras podemos interpretar frases como las de arriba en las que los grupos de comas consecutivos han sido sustituido por una sola coma ?
Me explico mejor, tenemos una cadena de n huecos y en cada hueco podemos poner o un paréntesis de apertura ‘ ( ‘ o un multi-parentesis de cierre ‘ )^{n} ‘ de modo que si sustituimos ‘ )^{n} ‘ por n paréntesis la cadena este bien formada. ¿ Cuantas cadenas así pueden formarse para cada n ?

Si reflexionamos un poco la primera cuestión nos esta preguntando cuantos árboles de derivación posee una cadena de n caracteres de una gramática ambigua sobre un alfabeto de solo un caracter. ¿ Se puede abordar el problema en general ?

El último problema : Si G es una gramatica independiente del contexto sin reglas A \rightarrow B ( para evitar infinitos ) sobre un lenguaje de un solo carácter ¿ Cuantas derivaciones puede tener como máximo una palabra de longitud n ? Obtener la cota óptima.

(*): No escribáis así si no queréis llevaros hondonadas de hostias.
(**): Estas frases carecen de veracidad histórica.

P.D.: Este es el primer post genuinamente friki del blog, según las amenazas de muerte ya veré si continúo con otros de este estilo.

22 Agosto 2009

Esperanza de Vida

Archivado en: Personal, Política — Adrian @ 23:37

Mi portatil, comprado hace menos de tres años, se colapsa sobre si mismo.
Quizas sea un poco exagerado expresarlo asi pero es cierto, desde principios del verano han dejado de funcionar: el boton de encendido ( con lo molesto que puede llegar a ser ), los altavoces ( que al fin y al cabo van montados cerca del interruptor por lo que pareceria “logico” que tambien se estropearan ) y hace unos dias la antena ( integrada en otro extremo del portatil por lo que se asume independencia ). Si ahora quiero conectarme a internet tengo que llevar el portatil al salon, desempolvar un cable ethernet para conectarlo al router, un enchufe para los altavoces externos y otro para alimentarlo de electricidad ( porque la bateria original da un tiempo de autonomia algo escaso ).

Lo que pasa parece una anomalia estadistica y deberia llamarnos la atencion ¿ cual es la probabilidad de que se estropeen tres componentes independientes de algo en un lapso de poco mas de un mes ? ¿No es algo estraño ? Es como esos viejos que llegan sanos hasta cierta edad y de repente desarrollan varias enfermaddades supuestamente incorreladas. Como si ciertas cosas tuvieran un cronometro y una barrera limite traspasada la cual todo falla.

A mi personalmente la paranoia y las teorias conspirativas son algo que me gusta mucho, la idea de que una mano negra quiere que mi portatil no dure mas de 3 años me seduce. Por no hablar de la inyeccion de ego de estar destapando una conspiracion, saber una verdad desconocida para todos ( o mejor dicho creer firmemente que se sabe ). Con estos pensamientos he recordado un video en el que se decia que nuestros bienes, no necesariamente mi portatil, duran bastante menos de lo que pudieran y no es una mano negra la que esta detras ni es una verdad solo conocida por mi. Por lo que no es una teoria de la conspiaracion. El video en cuestion, quizas lo hayais visto. Circuló el año pasado por internet :


y estaba sacado de un documental interactivo que podeis encontrar aquí, con la calidad original:
Story of stuff
Puede llamarse simplista pero a mi modo de ver es bastante instructuvo y claro. A veces se ve un intento de despertar la conciencia apelando a sentimientos, algo que personalmente detesto y que todo el mundo hace demasiado a menudo, como cuando habla de las madres o de los retardadores de llama.
Supongo que no dice nada que no sepamos, ya que lo dificil no es conocer la realidad sino afrontarla y enfrentarla. La indiferencia ante estos temas sencillamente se debe a que preferimos mirar para otro lado mas que a que estemos desinformados, aunque puede que en menor medida tambien lo estemos.

Otro aspecto que no me ha parecido demasiado justo es que da la sensacion de que se da mas importancia ( en tiempo dedicado ) al supuesto drama de gente “manipulada” para seguir consumiendo y haciendo girar la rueda con el de personas que extrae el coltan para las radios o fabrican cualquier otra cosa en condiciones de semi-esclavitud.

Por ultimo decir que me informé un poco mas sobre algunos de los temas y parece que aunque el tal Brook Stevens fue quien popularizo el término y lo promovio en varias conferencias, la idea de “Obsolencia Planificada” aparecio antes, en el articulo de un economista que culpaba de la depresion a aquellos que usaban sus bienes por encimas del tiempo predicho en las estadisticas y que proponia grabar el uso prolongado de bienes de consumo como medida para salir de la depresion. Tambien es cierto que en la postguerra dentro del mundo de la industria, el diseño y el marketing se debatio sobre cuanto se podia acortar la vida de un producto en funcion de su precio sin mosquear al consumidor.
Consulté lo de los retardadores de llama con Bromo y fueron prohibidos en la UE en 2007. Lo demas seguramente sigua igual o peor.
En fin ¿ vosotros que opinais de todo esto ?

3 Agosto 2009

Hello world!

Archivado en: Uncategorized — Adrian @ 20:27

Buenas a todos.

He decidido empezar un Blog y copiándole la idea a Marta  he dejado como título de la primera entrada “Hello World”, un homenaje para los que esta frase significa algo más que “hola mundo” en ingles.

Blog de WordPress.com.