Um algoritmo é uma sequência de etapas bem definidas que produzem um resultado em tempo finito.
Etapa bem definida: isso é algo que você pode fazer ou calcular, que é definido com precisão. Apenas lendo a etapa, você sabe o que precisa fazer e como fazê-lo. Especificamente, você pode escrevê-lo em uma linguagem de programação conhecida e garantir que o fragmento do programa corresponda exatamente à etapa.
Sequência: as etapas são executadas em uma ordem especificada. As etapas podem ser executadas mais de uma vez, dependendo dos dados (loops) ou não executadas, dependendo dos dados (instruções if). Algoritmos paralelos impõem apenas uma ordem parcial nas etapas, então estou simplificando demais aqui. Seria mais correto descrevê-lo como um conjunto parcialmente ordenado do que como uma sequência, mas eu queria manter as palavras um pouco mais simples. Além disso, é facilmente possível incorporar um conjunto parcialmente ordenado em um pedido completo.
Resultado: um estado ou valor final. Não precisa ser previsível com antecedência, mas precisa ser um fim definitivo que satisfaça alguma condição. Isso significa que um sistema operacional não é um algoritmo, embora ele use muitos deles.
Finito: é garantido que um algoritmo pare em algum momento, pelo menos em uma máquina que possa funcionar por tempo suficiente. Não é necessariamente garantido que pare em um tempo previsível, e não é garantido que ele pare antes que o sol se expanda e fique vermelho em qualquer máquina existente. Isso também significa que um sistema operacional não é um algoritmo, pois, idealmente, ele será executado para sempre. Eu vi a palavra "procedimento" usada para descrever algo que seria um algoritmo se tivéssemos certeza de que isso iria parar em algum momento. (É possível ter um algoritmo que irá parar em um período de tempo desconhecido. Suponha que, digamos que a conjectura de Goldbach tenha sido matematicamente falsa, em uma prova não construtiva, portanto havia um número par> 2 que não era a soma de dois números primos Um algoritmo que simplesmente testava números pares terminaria,
O algoritmo é um tipo intencionalmente abstrato, por isso não consideramos perguntas como "É fisicamente possível executar isso antes da morte por calor do Universo?". Eles seriam muito difíceis de responder. Se estiver relacionado às operações do computador, é fácil implementá-lo em uma linguagem de programação.