algoritmos

Principios y Algoritmos de Concurrencia

“Compartir es malo... Al menos en programación concurrente 😜” -- Tweet del 13 de noviembre de 2015 Compartir es malo... Al menos en programación concurrente 😜 — Eduardo Díaz (@lnds) November 13, 2015 Hace unos 10 años atrás sufrí con un proyecto que involucraba la interacción de dispositivos biométricos y cámaras de seguridad. “¿Cuanto tomará este proyecto?” me preguntaron mis socios, “unas seis semanas, respondí ingenuamente”, finalmente me tomó varios meses, dolores de cabeza y malos ratos.

La Notación Big O

Un juego de adivinanzas Supongan el siguiente juego: “un jugador piensa un número que está entre 1 y 1.000, el otro debe tratar de adivinarlo haciéndole preguntas al primero, a las que sólo se puede responder con un Sí o un No.” Una manera de hacerlo es preguntando por cada número secuencialmente: “¿es el 1?", respuesta: “No”. “¿Es el 2?", “No”. “Es el 3”, “No”. etc. Si la persona pensó en el 999 o en el 1.

About Speed Hashing

Hace unos días atrás Jeff Atwood, el autor del famoso blog Coding Horror menciona mi trabajo de de 2005 sobre las colisiones de MD5: Eduardo Diaz has described a scheme by which two programs could be packed into two archives with identical MD5 hash. A special “extractor” program turn one archive into a “good” program and the other into an “evil” one. Aparte de que me honra la mención, y el autobombo :), hay dos cosas que me gustaría comentar sobre ese post.

Ensaladas y algoritmos

Hace unos años, probablemente inspirado por Ratatouille, me dió por cocinar. Mi mujer dice que no cocino mal, pero resulto un tanto caro como “chef”, aparte de desordenado (algo para mejorar). Pero he aprendido a preparar algunos platos, y he experimentado con otros, es una actividad que resulta bastante grata y relajante, quizás porque hay una relación con programar un algoritmo eficiente. Una de los platos mas sencillos y entretenidos para aprender a cocinar son las ensaladas, mejor si van acompañadas de alguna salsa.

Datos, datos, datos...

En 1980 IBM introdujo estos dispositivos de almacenamiento de aproximadamente 2.5 Gigabytes: Si mal no recuerdo vi algún “refrigerador” parecido a estos en la sala de servidores del CEC en la Escuela de Ingeniería cuando estudiaba. Ya para 1987 este modelito más compacto tenía la asombrosa capacidad de almacenar 7.5 Gigabytes: Hoy en día, tan solo 24 años después, contamos con dispositivos como este: Con una capacidad de 1 Terabyte, unas 134 veces más capacidad que , en la palma de la mano.

Un mundo controlado por algoritmos

El 26 de mayo de 2010 a las 14:45 horas de Nueva York se produjo un crash de la bolsa que hizo caer el índice Dow Jones en 900 puntos (una caida del 9%) el que se recuperó completamente unos pocos minutos después. A este fenómeno se le denominó el Flash Crash de 2010 Hay sobre 2.000 físicos de particulas que trabajan actualmente en Wall Street. Lo que hacen es modelar el comportamiento de las bolsas en algoritmos que transan acciones en cuestión de micro segundos.

P versus NP

El problema de P versus NP se considera el problema abierto más importante en la ciencia de la computación. De hecho el Instituto Clay lo incluye entre los 7 “problemas del milenio”, que corresponden a los problemas matemáticos abiertos más importantes según ese instituto. El premio por resolver alguno de estos problemas es de un millón de dólares. La descripción del Instituto Clay sobre el problema P versus NP es más o menos la siguiente:

Los panqueques de Bill Gates

El problema de ordenar es uno de los temas básicos en la formación de todo programador. Pero quizás este conocido problema encierre la clave para entender como funciona la evolución de la vida. ¿Cómo? Esa es una historia que involucra nada menos que Bill Gates, pero antes de contarla repasemos este clásico problema informático. ¿Cómo ordenamos una serie de datos? Esta es una tarea tán básica, que la damos casi por sentada, incluso viene incluida en nuestros lenguajes, sistemas operativos, o incorporada como función estándar en todo programa de planillas de cálculos.

El poder de un algoritmo

Un algoritmo es un conjunto finito de instrucciones, bien definidas y ordenadas, que permiten realizar una actividad mediante pasos secuenciales y sucesivos hasta llegar a un resultado. Como dice Seth Godin: “cada instrucción es simple y repetible. Es importante entender que las instrucciones funcionan para todos los problemas similares, no sólo uno. A los algoritmos no les interesa si crees en elllos o no. Los algoritmos funcionan o no.” Por ejemplo, Darwin, a través de la teoría de la evolución planteó un algoritmo, simple, pero poderoso.

1 de 5.000 ó 5.000 de 1 (batch y transaccional)

Es fácil engañarse cuando se intenta optimizar, lo que parece lógico, y hasta numéricamente plausible puede estallarnos en la cara cuando lo analizamos en detalle, especialmente cuando lo ponemos a prueba en la práctica. Es típico que algún experto nos aconseje sobre usar determinada técnica, porque en teoría es más óptima. Los novatos tienden a aplicar estas propuestas sin cuestionarlas mucho. Los más viejos tendemos a confiar en la experiencia, y esta suele darnos la razón.