O que é um algoritmo?

12

O que exatamente é um algoritmo, como no que significa Algoritmo? O pouco que entendo da palavra é que ela não é específica para uma linguagem ou padrão de design específico, mas é um dos princípios mais básicos (então acho que essa pergunta me faz parecer estúpida).

Uma das "opções" que tenho para entendê-lo é que significa o método de fazer algo, que pode ser escrito como uma lista no pseudocódigo.

Quando escrevo código mais complicado, acho que o que precisa ser feito, com o que e como chegaria lá (não em uma linguagem de programação), depois escrevo isso no código. Essa é uma boa maneira de fazer isso e isso tem algo a ver com algoritmos?

(Queria perguntar aqui no Stackoverflow, porque não se trata de um problema / idioma específico, e tenho a sensação de que a maioria das pessoas aqui conhece o 'porquê', ou pelo menos as respostas aqui são mais detalhadas, em vez de no Stackoverflow onde é diferente, me desculpe se eu deveria ter perguntado por lá)

Jonathan.
fonte
5
Google? Wiki? google.com/search?q=algorithm
Maglob 17/04
1
@Apalala: Eu não acho que essas limitações se apliquem.
Josh K
2
@Apalala: Finito , desconhecido .
Josh K
2
@ Jonathan: "palavras que eu tenho que procurar"? Quais palavras? Seja específico . Este site não é mágico. Nós não te conhecemos. Nós não sabemos o que você lê. Não sabemos o que te confundiu. Por favor, seja específico .
precisa saber é o seguinte
1
@Apalala: "Finito" significa "limitado", nada mais. Um algoritmo é garantido para parar em algum momento. É muito mais fácil provar a finitude quando você tem algum tipo de previsão de que ela terminará; portanto, os algoritmos tendem a ser previsíveis, mas a previsibilidade não está na definição usual de algoritmos.
22611 David Thornley

Respostas:

19

Um algoritmo é uma sequência finita de instruções bem definidas para calcular uma função (ou executar um procedimento) que termina em um estado final bem definido.

John Bode
fonte
1
+1. "Finito, bem definido e eficaz" são os três critérios na entrada da Wikipedia. Você tem todos os três aqui também.
precisa saber é o seguinte
Estou preparado para assistir aos vídeos citados por @ Jörg, mas meu ponto de vista atual é que não apenas as etapas devem ser finitas. Se os recursos (incluindo tempo) não estiverem limitados, o procedimento poderá ser chamado ou rotulado como qualquer coisa, mas não como um algoritmo .
Apalala 18/04
@Apalala - Voltei aos meus livros e não vejo essa restrição em lugar algum. É possível que, para um determinado conjunto de dados ou entrada, um algoritmo não termine (algoritmos como o método Newton-Raphson para encontrar uma raiz podem ficar presos em um loop sem fim), mas isso não faz do algoritmo um algoritmo.
John Bode
As oscilações do @John podem e são rotineiramente detectadas em Newton-Raphson.
Apalala
1
@Apalala: isso soa mais como a definição de um programa do que de um algoritmo. Essa ideia de etapas discretas está presente nas máquinas de Turing, nas máquinas de registro, nas máquinas de acesso aleatório e, é claro, nos nossos computadores físicos reais, também em praticamente todas as linguagens de programação e, ainda que de forma mais implícita, no cálculo lambda. Mas essa é uma restrição arbitrária que não é inerente aos algoritmos. Os algoritmos analógicos , por exemplo, não possuem etapas distintas (na verdade, essa é a definição de um algoritmo analógico) e podem realmente ser implementados com um computador analógico.
Jörg W Mittag
15

Esta é realmente uma questão bastante interessante e, de fato, ainda é uma questão de pesquisa aberta.

Yuri Gurevich, um dos gigantes da teoria dos algoritmos, está dando uma série de palestras em vídeo no site da comunidade da Microsoft Channel9:

Como você pode ver, sua própria pergunta é realmente o título da segunda palestra. No entanto, eu sugiro fortemente que você assista todos os três.

O primeiro, em particular, contém alguns exemplos de algoritmos que invalidam praticamente todas as definições fornecidas na maioria das outras respostas aqui.

Jörg W Mittag
fonte
2
Obrigado pelos links. Você observará o seguinte no texto que acompanha o primeiro vídeo, como parte da definição de um algoritmo: "terminando eventualmente em um estado final final". A terminação é uma parte essencial da definição de um algoritmo. É por isso que sistemas operacionais e servidores sem terminação não são algoritmos.
precisa saber é o seguinte
4

Um algoritmo é como uma boa receita culinária . Você tem algumas entradas, algumas etapas intermediárias bem definidas e obtém um resultado final.

Aplicada à programação, é uma descrição inequívoca das etapas necessárias para solucionar um problema específico. Tudo o que você pode escrever na linguagem de programação de sua escolha pode ser visto como um algoritmo - mas normalmente o termo é usado apenas para tarefas lógicas ou matemáticas comuns, como classificação ou pesquisa.

Alexander Gessler
fonte
Existem muitos algoritmos que não fornecem necessariamente um resultado final. Um sistema operacional ou um servidor web, por exemplo, é um algoritmo para o qual dar um resultado final é geralmente considerado um bug.
Jörg W Mittag
@ JörgWMittag mas é um SO ou um servidor web "um algoritmo"? Eu acho que eles não são - eles podem resolver subproblemas de seu domínio usando algoritmos - e em todos os casos, eles definitivamente precisam de um resultado final - mas eles também têm partes que não são algoritmos e, como um todo, não são ' algoritmos t. (É como você disse em outro comentário - sistemas operacionais e servidores da Web são programas, mas não necessariamente algoritmos ).
Andres F.
2

Um algoritmo é um conjunto de regras ou processo (em um cálculo) usado para a solução de problemas. Basicamente, há um problema, você quer uma solução e o processo para essa solução é um algoritmo. Um algoritmo possui conjuntos finitos de regras / processos para chegar a uma solução.

Se você é como Edsger W. Dijkstra , você escreverá seu algoritmo em um pedaço de papel e trabalhará / refinará o algoritmo no papel até ficar satisfeito com seus algoritmos. Caso contrário (especialmente ao escrever documentações), um fluxograma é usado para representar diagramaticamente o fluxo de um algoritmo / processo. Isso permite que outras pessoas critiquem o fluxograma e melhorem, se necessário (sem se preocupar com a linguagem de programação necessária).

Não sei se isso responde à sua pergunta.

Buhake Sindi
fonte
Não gosto da palavra definida porque significa "não ordenada". Eu prefiro "seqüência", ou tupla evento para ficar na área de matemática
benjaminb
@ Ubiquité, Set não significa necessariamente "não solicitado". Você pode classificar um conjunto na ordem desejada (por exemplo, uma ordem aleatória). Ainda assim, isso não exige voto negativo por causa da interpretação das pessoas da palavra "conjunto". Além disso, você pode ter um conjunto composto, que é um agrupamento de conjuntos, que também faz parte dos algoritmos. Portanto, "conjunto" pode ser qualquer coisa, desde que seja adequadamente usado como uma solução algorítmica para um problema.
precisa saber é o seguinte
Eu não votei!
benjaminb
Desculpe, eu não pretendia culpar você pelo voto negativo. O voto negativo deve fornecer explicitamente os motivos do voto negativo.
Buhake Sindi
1

Algoritmo: um conjunto bem ordenado de operações que são 1) inequívocas e 2) efetivamente computáveis, de modo que a execução das operações a partir da primeira produza um resultado após um número finito de operações.

ThomasMcLeod
fonte
Exemplo de contador: um sistema operacional. Ele não produzir um resultado em tudo , na verdade, que é geralmente considerado um bug.
Jörg W Mittag
@ Jörg, bem, o sistema operacional produz muitos resultados que, juntos, produzem o resultado geral da prestação de serviços do sistema a aplicativos.
precisa saber é o seguinte
@ JörgWMittag Como eu disse em outros comentários, uma conclusão à sua observação seria que um sistema operacional não é, de fato, um algoritmo;)
Andres F.
1

Algoritmo É a combinação de etapas seqüenciais (essas etapas podem ser cálculos, processamento de dados e tarefas de raciocínio) usadas para resolver um problema de uma maneira muito simples e eficiente.

Ele é projetado com mais eficiência que pode ser expresso em uma quantidade finita de espaço e tempo. podemos implementá-lo em qualquer linguagem de programação.

Propriedades de um algoritmo: a seguir, estão as principais propriedades de um algoritmo: -

Um algoritmo deve ter um nome exclusivo. Deveria ter definido explicitamente conjuntos de entradas e saídas. Um algoritmo deve estar em ordem seqüencial com operações inequívocas. Ele deve ter algum ponto final, ou seja, pára em um período finito de tempo. Clique aqui para aprender sobre Design e Análise de Algoritmo

Mohd Junaid
fonte
0

Eu uso o termo para descrever uma fórmula para resolver um problema específico. A fórmula não precisa necessariamente ser escrita em matemática ou ter relação 1: 1 com um método. Na escola, algoritmos e estruturas de dados estão intimamente relacionados e podem ser escritos como fórmulas matemáticas ou comprovados usando provas.

P.Brian.Mackey
fonte
0

Um algoritmo é uma abstração de um programa de computador e consiste em um conjunto de instruções para realizar alguma tarefa bem definida em um número finito de etapas, embora o limite na contagem de etapas possa ser muito grande e as etapas individuais possam ser complexas ( tarefas finitas) por direito próprio. Embora existam programas (corretos) que são conhecidos como não algorítmicos, todos eles funcionam repetindo partes algorítmicas em algum padrão. (Mais interessantes são os programas cujo status de encerramento não é conhecido, mas a maioria dos programadores não lida com essas coisas intencionalmente; sei que não!)

Donal Fellows
fonte
0

OMI ninguém sabe muito bem :) Eu já vi o termo aplicado apenas a funções de cálculo matemático, a qualquer função que receba e produza saída e a qualquer coisa que receba e execute algum tipo de operação.

Você consideraria algum / todo o seguinte um algoritmo?

  1. Função que calcula a taxa de juros de um empréstimo por um período de 20 anos
  2. Lógica comercial que verifica se todas as informações foram inseridas em um pedido de empréstimo
  3. Uma finderfunção que consulta um banco de dados em busca de um objeto Customer
  4. Uma função "auxiliar" que limpa e formata a entrada de dados
  5. Uma função que analisa um arquivo XML e mapeia dados para objetos de negócios
  6. Uma classe que recebe entrada e as grava em um arquivo de texto
Wayne Molina
fonte
0

Um algoritmo é uma idéia, um método, uma técnica, "inteligente" para calcular ou executar uma tarefa que é abstrata por natureza, mas, como é executada em computadores no mundo real, aspiramos a usar o mínimo de recursos possível , que são, no mundo dos computadores, Tempo e memória.

JasonGenX
fonte
0

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.

David Thornley
fonte
-1

Se eu tivesse que dar uma definição geral, diria que um algoritmo é uma fórmula para resolver um problema de computação mais complexo do que e acaba sendo mais eficiente que a solução óbvia / força bruta.

Além disso, é importante observar que um algoritmo não é um código-fonte específico; é a própria computação. Entre outras coisas, isso significa que qualquer linguagem completa de Turing pode implementar qualquer algoritmo que qualquer outra linguagem completa de Turing possa implementar.

Mason Wheeler
fonte
Gostei muito desta resposta e acho que poderíamos ir um pouco mais longe e dizer (embora não relacionados à pergunta original): qualquer algoritmo é uma otimização de uma solução de busca por força bruta / árvore. Queria saber se isso pode ser provado formalmente.
Mjuba
-1 "Algoritmo" é um termo matemático bem definido.
Apalala 17/04
1
@Apalala, então o que impede você de redefini-lo por uma questão de clareza ou, digamos, melhor entendimento de sua essência? O algoritmo como um "conjunto de instruções" não diz quase nada para mim.
Mjuba
1
@mojuba Eu realmente não me importo se o termo será redefinido, mas acho que a definição tradicional foi útil, porque ao menos diferenciava as maneiras de abordar os problemas: Um algoritmo é uma receita para resolver um problema usando recursos finitos . Mude essa definição e a conseqüência previsível é que teremos que criar outra palavra que signifique o mesmo. Droga! Todo o conhecimento adquirido no século passado sobre computabilidade e complexidade desaparece sem uma sólida definição de algoritmo !
Apalala 18/04
1
Uma pesquisa de força bruta é um algoritmo. Geralmente não é um algoritmo bonito, e geralmente não vale a pena escrever. Não vejo utilidade real em excluir a força bruta e, em muitos casos, não está claro o que "melhor que a força bruta" realmente significa.
22611 David Thornley