Vou dar a mesma resposta que dei no momento anterior em que essa pergunta surgiu.
Primeiro, entenda que não há uma boa definição formal de "algoritmo" no momento da redação. A palavra-chave aqui é "formal".
No entanto, há pessoas inteligentes trabalhando nisso.
O que sabemos é que, qualquer que seja um "algoritmo", ele fica em algum lugar entre "função matemática" e "programa de computador".
Uma função matemática é uma noção formal de um mapeamento de entradas para saídas. Assim, por exemplo, "classificar" é um mapeamento entre uma sequência de itens que podem ser solicitados e uma sequência de itens que podem ser solicitados do mesmo tipo, que mapeia cada sequência para sua sequência ordenada. Esta função pode ser implementada usando algoritmos diferentes (por exemplo, classificação de mesclagem, classificação de heap). Cada algoritmo, por sua vez, pode ser implementado usando programas diferentes (mesmo com a mesma linguagem de programação).
Portanto, o melhor controle que temos sobre o que é um "algoritmo" é que é algum tipo de classe de equivalência em programas, onde dois programas são equivalentes se fizerem "essencialmente a mesma coisa". Quaisquer dois programas que implementam o mesmo algoritmo devem calcular a mesma função, mas o inverso não é verdadeiro.
Da mesma forma, há uma classe de equivalência entre algoritmos, em que dois algoritmos são equivalentes se eles computarem a mesma função matemática.
A parte difícil de tudo isso é tentar capturar o que queremos dizer com "essencialmente a mesma coisa".
Existem algumas coisas óbvias que devemos incluir. Por exemplo, dois programas são essencialmente os mesmos se diferirem apenas por renomeações de variáveis. A maioria dos modelos de linguagens de programação possui noções nativas de "equivalência" (por exemplo, redução beta e conversão eta no cálculo lambda), portanto, também devemos incluí-las.
Qualquer relação de equivalência que escolhemos, isso nos dá alguma estrutura. Os algoritmos formam uma categoria em virtude do fato de serem a categoria quociente de programas. Sabe-se que algumas relações interessantes de equivalência dão origem a estruturas categóricas interessantes; por exemplo, a categoria de algoritmos recursivos primitivos é um objeto universal na categoria de categorias. Sempre que você vê uma estrutura interessante como essa, sabe que essa linha de investigação provavelmente será útil.
Em última análise, a diferença é de perspectiva. Um programa é um programa: uma sequência de instruções em alguma linguagem, talvez uma linguagem de programação ou instruções no nível da máquina. Os algoritmos são geralmente descritos em um nível mais alto do que as instruções da máquina ou as declarações da linguagem de programação, mas o quão alto é um nível bastante flexível. Por exemplo, em algumas circunstâncias, "Classifique a matriz e veja ok th th element "é uma descrição perfeitamente boa de um algoritmo para encontrar o k o maior objeto de uma matriz; em outras circunstâncias, convém especificar muito mais detalhes sobre como a classificação ocorre.
Como você diz, um algoritmo é algo como "um processo ou conjunto de regras a serem seguidos em cálculos ou outras operações de solução de problemas, especialmente por um computador". Então, literalmente, todo programa é um algoritmo. Normalmente, porém, falamos de programas implementando algoritmos. Geralmente, ao descrever um algoritmo, evitamos os detalhes de baixo nível de exatamente como as coisas são implementadas, assumindo que um programador competente possa implementá-lo no idioma de sua escolha.
fonte
Os algoritmos na mentalidade de Turing-complete são geralmente especificados por entrada e saída. Programas reais fazem mais; eles
e mais. Geralmente, essas coisas não são consideradas em algoritmos ou teoria da computação, mas são essenciais para a maioria dos programas.
fonte
Um algoritmo é uma abordagem sistemática para resolver um problema específico.
Um programa é um conjunto de instruções para um computador seguir.
Um programa, portanto, nem precisa resolver um problema. Tenho certeza de que todos podemos pensar em vários programas que causaram mais problemas do que solucionaram. Um programa pode ser uma implementação de muitos algoritmos, ou pode ser implementado através da aplicação de vários programas. Um programa pode até não conter algoritmos. Por exemplo, o programa vazio que simplesmente sai, ou talvez um Hello World, poderia ser considerado um programa sem algoritmo.
Como um algoritmo resolve um problema específico, ele se concentra em um conceito inteiro específico. Portanto, um algoritmo fornece etapas abstratas para processar um conjunto de informações relacionadas em um conjunto diferente de informações derivadas. Um programa não requer que seus constituintes sejam de todo relacionados conceitualmente. Por exemplo, um programa pode ter um ovo de páscoa, mas uma coisa chamada apropriadamente de algoritmo não deve. Você pode ter um vírus ou um Trojan à espreita em um programa, mas não em um algoritmo. O mais próximo que um algoritmo pode chegar disso seria algo como um backdoor em um algoritmo de criptografia, onde a falha planejada faz parte do relacionamento de informações estabelecido pelo algoritmo.
E, finalmente, um programa, como é a abreviação de um programa de computador, exige tautologicamente um computador. Um algoritmo não. Se eu separar sistematicamente as camisas, calças e meias da minha roupa antes de guardá-las, isso é um algoritmo. Ele lida com entradas e saídas relacionadas, pode ser descrito em um fluxograma e tem conseqüências calculáveis em termos de eficiência (por exemplo, o número de peças de vestuário que devem ser comparadas para encontrar meias correspondentes).
fonte
Um algoritmo é um conceito ou idéia. É uma abordagem formal para resolver um problema. Os algoritmos podem ser expressos ou implementados em uma variedade de linguagem de programação (geralmente, quase qualquer linguagem pode implementar qualquer algoritmo). Para alguns exemplos, você deve ler os algoritmos de classificação na Wikipedia.
Um programa de computador é uma sequência específica de instruções em uma linguagem de programação específica. Um programa pode conter a implementação de muitos algoritmos. O Excel é um programa, mas seus recursos de classificação são a manifestação de um algoritmo.
fonte
Os algoritmos são gerais e precisam ser traduzidos para uma linguagem de programação específica (implementada).
fonte
sort
utilitário Unix não é um algoritmo de classificação, ele usa um algoritmo de classificação.Um algoritmo está expressando nossa ideia ou solução para um problema específico em uma abordagem passo a passo.
O programa é instruções passo a passo que implementadas para resolver problemas pelo sistema do computador. Deve ser compreensível não apenas pelo programador como pelo computador.
fonte
As outras respostas aqui, acho, perdem um ponto importante. A definição de 'algoritmo' que me ensinou incluía o requisito de que o procedimento seja interrompido em todas as entradas . Naturalmente, isso faz do 'programa' uma classe de procedimentos mais ampla que o 'algoritmo', uma vez que alguns programas param em todas as entradas e outros não.
fonte
Aqui estão algumas maneiras de traçar a linha entre um algoritmo e um programa:
Objetivo significativo
Os programas são escritos com uma finalidade e representam uma tentativa de atingir uma meta. Algoritmos podem ser vistos como ferramentas para atingir esse objetivo.
Por exemplo, uma chave de fenda é um algoritmo para modificar o estado de um parafuso, mas a própria chave de fenda não tem o objetivo de fazer isso. O objetivo está na cabeça do operador da chave de fenda que mantém o programa como colocar prateleiras.
Logíca de negócios
Este ponto está fortemente relacionado ao objetivo de um programa. Como os programas têm finalidades, inevitavelmente possuem partes do mundo real, como datas, medições, tecnologias, nomes etc.
Os algoritmos, por outro lado, não contêm lógica de negócios nem bits do mundo real e, em vez de operar com valores específicos, operam com variáveis.
Por exemplo, nesse sentido, você pode comparar uma função matemática como
f(x) = x^2
abstrata e opera com variáveis com uma receita culinária que contém valores precisos (pelo menos um para referência).Resultado
Este ponto está fortemente relacionado à lógica de negócios de um programa. Um agente (como um usuário do navegador da web) consome o resultado de um programa e não o resultado de um algoritmo.
Por exemplo, o consumidor de uma receita de cozinha consome o bolo e não o resultado de chantilly ou forno de aquecimento.
fonte
Tenho certeza de que outras respostas são boas o suficiente para assumir a liderança, mas eis como vejo a diferença entre um algoritmo e um programa
Um algoritmo consiste simplesmente nas etapas (independentes da máquina) necessárias para serem seguidas em alguma ordem para resolver um problema.
Um programa é um conjunto de instruções para um tipo específico de máquina para colocar um algoritmo em prática .
Por exemplo.
Digamos que você tenha um algoritmo que tenha uma etapa para chegar a um determinado local antes de executar outra etapa.Agora, como essa etapa de realização será realizada não está exatamente definida.Você pode optar por caminhar, correr ou pegar um ônibus para fazer isso. mas isso depende de como você escolhe implementá-lo (qual é o seu programa).
Você pode dizer que um algoritmo é uma abstração de um programa, isto é, falta os detalhes exatos, mas estabelece um plano para fazer alguma coisa.
fonte