En su sentido más general, un algoritmo es cualquier conjunto de instrucciones detalladas que dan como resultado un estado final predecible desde un comienzo conocido. Sin embargo, los algoritmos son tan buenos como las instrucciones dadas, y el resultado será incorrecto si el algoritmo no se define correctamente.
Ejemplos de algoritmos
Un ejemplo común de algoritmo serían las instrucciones para ensamblar un modelo de avión. Dado el conjunto inicial de una serie de piezas marcadas, se pueden seguir las instrucciones dadas para dar como resultado un estado final predecible: el avión completado. Los errores de imprenta en las instrucciones, o el no seguir correctamente un paso, resultarán en un producto final defectuoso.
Un programa de computadora es otro ejemplo generalizado. Cada programa de computadora es simplemente una serie de instrucciones, que pueden variar en complejidad, y se enumeran en un orden específico, diseñadas para realizar una tarea específica. Las matemáticas también usan algoritmos para resolver ecuaciones a mano, sin el uso de una calculadora. Un último ejemplo es el cerebro humano: la mayoría de las concepciones del cerebro humano definen todo comportamiento, desde la adquisición de alimentos hasta el enamoramiento, como resultado de un algoritmo complejo.
Clases de algoritmos
Si bien no existe un desglose universalmente aceptado para los diversos tipos de algoritmos, existen clases comunes a las que se acuerda con frecuencia que pertenecen los algoritmos. Entre estos se encuentran:
Algoritmos de programación dinámica: esta clase recuerda los resultados anteriores e intenta utilizarlos para acelerar el proceso de búsqueda de nuevos resultados.
Algoritmos codiciosos: los algoritmos codiciosos intentan no solo encontrar una solución, sino también la solución ideal para cualquier problema dado.
Algoritmos de fuerza bruta: el enfoque de fuerza bruta comienza en algún punto aleatorio y recorre todas las posibilidades hasta encontrar la solución.
Algoritmos aleatorios: esta clase incluye cualquier algoritmo que utilice un número aleatorio en cualquier momento durante su proceso.
Algoritmos de rama y límite: los algoritmos de rama y límite forman un árbol de subproblemas del problema principal, siguiendo cada rama hasta que se resuelve o se agrupa con otra rama.
Algoritmos recursivos simples: este tipo busca una solución directa de inmediato, luego retrocede para encontrar una solución más simple.
Algoritmos de retroceso: los algoritmos de retroceso prueban una solución; si se encuentra una solución, el algoritmo ha resuelto, si no, se repite una vez y se prueba nuevamente, continuando hasta que se encuentra una solución.
Algoritmos de dividir y conquistar: Un algoritmo de dividir y conquistar es similar a un algoritmo de bifurcación y vinculación, excepto que utiliza el método de retroceso de recurrencia al dividir un problema en subproblemas.
Algoritmos en serie y paralelo
Además de estas clases generales, los algoritmos también pueden dividirse en dos grupos principales: algoritmos en serie, que están diseñados para ejecución en serie, en los que cada operación se realiza en un orden lineal; y algoritmos paralelos, utilizados con computadoras que ejecutan procesadores en paralelo, en los que una serie de operaciones se ejecutan en paralelo entre sí. También existen algoritmos paralelos en el mundo natural en el caso de, por ejemplo, una mutación genética sobre una especie.