Un algoritmo es una secuencia de pasos bien definidos que producen un resultado en un tiempo finito.
Paso bien definido: eso es algo que puede hacer, o calcular, que está definido con precisión. Simplemente leyendo el paso ya sabes lo que tienes que hacer y cómo hacerlo. Específicamente, puede escribirlo en un lenguaje de programación que conozca y asegurarse de que el fragmento del programa coincida exactamente con el paso.
Secuencia: los pasos se ejecutan en un orden especificado. Los pasos pueden ejecutarse más de una vez dependiendo de los datos (bucles) o no ejecutarse en absoluto según los datos (si las declaraciones). Los algoritmos paralelos imponen solo un orden parcial en los pasos, por lo que estoy simplificando demasiado aquí. Sería más correcto describirlo como un conjunto parcialmente ordenado que como una secuencia, pero quería mantener las palabras un poco más simples. Además, es posible integrar fácilmente un conjunto parcialmente ordenado en un pedido completo.
Resultado: un estado o valor final. No tiene que ser predecible de antemano, pero sí tiene que ser un final definitivo que satisfaga alguna condición. Esto significa que un sistema operativo no es un algoritmo, aunque utiliza muchos de ellos.
Finito: se garantiza que un algoritmo se detendrá en algún momento, al menos en una máquina que pueda funcionar el tiempo suficiente. No se garantiza necesariamente que se detenga en un tiempo predecible, y no se garantiza que se detendrá antes de que el sol se expanda y se ponga rojo en cualquier máquina existente. Esto también significa que un sistema operativo no es un algoritmo, ya que idealmente se ejecutará para siempre. He visto la palabra "procedimiento" utilizada para describir algo que sería un algoritmo si estuviéramos seguros de que se detendría en algún momento. (Es posible tener un algoritmo que se detendrá en una cantidad de tiempo desconocida. Supongamos, digamos que la conjetura de Goldbach se demostró matemáticamente falsa, en una prueba no constructiva, por lo que hubo un número par> 2 que no era la suma de dos números primos Un algoritmo que simplemente probaba números pares eventualmente terminaría,
El algoritmo es un tipo de cosa intencionalmente abstracta, por lo que no consideramos preguntas como "¿Es físicamente posible ejecutar esto antes de la muerte por calor del Universo?". Serían demasiado difíciles de responder. Si se relaciona con las operaciones de la computadora, es fácil implementarlo en un lenguaje de programación.