septiembre 08, 2012

Algunos datos de lo que debes saber de los algoritmos

Un algoritmo se define como un conjunto de pasos finitos y ordenados que nos conducen a la resolución de un problema determinado. Es necesario conocer la definición de algoritmo para comprender sus aplicaciones así como su optimización.

A continuación se presenta las características que un algoritmo debe de tener:

  • Correctitud: Obvio es que lo primero es asegurar que el algoritmo realiza la tarea para la que se ha diseñado.
  • Finitud: Siempre debe terminar en una cantidad finita de pasos, es decir, garantizar que no se ejecutará eternamente.
  • Definibilidad: Los pasos que describen al algoritmo deben estar exentos de cualquier Ambigüedad.
  • Entrada y salida: Consistiendo en la información con que se trabajará desde el principio y el resultado que se desea obtener.
  • Efectividad: Cada paso del algoritmo debe consistir en una operación básica de ejecución exacta y finita, es decir, que cada paso sea realizable por una persona y que siempre se btengan los mismos resultados de manera exacta.

Los algoritmos son un conjunto de instrucciones que se representan tanto en diagramas de flujos como en pseudo código, esto para facilitar la lectura y el desarrollo de dichas instrucciones. Sin embargo los algoritmos requieren un conjunto de recursos adicionales independientemente de la metodología empleada (POO, Lógica, Procedural, etc.), y del lenguaje utilizado ( Python, Java, C++, etc.), así en el análisis de los algoritmos lo único que nos importará de los algoritmos es la función que realizan, y no los detalles de cómo la realizan.

Cuando se habla de  "recursos adicionales" nos referimos a la velocidad de la maquina tanto del hardware(RAM, Disco Duro, almacenamiento secundario) y software(tiempo requerido de un proceso determinado, tiempo de ejecución), todo eso es importante al momento de querer implementar un algoritmo eficaz y optimo, sin embargo hay que tener en cuenta que un mismo algoritmo puede tener un rendimiento distinto dependiendo del tamaño de la entrada, es decir no es lo mismo hacer una suma de 5 números con dos dígitos que hacer una suma de 5 números con mil dígitos.

Es ahí donde entra "El análisis de algoritmos" el cual es una parte importante de la Teoría de complejidad computacional más amplia, que provee estimaciones teóricas para los recursos que necesita cualquier algoritmo que resuelva un problema computacional dado. Estas estimaciones resultan ser bastante útiles en la búsqueda de algoritmos eficientes.

El análisis de algoritmos es el proceso que empleamos para determinar la cantidad de recursos (tiempo, espacio, etc.), necesarios para la ejecución de un algoritmo en particular. Siendo el tiempo de ejecución una función del tamaño de entrada, puede ser lineal, cuadrática, cúbica o logarítmica.

En resumen tenemos que el tiempo de ejecución de un Algoritmo depende de:

  1. 1. El tamaño de los datos a procesar
  2. 2. Calidad del código generado por el Compilador/Intérprete
  3. 3. Velocidad del computador.

Al momento de aplicar algún determinado algoritmo debemos de tener en cuenta que los trucos de programación más inteligentes no pueden hacer rápido un algoritmo ineficiente. Por tanto, antes de perder el tiempo intentando optimizar un código, debemos tratar optimizar el algoritmo.

0 comentarios:

Publicar un comentario