Estructuras de Datos y Algoritmos (EDA)

Un curso sobre Tipos Abstractos de Datos

Archive for the ‘curiosidades’ Category

“El Arte de Programar Ordenadores”

without comments

knuth_7The Art of Computer Programming (TAOCP) es probablemente el libro más famoso de las Ciencias de la Computación. Tal es así, que suele conocerse como “la biblia de los informáticos” y su autor, Donald E. Knuth, es uno de los más reconocidos expertos en la Historia de la Informática.

A finales de 1999, TAOCP fue incluido por la publicación American Scientist entre los 12 libros más importantes de las “ciencias físicas” (las “no biológicas”) en el siglo XX, junto con el de Dirac sobre mecánica cuántica, el de Einstein sobre relatividad, el de Mandelbrot sobre fractales, el de Pauling sobre el enlace químico, el de Russell y Whitehead sobre fundamentos de matemáticas, el de von Neumann y Morgenstern sobre teoría de juegos, el de Wiener sobre cibernética, el de Woodward y Hoffmann sobre simetría orbital, el de Feynman sobre electrodinámica cuántica, el de Smith sobre la búsqueda de estructura, y la colección de artículos de Einstein de 1902 a 1909.

En el archivo MacTutor de Historia de las Matemáticas aparece una reseña biográfica de D. Knuth, en la que se cuenta lo siguiente sobre los orígenes de su libro TAOCP:

“Knowledge of his computing expertise was so well established by 1962 that, although he was still a doctoral student at the time, Addison-Wesley approached him and asked him to write a text on compilers. He began that project in the summer of 1962. […] By 1966 his book on compilers had grown to 3000 handwritten pages and Addison-Wesley realised that here was a much more major work than they had originally envisaged. Discussions led to a decision that Knuth should produce a seven volume work covering much more than compilers. The work became The Art of Computer Programming and publication began in 1968 when Volume 1: Fundamental Algorithms appeared. Volume 2: Seminumerical algorithms came out in the following year, and Volume 3: Sorting and searching in 1973. In the Preface Knuth writes that these are:

… books that have been designed to train the reader in the various skills which go into a programmer’s craft… [They are] not meant to serve as an introduction to computer programming; the reader is supposed to have some previous experience. [I aim to provide] (a) reference books which summarize the knowledge which has been acquired in several important fields, and (b) textbooks for self-study or for college courses in the computer and information sciences.

Knuth’s aim was to:

… organize and summarize what is known about the fast subject of computer methods and to give it firm mathematical and historical foundations.

… show that the connection between computers and mathematics is far deeper and more intimate than these traditional relationships would imply.”

Written by admin

diciembre 1st, 2014 at 11:05 am

Posted in curiosidades

Lectura avanzada: transformación de algoritmos recursivos en iterativos

without comments

Si bien la lección no está incluida en el programa de la asignatura, se incluye aquí un texto que trata la transformación de algoritmos recursivos en iterativos.
[issuu width=420 height=297 embedBackground=%23000000 backgroundColor=%23222222 documentId=121105155255-44efe93b155e49a6a28f9f29874148d6 name=recursivo_a_iterativo username=javier.campos tag=algoritmos unit=px v=2]
Pdf descargable aquí (autor: Javier Campos).

Written by admin

noviembre 7th, 2014 at 12:40 pm

Diviértete con Binky en estas fiestas del Pilar

without comments

binky

Haz clic en el cuadro negro de arriba para que empiece…

Directamente desde la Universidad de Stanford. Recomendable además leer el documento sobre “punteros y memoria” de la misma Universidad.

Written by Javier Campos

octubre 6th, 2014 at 11:03 am

Historia de los lenguajes de programación

without comments

La historia de los lenguajes de programación de alto nivel se extiende ya por más de medio siglo. En la siguiente imagen se incluyen algunos de los más representativos en el periodo 1954-2004, en los paradigmas imperativo, modular, objetual, funcional y lógico.

prog_lang_poster1

Los 50 primeros años de los lenguajes de programación (haz clic para verlo en grande en un fichero PDF)

Written by Javier Campos

septiembre 19th, 2014 at 10:10 am

Posted in curiosidades

Árboles de juego

without comments

Written by Javier Campos

diciembre 12th, 2013 at 11:28 am

El problema de las ocho reinas

without comments

El problema de las ocho reinas ha recibido mucha atención en el último siglo. Aquí tenéis un resumen de trabajos sobre el problema. Aquí está la solución habitual de backtracking. Aquí un ejemplo de solución de dividir para vencer (copia local, acceso restringido). Aquí un ejemplo de solución de búsqueda paralela. Aquí un applet para visualizar el problema, y aquí otro applet.

nqueens

Written by Javier Campos

diciembre 12th, 2013 at 11:15 am

Posted in curiosidades

Mejora del quicksort para conseguir coste O(n log n) en el caso peor

without comments

El quicksort, tal y como aparece en los libros, tiene un coste asintótico cuadrático en el caso peor.

No obstante, existe una modificación no trivial del quicksort que sí consigue un coste asintótico O(n logn). Consiste en elegir la mediana como el pivote que se utiliza para la partición del vector en dos trozos, en cada llamada recursiva del quicksort.

El cálculo de la mediana de los n datos de un vector es un caso particular del conocido como problema de selección, consistente en calcular el estadístico de orden k de esos datos (es decir, el dato que ocuparía la posición k en el supuesto en que se ordenasen los datos de menor a mayor). Si n es impar, la mediana sería el estadístico de orden (n+1)/2; si por el contrario n es par, hay dos medianas que son los estadísticos de orden n/2 y n/2 + 1.

Como decía, se conoce un algoritmo de coste asintótico lineal en el caso peor para el problema de selección y, por tanto, para el cálculo de la mediana. Os lo incluyo aquí debajo, extraído del libro Introducion to Algorithms, de Cormen, Leiserson, Rivest y Stein.

selection_is_linear

Written by Javier Campos

noviembre 19th, 2013 at 11:11 am

Uso de colas con prioridad en el algoritmo de Dijkstra

without comments

Las colas con prioridad (y por tanto la estructura de datos montículo con la que se representan en memoria) se utilizan a menudo para mejorar la eficiencia de algoritmos en los que iterativamente se precisa conocer el mínimo (o máximo) de un conjunto de valores y eliminarlo del conjunto. Ejemplo:

monticulos_y_dijkstra

Si utilizamos una cola con prioridades (montículo), añadiéndole una operación de reducción de clave, el algoritmo anterior queda de la siguiente forma:

Dijkstra usando cola con prioridades

(Detalles: en la asignatura Algoritmia Básica, de la Especialidad en Computación)

———

Por supuesto, la utilidad del algoritmo anterior se obtiene si n es grande.

n 10 100 1000 10000 100000 1000000
n log n 30 600 10000 130000 1600000 19000000
n2 100 10000 1000000 100000000 10000000000 1000000000000

Written by Javier Campos

noviembre 19th, 2013 at 11:06 am

Donald Knuth y el arte de programar ordenadores

without comments

knuth_7The Art of Computer Programming (TAOCP) es probablemente el libro más famoso de las Ciencias de la Computación. Tal es así, que suele conocerse como “la biblia de los informáticos” y su autor, Donald E. Knuth, es uno de los más reconocidos expertos en la Historia de la Informática.

A finales de 1999, TAOCP fue incluido por la publicación American Scientist entre los 12 libros más importantes de las “ciencias físicas” (las “no biológicas”) en el siglo XX, junto con el de Dirac sobre mecánica cuántica, el de Einstein sobre relatividad, el de Mandelbrot sobre fractales, el de Pauling sobre el enlace químico, el de Russell y Whitehead sobre fundamentos de matemáticas, el de von Neumann y Morgenstern sobre teoría de juegos, el de Wiener sobre cibernética, el de Woodward y Hoffmann sobre simetría orbital, el de Feynman sobre electrodinámica cuántica, el de Smith sobre la búsqueda de estructura, y la colección de artículos de Einstein de 1902 a 1909.

En el archivo MacTutor de Historia de las Matemáticas aparece una reseña biográfica de D. Knuth, en la que se cuenta lo siguiente sobre los orígenes de su libro TAOCP:

“Knowledge of his computing expertise was so well established by 1962 that, although he was still a doctoral student at the time, Addison-Wesley approached him and asked him to write a text on compilers. He began that project in the summer of 1962. […] By 1966 his book on compilers had grown to 3000 handwritten pages and Addison-Wesley realised that here was a much more major work than they had originally envisaged. Discussions led to a decision that Knuth should produce a seven volume work covering much more than compilers. The work became The Art of Computer Programming and publication began in 1968 when Volume 1: Fundamental Algorithms appeared. Volume 2: Seminumerical algorithms came out in the following year, and Volume 3: Sorting and searching in 1973. In the Preface Knuth writes that these are:

… books that have been designed to train the reader in the various skills which go into a programmer’s craft… [They are] not meant to serve as an introduction to computer programming; the reader is supposed to have some previous experience. [I aim to provide] (a) reference books which summarize the knowledge which has been acquired in several important fields, and (b) textbooks for self-study or for college courses in the computer and information sciences.

Knuth’s aim was to:

… organize and summarize what is known about the fast subject of computer methods and to give it firm mathematical and historical foundations.

… show that the connection between computers and mathematics is far deeper and more intimate than these traditional relationships would imply.”

Written by Javier Campos

octubre 30th, 2013 at 9:20 am

Posted in curiosidades

Las ocho reinas en un tablero de ajedrez

without comments

El problema de las ocho reinas ha recibido mucha atención en el último siglo. Aquí tenéis un resumen de trabajos sobre el problema. Aquí está la solución habitual de backtracking. Aquí un ejemplo de solución de dividir para vencer (copia local, acceso restringido). Aquí un ejemplo de solución de búsqueda paralela. Aquí un applet para visualizar el problema, y aquí otro applet.

nqueens

Written by Javier Campos

diciembre 18th, 2012 at 12:17 pm

Posted in curiosidades