sábado, 16 de julio de 2011

Introducción a los Algoritmos

Hola Amigos:

Este es mi primer post sobre lo que más me gusta hacer hoy en día, la Algoritmia

No sabía por donde empezar así que utilizaré el concepto del libro "Introduction to Algorithms" cuyos autores son Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest y Clifford Stein, más conocido como el "CLRS" por las iniciales de sus autores. En este libro nos dicen que "un algoritmo es un procedimiento computacional bien definido que toma algún valor, o conjunto de valores, como entrada y produce algún valor, o conjunto de valores, como salida. Un algoritmo es en consecuencia una secuencia de pasos computacionales que transforman la entrada en salida".

Prácticamente es la definición de un PAD (Proceso Automatizado de Datos) o Sistema: Entrada, proceso, salida, retroalimentación.


Los términos "programación" y "computación" son mal empleados en el contexto de nuestra realidad educativa ya que en nuestro país recién está naciendo la carrera llamada "Ciencias de la Computación".

Se confunde a la "programación" con la "ingeniería del software", esta última tiene que ver con el análisis y desarrollo de proyectos de software, de ahí vienen los términos "desarrollador" y "analista de sistemas". Programar no es lo mismo que desarrollar, ser "programador" es diferente de ser "desarrollador" y "analista", nunca utilizaras por ejemplo UML en un concurso de programación. Los programadores hoy en día conocen de "Ingenieria del Software", pero es raro ver que un "Analista" conozca de algorítmica. Para el Analista si lo que necesita no está en el Software de Aplicación que usa simplemente no lo implementará.

Computación es un término que deriva del latín "computare" que significa contar o calcular haciendo uso de los números, así que tampoco hay que confundir el estudio de programas que pertenecen al "Software de Sistema, de Aplicación y Utilitarios" con la Teoría de la Computación. Por ejemplo al estudiar Word no estás estudiando computación, es un "Software de Aplicación"  lo que realmente estás aprendiendo a utilizar.

Es común también confundir a la "Ingeniería de Sistemas" con las "Ciencias de la Computación", la primera ha sufrido muchos cambios en nuestro país, de carrera muy genérica y enfoque interdisciplinario que enfrenta problemas complejos ha pasado a mezclarse con algo de Aplicativos y le llamamos "Ingeniería de Sistemas y Computación", le hemos puesto algo de Desarrollo para llamarle "Ingeniería de Sistemas e Informática" y como si todo esto no fuera suficiente le hemos puesto algo de Administración y mucha "filosofía" y otras yerbas más, sólo faltó Gastronomía. Aquí en Perú se parte del concepto de que "Ingeniería" es "Ingenio" así que el resultado es una carrera muy "Ingeniosa" que intenta ser un clon disfuncional de las Ciencias de la Computación.

Los algoritmos están presentes en todo lo que haces, son esos amigos invisibles que están ahí, aunque no notes su presencia están en cada aliento y suspiro de tu vida, por ejemplo:

  • Cuando ordenas, filtras y buscas en una Hoja de Cálculo: Estás utilizando potentes algoritmos de Ordenamiento y Búsqueda.
Algoritmo de Ordenamiento QuickSort
  • Cuando te conectas a Internet: Tu router está utilizando potentes algoritmos basados en computación de Grafos para rutear la información que envias y recibes.

Algoritmo de la Ruta más Corta de Dijkstra
  • Cuando Comprimes  un Archivo: Estás utilizando potentes algoritmos de compresión con pérdida, sin pérdida, fractal, Huffman, etc.
  • Cuando escuchas una canción o disfrutas de un video: Estás empleando potentes algoritmos de codificación y decodificación.
  • Cuando implementas una contraseña: Estás empleando algoritmos de encriptación.

Esta lista me consumiría muchas lineas, sólo para que te des un ejemplo se descifró el genoma humano, nuestro mapa genético, está compuesto de 3 billones de pares bases de DNA donde la (A)denina se complementa con la (T)iamina y la (C)itosina con la (G)uanina, el genoma humano se puede tratar como una simple cadena compuesta de caracteres A, T, C, G.

Aquí nos ayudamos con un algoritmo llamado Programación Dinámica (Capítulo 15 del CLRS), con un caso particular llamado LCS (Long Common Subsequence) el cual nos ayuda a estudiar secuencias genéticas como las del cáncer. Te dejo el enlace de IBM sobre programación dinámica y Alineación Secuencial que está investigando en su área de Bioinformática y está implementando con JAVA. Clic aquí para visualizar el material de IBM.

A comienzos de este año (2011) desarrollé una serie de 4 videos a propósito del concurso de programación del FACEBOOK, yo estoy recién iniciando el camino en este deporte que es muy competitivo, la programación competitiva tiene altos estándares de exigencia y son auspiciados por GOOGLE, FACEBOOK, NASA, IBM entre algunas de las muchas corporaciones que buscan ingenieros competitivos en sus filas de trabajadores. Te dejo esta serie de 4 videos donde comprenderás todo lo explicado hasta aquí. Como es un video introductorio empleo el Visual Basic, pero actualmente utilizo JAVA para los contests, aunque la mayoría de los Coders profesionales usa el C, los rusos sin embargo prefieren JAVA, las ventajas de estos lenguajes para la programación competitiva sobre los de Visual Studio las explicaré en  un posterior artículo pero son muchas.

También entenderás por ahora de manera intuitiva pero clara el concepto de Tiempo Computacional.

La Importancia de los Algoritmos 01

La Importancia de los Algoritmos 02

La Importancia de los Algoritmos 03

La Importancia de los Algoritmos 04

Es muy posible que tenga algunos errores, pero creo que los conceptos quedan muy claros, repito como son videos introductorios empleo el Visual Basic .NET, particularmente te recomiendo para los concursos JAVA, C++, o PYTHON, además a mi me gusta codear en entornos UNIX.

Hasta el próximo post.

Marcelo Chamorro Avendaño

Licencia de Creative Commons
Introducción a los Algoritmos by Juan Marcelo Chamorro Avendaño is licensed under a Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported License.
Permissions beyond the scope of this license may be available at http://marcelodata.blogspot.com.

No hay comentarios :

Publicar un comentario