07 enero 2009

El algoritmo: ¿de qué se trata esta onda?

Seguramente has escuchado hablar de la palabra algoritmo, pero realmente ¿qué es?  O mejor dicho, ¿de qué se trata?  Y una vez que sabes que rollo, ¿cómo lo ejecuta la computadora?  Ante esta incógnita, voy a hablar un poco (o mejor dicho, escribir un poco) acerca de los secretos recónditos de un algoritmo.

La Real Academia de la Lengua (o RAE para los cuates), nos dice que un algoritmo es “Conjunto ordenado y finito de operaciones que permite hallar la solución de un problema”.  Con esto creo que queda muy claro de qué trata el rollo.

Sin embargo, ¿qué chiste tiene escribir aquí lo que dice la RAE?  Voy a adentrarme un poco a las raíces para remontarnos en la historia chirolira acerca del origen de la palabra algoritmo.  Esta palabra viene del apodo de Mohammed Ibn Musa Abu Djefar, mejor conocido como Al-Khwarismi (en español: Aljuarismi), un sabio musulmán que escribió más o menos alrededor del año 830 un libro sobre las matemáticas, concretamente sobre el álgebra.

Como ya se definió antes, un algoritmo consta de los pasos para resolver algún problema, algo así como una receta de cocina: si sigo los pasos, llego a obtener un platillo interesante (y esperemos que sabroso también).

Vamos viendo como se “ejecutaría” un algoritmo de cocina (o sea, una receta).  En primer lugar tenemos una entrada que constaría de los ingredientes necesarios.  En segundo lugar tenemos todo el equipo (hardware) necesario para cocinar (como ollas, cubiertos, platos, etc.), los cuales formarían la unidad de procesamiento.  Aunque no se note, existe una parte en el cerebro del cocinero que controla el proceso, cosa conocida como la unidad de control.  Y al final se tiene el platillo terminado, o sea la salida.  Estos componentes se pueden observar en la siguiente imagen:

Algoritmo1

Llevando nuestra receta a la computadora, tenemos que tomar en cuenta otro elemento importantísimo y vital: la memoria.  Aquí cambia poquito como se procesa información en comparación a nuestra receta culinaria.

  • La entrada consiste en todos los datos que se van a procesar, así como el programa que dice qué se va a hacer con estos datos.
  • La memoria almacena la entrada y los resultados de la unidad de procesamiento.
  • La unidad de control lee el programa y lo traduce en una serie de operaciones de máquina.
  • La unidad de procesamiento realiza todas las operaciones (sumas, multiplicaciones, etc.) sobre la información que recibe de la memoria.
  • La salida son los resultados de la unidad de procesamiento, almacenados en la memoria y transmitidos a un dispositivo de salida.

En un diagrama, lo veríamos así:

Algoritmo2

Los algoritmos se pueden representar básicamente de dos maneras: de manera gráfica y con texto.  Hay 2 o 3 representaciones gráficas donde la más conocida es el diagrama de flujo.  Estos diagramas usan símbolos para representar acciones y son tan conocidos que también son usados fuera del ámbito computacional.  Otro diagrama menos conocido, y que no me gusta para nada, son los diagramas NS o de Nassi-Schneiderman que representa un algoritmo en un bloque cuadrado con varios rectángulos interiores.  En cuanto a representaciones basados en texto, está el pseudocódigo, la cual no es más que todos los pasos escritos uno tras otro.

Escribir los algoritmos es algo fundamental para el buen programador.  Muchos de mis alumnos creen que es una pérdida de tiempo sentarse a pensar una solución, sin embargo es muy importante y te ahorra mucho trabajo, porque el error de programación más difícil de corregir es el lógico, el que surge de un algoritmo que no resuelve el problema.  Los errores de sintáxis, o sea de cosas mal escritas (te falta un punto y coma o un espacio, escribiste mal el nombre de la instrucción, etc.) se corrigen rápido ya que el compilador te indica en qué línea te equivocaste.  Pero ante errores lógicos no hay nada que pueda hacer el compilador.

Aunque vivió muchísimos años antes de los rollos de las computadoras y los algoritmos, Sócrates dijo algo que aplica a los errores lógicos: decía que no hay peor mal que la ignorancia en acción.  Te reto a que no dejes que la ignorancia entre en acción y planifiques tus algoritmos.  No es necesario que tengas que hacer un diagrama de flujo para cada algoritmo que hagas, pero encuentra una herramienta que te sea útil para pensar tu solución.  Por ejemplo, yo trato de diagramar mis sistemas con una mezcla de diagramas de Warnier con código en C.  Eso me funciona, pero tu debes de encontrar tu propia forma de solucionar retos.

¡Hasta la próxima!

Publicar un comentario
Related Posts Plugin for WordPress, Blogger...