Programa de Computador vs. Algoritmo

8

Dizem que um programa inclui algoritmos; no entanto, se nos referirmos à sua definição, um algoritmo é uma sequência de instruções escritas para executar uma tarefa especificada e um programa de computador também é uma sequência de instruções para executar algumas tarefas no computador.

Então, o que torna um programa diferente de um algoritmo? também é um tipo de algoritmo?

Na verdade, procuro definições formais para um algoritmo e um programa de computador para poder distingui-las ou identificar algoritmos dentro de um programa.

Atualização : notei na Wikipedia por uma definição informal (pelo menos sintaticamente) qualquer programa é um algoritmo.

Uma definição informal pode ser "um conjunto de regras que define com precisão uma sequência de operações". que incluiria todos os programas de computador , incluindo programas que não realizam cálculos numéricos. Geralmente, um programa é apenas um algoritmo se parar eventualmente .

Ahmad
fonte

Respostas:

11

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.

Pseudônimo
fonte
Obrigado por sua resposta precisa, apenas mais uma pergunta. Se considerarmos qualquer programa, independentemente do que ele faça, eles ainda recebem algumas entradas e seguem algumas instruções, além de fornecer alguns resultados à medida que são executados. Eles podem até não resolver nenhum problema (como chamamos), mas ainda é um mapeamento. eles poderiam ser conhecidos algoritmo, quero dizer qualquer programa?
Ahmad
11
Se estou lendo você corretamente, você está perguntando se uma definição formal de "algoritmo" deve ou não levar a condição de que seja "útil". Eu diria "não", apenas porque é impossível formalizar essa noção.
Pseudônimo
desculpa! meu inglês não está bem, então você diz "não" a quê? você admite que é impossível formalizar a utilidade de um programa e, apenas por definição, qualquer programa é um algoritmo? ou você diz que é necessário considerarmos a utilidade além do algoritmo?
Ahmad
11
Eu não acho que uma definição formal de "algoritmo" exija que seja útil, porque "útil" não pode ser formalmente definido.
Pseudônimo
Sua resposta é a mais útil neste tópico +1. Eu acredito que "essencialmente a mesma coisa", você quer dizer "semanticamente equivalente". Além disso, acho que todos os programas são essencialmente algoritmos (como diz o OP), pois todos os programas são implementações que mapeiam alguma entrada para alguma saída, mesmo que esse mapeamento esteja implícito. Como você afirmou, tudo depende da perspectiva.
doubleOrt
7

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 okth th element "é uma descrição perfeitamente boa de um algoritmo para encontrar o ko 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.

David Richerby
fonte
Eu acho que a precisão do algoritmo está relacionada ao conceito de matemática, lambda-calculus ou máquina de Turing, ainda não sei o que é essa linguagem de abstração? matemática ou uma língua natural com muitas declarações difusas
Ahmad
8
O algoritmo @Ahmad é um conceito informal. Não possui definição formal. Em certo sentido, é como uma prova matemática, que é diferente de uma prova formal em um sistema de prova formal. Acreditamos que as provas informais podem ser "aprimoradas" para provas formais em qualquer sistema de prova formal escolhido (forte o suficiente), assim como qualquer algoritmo pode ser totalmente implementado em qualquer linguagem de programação (completa em Turing).
Yuval Filmus
5

Os algoritmos na mentalidade de Turing-complete são geralmente especificados por entrada e saída. Programas reais fazem mais; eles

  • comunicar com o usuário,
  • comunicar com outras máquinas,
  • reagir ao meio ambiente,
  • não terminam e ainda são úteis,

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.

Rafael
fonte
Esse é um ponto muito bom. Mas você quer dizer algo como "geralmente especificado como um meio de mapear entrada para saída"? Apenas especificar a entrada e a saída não é suficiente: por exemplo, mergesort e quicksort produzem a mesma saída de qualquer entrada, mas não são considerados o mesmo algoritmo.
David Richerby
@DavidRicherby Eu estava pensando em especificação no sentido de PL; não especificamos mais nada; portanto, os algoritmos podem não fazer mais nada. Obviamente, temos que dar mais do que a especificação para descrever um algoritmo concreto.
Raphael
Bons pontos, mas se admitirmos que, no final, qualquer programa é um algoritmo, não sei como essas questões abordadas são medidas sobre um algoritmo. Talvez um tópico de IA ?!
Ahmad
Quem admitiria isso e por quê? E o que você quer dizer com medida aqui? (E eu certamente não vejo o ângulo AI aqui.)
Raphael
@Raphael Posso admitir (olhando a sintaxe, todos os programas parecem semelhantes, são seqüências de instruções ou mapeamento de entrada para saída), só não sei como outros recursos de um programa (aqueles que você abordou) podem ser extraído dessa definição. por exemplo, a diferença entre classificação rápida e MATLAB ou Windows Media Player !!
Ahmad
2
  • 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).

Ryan Colyer
fonte
2

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.

Alex Fitzpatrick
fonte
1

Um algoritmo é um conjunto de operações passo a passo independente a ser executado para resolver um problema específico ou uma classe de problemas.

Um programa de computador é uma sequência de instruções que cumprem as regras de uma linguagem de programação específica, escritas para executar uma tarefa especificada em um computador.

Os algoritmos são gerais e precisam ser traduzidos para uma linguagem de programação específica (implementada).

Benjoyo
fonte
11
Mas o ponto principal da questão é que um programa (seu código-fonte ou o binário compilado) é "um conjunto passo a passo independente de operações a serem executadas para resolver um problema específico ou classe de problemas".
David Richerby
Mas não é. Um programa não é essas operações, mas uma implementação delas: algo que as executa em um contexto particular. Por exemplo, o sortutilitário Unix não é um algoritmo de classificação, ele usa um algoritmo de classificação.
Reinierpost
1

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.

Pooja Thanekar
fonte
Bem-vindo ao Computer Science Stack Exchange. Leia cs.stackexchange.com/tour.if ainda não o fez.
babou 23/07/2015
1

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.

PMar
fonte
Isto não é universal. A definição que me ensinaram não incluía esse requisito.
Reinierpost
1

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^2abstrata 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.

Robert Mugattarov
fonte
Talvez seja melhor dizer que a chave de fenda não tem a intenção de girar parafusos? Em Inglês todos os dias, nós certamente dizer que uma chave de fenda que têm a finalidade de transformar parafusos: transformar parafusos é a coisa exata que foi projetado para fazer.
David Richerby
Além disso, não tenho certeza do que você quer dizer com "lógica de negócios" (muitos programas não têm nada a ver com negócios) ou dizendo que um algoritmo "não contém lógica de negócios nem partes do mundo real". Por exemplo, eu poderia perfeitamente formular um algoritmo de caminho mais curto em termos de cidades e estradas, em vez de vértices e arestas. O algoritmo não "contém ... pedaços do mundo real"?
David Richerby
@DavidRicherby, você está certo, meu fraseado é ambíguo. O que eu quis dizer é um propósito significativo . Girar parafusos para girar parafusos é inútil, assim como classificar uma matriz que nunca é usada. Por lógica de negócios, quero dizer toda a lógica do programa, exceto a lógica de utilidade e o padrão da pilha de tecnologias, ou seja, toda a lógica que realmente implementa o objetivo do programa, ou seja, a lógica de negócios de assar um bolo é misturar ingredientes e assar e não inclui aprender a misturar ou assar ( que é a lógica do utilitário reutilizado nesse caso).
Robert Mugattarov
@DavidRicherby, quanto aos bits do mundo real , quero dizer atualização, ou seja, um programa diferente de um algoritmo precisa se comunicar de alguma forma com o mundo físico. Um algoritmo, por outro lado, pode ser um conceito puramente matemático.
Robert Mugattarov
1

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.

Elétron romântico
fonte