Tabla de contenidos
Los algoritmos se pueden encontrar en prácticamente todos los programas de computadora. Proporcionan una especie de guía específica según la cual una tarea específica se puede resolver paso a paso.
En pocas palabras, un algoritmo es un procedimiento finito y firmemente definido con el que se puede resolver un problema. Contiene instrucciones que se siguen paso a paso para lograr un objetivo específico. Los pasos individuales están claramente definidos para que siempre se lleven a cabo de la manera y el orden previstos.
Existen algoritmos en muchas áreas. Un ejemplo conocido de las matemáticas es el algoritmo euclidiano. Describe un procedimiento preciso con el que se puede determinar el máximo común divisor de dos números naturales. Pero las cosas cotidianas también pueden ser algoritmos: puede resolver un cubo de Rubik en pasos individuales fijos comenzando desde cualquier posición inicial.
Generalidad de algoritmos
Un algoritmo no es una regla para un problema específico, pero está destinado a resolver un cierto tipo de problema en general. Por ejemplo, el algoritmo euclidiano no se trata de resolver el problema «¿Cuál es el máximo común divisor de 12 y 4958?».
Más bien, este algoritmo está destinado a resolver el problema general de encontrar el máximo común divisor de dos números naturales. El algoritmo de un motor de búsqueda no es específicamente válido para «botas de goma rojas en la talla 42», pero procesa cualquier entrada en un nivel abstracto.
Finitud
Un algoritmo debe poder describirse completamente con un texto finito (finitud estática) y no debe ocupar memoria ilimitada con resultados intermedios en tiempo de ejecución (finitud dinámica) si ha de entregar un resultado después de un tiempo finito.
Determinación y determinismo
Un algoritmo tiene que entregar una instrucción concreta para un resultado intermedio en cualquier momento. Por lo tanto, siempre debe quedar claro qué hacer a continuación con una entrada o un resultado intermedio. Si el procedimiento es claro, es decir, solo se puede realizar un paso posterior por cada resultado intermedio, el algoritmo es determinista.
También existen algoritmos no deterministas. Contienen al menos un paso en el que se puede seguir procesando un resultado intermedio en varias rutas equivalentes. La decisión sobre cómo se trata un resultado intermedio no se fija en este punto, sino que se determina por casualidad, por ejemplo.
Por tanto, los algoritmos deterministas siempre tienen resultados determinados, es decir, una determinada entrada siempre termina en el mismo resultado. Los algoritmos no deterministas, por otro lado, pueden ofrecer diferentes resultados sin cambios de entrada o llegar a determinados resultados de diferentes maneras.
Terminación
Un algoritmo debe aceptar valores de entrada y ofrecer un resultado adecuado. Esto también significa que el procesamiento finaliza en caso de resultados o entradas intermedios no válidos y no entra en un bucle sin fin: un algoritmo normalmente está terminando, por lo que debe entregar un resultado después de un tiempo finito. También existen algoritmos no terminantes. Se trata principalmente de procesos que explícitamente nunca deberían detenerse por sí mismos, por ejemplo, porque controlan una máquina durante un período de tiempo indefinido.
Algoritmos en informática
Existen innumerables algoritmos establecidos que se utilizan en el desarrollo de software para una amplia variedad de propósitos:
- Cálculos complejos, por ejemplo, Algoritmo de Zassenhaus
- Proceso de clasificación, por ejemplo, Bubblesort, Quicksort
- Método de búsqueda, por ejemplo, Búsqueda lineal, búsqueda A
- Método de cifrado, por ejemplo, RSA, pez globo
- Compresión, por ejemplo, codificación de Huffman
Algoritmos en hardware
También se puede implementar un algoritmo en dispositivos electrónicos utilizando hardware. Un circuito integrado de aplicación específica (ASIC) es, por ejemplo, un circuito que puede mapear un algoritmo específico. Si un dispositivo asume una determinada tarea que debe resolverse algorítmicamente, un chip tan especializado es una alternativa de alto rendimiento al procesamiento por software.
En el caso de un ASIC, sin embargo, el algoritmo está anclado o mapeado en el lado del hardware. También hay matrices de puertas programables en campo (FPGA) con las que puede configurar de manera flexible sus propios circuitos y, por lo tanto, mapear una amplia variedad de algoritmos según sea necesario. Actualmente se utilizan cada vez más en sistemas integrados.