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. El tamaño de los datos a procesar
- 2. Calidad del código generado por el Compilador/Intérprete
- 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