Professional Documents
Culture Documents
Por lo mismo es importante observar que las funciones generadoras no son realmente
funciones en en el sentido usual de ser mapeos entre un dominio y un codominio; el
nombre es únicamente el resultado del desarrollo histórico de su estudio.
Una función generadora es una cuerda de tender en la que colgamos una sucesión de números
para mostrarla
Herbert Wilf
Contenido
[ocultar]
La función generadora ordinaria de una sucesión (an) = a0, a1, a2, a3 ... se define como
Es común usar la expresión función generadora sin mayor calificativo, para referirse a
este tipo de función.
Ejemplo.
La sucesión de Fibonacci definida por la recurrencia
es la sucesión 0,1,1,2,3,5,8,13,21,...
Su función generadora es
Es posible definir funciones generadoras sobre varias variables. Por ejemplo, la función
generadora ordinaria en 2 variables de (am,n) donde n y m son índices que recorren los
enteros no negativos, es
[editar] Aplicaciones
Si bien las funciones generadoras son una herramienta usada ampliamente en
combinatoria, no existen métodos detallados que proporcionen solución a los problemas
en cada situación. Sin embargo existen ideas generales que pueden ser modificadas y
adaptadas en las diferentes situaciones que se presentan. A continuación se ilustran
varios usos de las funciones generadoras junto con la idea general que se está usando.
En esta situación lo que se hace es multiplicar ambos lados de la recurrencia por x^n y
sumar sobre todos los índices. Después se efectúan transformaciones para que la
igualdad entre sumas que se obtiene se convierta en una ecuación que involucra la
función generadora y se procede a resolverla.
Multiplicando ambos lados por xn y sumando sobre todos los valores de n se obtiene:
El lado izquierdo es casi la función generadora, pero los índices están desfasados. Pero
notando que
Cada uno de los denominadores (1-x), (1-x2) y (1-x5) son divisores de (1-x10), por lo que
podemos reescribir
De la expresión anterior se puede leer con detalle el valor exacto del coeficiente de xn,
es decir, el número cn de formas de pagar n pesos con monedas de 1,2 y 5 pesos. Por
ejemplo, el número de formas de pagar 77 pesos se obtiene calculando el término
correspondiente a x77:
y se concluye que hay 328 formas de pagar 77 pesos con monedas de 1, 2 o 5 pesos.
donde pn(x) es una sucesión de polinomios y f(t) es una función de cierta forma. Las
sucesiones de Sheffer se generan de modo similar. Véase el artículo principal polinomio
generalizado de Appell para más información.
[editar] Ejemplos
Artículo principal: Ejemplos de funciones generadoras
y en particular
[editar] Aplicaciones
Las funciones generadoras se emplean para
encontrar una forma cerrada para una sucesión dada en una relación de
recurrencia. Por ejemplo, considérense los números de Fibonacci;
encontrar relaciones de recurrencia para sucesiones: la forma de una función
generadora puede sugerir una fórmula de recurrencia;
encontrar relaciones entre sucesiones: si las funciones generadoras de dos
sucesiones tienen una forma similar, entonces las propias sucesiones
probablemente están relacionadas;
explorar el comportamiento asintótico de las sucesiones;
demostrar identidades que implican sucesiones;
resolver problemas de enumeración en combinatoria;
evaluar sumas infinitas.
TRADUCCION BIDIRECCIONAL
Nueva línea
De Wikipedia, la enciclopedia libre
Saltar a navegación, búsqueda
Contenido
[ocultar]
1 ¿Terminador o separador?
2 Representaciones
3 Protocolos de red
4 Unicode
5 Historia
6 N.l. en lenguajes de programación
7 Problemas comunes
8 Utilidades de conversión
9 Véase también
Si se usa como separador, un texto con las líneas A, B, y C quedaría grabado así
(representando el carácter de nueva línea con \n):
A \n B \n C
Entonces, la última línea (C) no tiene el código de nueva línea al final. Este
comportamiento está poco recomendado, y algunos programas tienen problemas
procesando la última línea de un fichero si no acaba con una nueva línea, así que la
convención general es tratar \n como terminador:
A \n B \n C \n
Este cambio puede afectar en el recuento de líneas de un fichero, pero no da problemas
mayores.
[editar] Representaciones
Las aplicaciones y los sistemas operativos normalmente representan el carácter nueva
línea con uno o con dos códigos de control:
Por tradición, la mayoría han funcionado usando el CRLF en el nivel de protocolo. Por
ejemplo, HTTP, SMTP, FTP e IRC, entre otros. Sin embargo, algunos recomiendan que
las aplicaciones también reconozcan un LF suelto.
[editar] Unicode
El estándar Unicode trata el problema definiendo un gran número de caracteres que las
aplicaciones han de reconocer como terminadores de línea. Según [1]:
Parece demasiado complicado frente a otras posibles soluciones, como por ejemplo
convertir todos los terminadores a un solo carácter como el LF, pero se ha hecho así para
que la conversión pueda ser bidireccional. Si transformamos un texto EBCDIC
cambiando todos los NEL por LF, y luego lo queremos devolver a EBCDIC, no
sabríamos si los LF de nuestra codificación corresponden a NEL o al propio LF de
EBCDIC.
En Unicode, se puede hacer la transformación sin perder información, de forma que los
programas siguen pudiendo reconocer todos los tipos posibles de terminadores de línea.
[editar] Historia
ASCII se desarrolló simultáneamente por el ISO y el ASA, la organización predecesora
de ANSI. Durante el período 1963-1968, los borradores (pre-estándar) de ISO permitían
usar tanto CRLF como LF para marcar una nueva línea, mientras que los borradores de
ASA permitían sólo CRLF.
El sistema operativo Multics empezó a desarrollarse en 1964 y usaba sólo LF. Unix
siguió la práctica de Multics, y sistemas posteriores siguieron a Unix.
Se especula que QDOS (que Microsoft compró y renombró a MS-DOS) adoptó CRLF
para copiar la implementación usada por CP/M. También se dice que CP/M eligió
CR+LF para introducir una clara incompatibilidad con Unix, y así intentar evitar una
posible denuncia de AT&T/Bell, que decía que CP/M violaba el copyright de Unix
porque estaba basado en Unix (según esta teoría). Otros creen que CP/M se parece más
a los sistemas de DEC (como el RSTS/E) que a Unix. En cualquier caso, esta
convención de QDOS pasó al siguiente sistema operativo comercializado por Microsoft,
el Windows, y sigue igual en la actualidad (2006).
1. Cada una de estas secuencias se traduce a un número que cabe en un sólo valor
char, y que depende de la implementación.
2. Cuando se escribe a un fichero de tipo texto (en contraposición a un archivo
binario), el \n se traduce de forma transparente al código de nueva línea nativo
del sistema, que puede ser de más de un carácter. Cuando se lee en modo texto,
la secuencia de nueva línea nativa se vuelve a traducir a \n. En modo binario no
se hacen estas traducciones.
En las plataformas Unix, donde nació C, la secuencia que indica nueva línea es el
código ASCII LF (0x0A), así que al principio se hizo que \n tuviera ese valor. Entonces,
como la representación interna y la externa son idénticas, la traducción que hay que
hacer en modo texto es nula, y modo texto y binario se comportan de la misma manera.
Esto ha hecho que muchos programadores ignoren por completo la distinción, cosa que
afecta al software desarrollado, que deja de ser portable.
Perl y C++ ofrecen la misma interpretación de '\n' que C. C++ también tiene std::endl,
que es la representación de una nueva línea en el sistema subyacente y vacía el stream
después de emitirlo. Perl tiene un 'binmode' para las traducciones literales a la hora de
leer y escribir en ficheros.
Java también proporciona las secuencias de escape \n y \r, que sí que garantizan que su
valor será 0x0A y 0x0D respectivamente. Para que un programa hecho en Java se vea
correctamente en el notepad, es necesario poner \r\n. Esto cobra vital importancia si se
trata de comunicar nuestro programa en Java con un programa hecho en C mediando un
archivo txt.
Las bibliotecas de entrada/salida de Java no traducen estas secuencias automáticamente,
como en C. En cambio, ofrecen funciones para escribir una línea completa añadiendo el
código nativo de nueva línea, y funciones para leer líneas que aceptan cualquier
secuencia como terminador (CR, LF, CRLF).
El problema puede ser difícil de detectar si algunos programas manejan bien los
terminadores de línea ajenos pero otros no. Por ejemplo, un compilador puede fallar con
extraños mensajes de error aun cuando el fichero fuente se muestra correcto en la línea
de comandos o un editor de texto.
Los navegadores web suelen poder trabajar con páginas codificadas en cualquier
sistema, y los editores de texto modernos permiten no sólo abrir ficheros de cualquier
codificación, sino convertir entre ellas (ver siguiente sección).
El programa de MS-DOS llamado EDIT también se puede usar para convertir un fichero
que use los terminadores de línea de tipo Unix. Sólo hay que abrir el archivo y volverlo
a grabar.
Se puede usar también el programa tr, que sí que está en cualquier sistema tipo Unix, y
que permite hacer cualquier tipo de transformación de caracteres. Para pasar de
DOS/Windows a Unix, eliminar todos los CR:
tr -d '\r' < fichero_entrada > fichero_salida
En sistemas Unix está el comando file, que permite identificar el tipo de terminadores
de línea que usa un fichero