Qual é a diferença entre uma heurística e um algoritmo?
algorithm
definition
heuristics
nomenclature
Desfile de rua
fonte
fonte
Respostas:
Um algoritmo é a descrição de uma solução automatizada para um problema . O que o algoritmo faz é definido com precisão. A solução pode ou não ser a melhor possível, mas você sabe desde o início que tipo de resultado obterá. Você implementa o algoritmo usando alguma linguagem de programação para obter (uma parte de) um programa .
Agora, alguns problemas são difíceis e você pode não conseguir obter uma solução aceitável em um tempo aceitável. Nesses casos, você geralmente pode obter uma solução não muito ruim muito mais rápido, aplicando algumas escolhas arbitrárias (suposições educadas): isso é uma heurística .
Uma heurística ainda é uma espécie de algoritmo, mas não explorará todos os estados possíveis do problema ou começará explorando os mais prováveis.
Os exemplos típicos são de jogos. Ao escrever um programa de jogo de xadrez, você pode imaginar tentar todos os movimentos possíveis em algum nível de profundidade e aplicar alguma função de avaliação ao tabuleiro. Uma heurística excluiria ramificações completas que começam com movimentos obviamente ruins.
Em alguns casos, você não está procurando a melhor solução, mas sim qualquer solução que se ajuste a alguma restrição. Uma boa heurística ajudaria a encontrar uma solução em um curto espaço de tempo, mas também pode falhar em encontrar nenhuma se as únicas soluções estiverem nos estados que ela escolheu não tentar.
fonte
Muitos problemas para os quais nenhum algoritmo eficiente para encontrar uma solução ótima é conhecido têm abordagens heurísticas que produzem resultados quase ótimos muito rapidamente.
Existem algumas sobreposições: "algoritmos genéticos" é um termo aceito, mas, estritamente falando, são heurísticas, não algoritmos.
fonte
Heurística, em poucas palavras, é um "palpite educado". Wikipedia explica isso muito bem. No final, um método de "aceitação geral" é considerado uma solução ótima para o problema especificado.
Enquanto um algoritmo é um método que contém um conjunto finito de instruções usadas para resolver um problema. O método foi comprovado matematicamente ou cientificamente para funcionar para o problema. Existem métodos e provas formais.
fonte
Um algoritmo é um conjunto de operações passo a passo autocontido a ser realizado 4 , normalmente interpretado como uma sequência finita de instruções (de computador ou humano) para determinar uma solução para um problema, como: há um caminho de A para B, ou qual é o menor caminho entre A e B. No último caso, você também pode ficar satisfeito com uma solução alternativa 'razoavelmente próxima'.
Existem certas categorias de algoritmos, das quais o algoritmo heurístico é uma delas. Dependendo das propriedades (comprovadas) do algoritmo, neste caso, ele se enquadra em uma dessas três categorias (nota 1):
Observe que um algoritmo de aproximação também é uma heurística, mas com a propriedade mais forte de que há um limite comprovado para a solução (valor) que ele produz.
Para alguns problemas, ninguém jamais encontrou um algoritmo 'eficiente' para calcular as soluções ótimas (nota 2). Um desses problemas é o conhecido Problema do Caixeiro Viajante. O algoritmo de Christophides para o Problema do Caixeiro Viajante, por exemplo, costumava ser chamado de heurística , pois não foi comprovado que estava a 50% da solução ótima. Uma vez que foi provado, entretanto, o algoritmo de Christophides é mais precisamente referido como um algoritmo de aproximação.
Devido às restrições sobre o que os computadores podem fazer, nem sempre é possível encontrar com eficiência a melhor solução possível. Se houver estrutura suficiente em um problema, pode haver uma maneira eficiente de percorrer o espaço da solução, mesmo que o espaço da solução seja enorme (ou seja, no problema do caminho mais curto).
As heurísticas são normalmente aplicadas para melhorar o tempo de execução dos algoritmos, adicionando 'informações de especialistas' ou 'suposições fundamentadas' para orientar a direção da pesquisa. Na prática, uma heurística também pode ser uma sub-rotina para um algoritmo ideal, para determinar onde olhar primeiro .
(nota 1) : Além disso, os algoritmos são caracterizados por incluírem elementos aleatórios ou não determinísticos. Um algoritmo que sempre executa da mesma maneira e produz a mesma resposta é chamado de determinístico.
(nota 2) : Isso é chamado de problema P vs NP, e os problemas classificados como NP-completos e NP-difíceis provavelmente não terão um algoritmo 'eficiente'. Nota; como @Kriss mencionou nos comentários, existem tipos de problemas ainda 'piores', que podem precisar de tempo ou espaço exponencial para serem computados.
Existem várias respostas que respondem a parte da pergunta. Eu os considerei menos completos e não precisos o suficiente, e decidi não editar a resposta aceita por @Kriss
fonte
Na verdade, não acho que haja muito em comum entre eles. Alguns algoritmos usam heurísticas em sua lógica (geralmente para fazer menos cálculos ou obter resultados mais rápidos). Normalmente, heurísticas são usadas nos chamados algoritmos gulosos.
Heurística é algum "conhecimento" que supomos ser bom usar a fim de obter a melhor escolha em nosso algoritmo (quando uma escolha deve ser feita). Por exemplo ... uma heurística no xadrez poderia ser (sempre pegue a rainha do oponente se puder, pois você sabe que esta é a figura mais forte). As heurísticas não garantem que você chegará à resposta correta, mas (se as suposições estiverem corretas) geralmente obtém respostas próximas da melhor em um tempo muito menor.
fonte
As heurísticas são algoritmos, portanto, nesse sentido, não há nenhum; no entanto, as heurísticas fazem uma abordagem de "suposição" para a solução de problemas, produzindo uma resposta "boa o suficiente", em vez de encontrar uma solução "melhor possível".
Um bom exemplo é quando você tem um problema muito difícil (leia NP-completo) para o qual deseja uma solução, mas não tem tempo para chegar a ele, então tem que usar uma solução boa o suficiente com base em um algoritmo heurístico, como encontrar uma solução para um problema de caixeiro viajante usando um algoritmo genético.
fonte
Algoritmo é uma sequência de algumas operações que, dada uma entrada, calcula algo (uma função) e produz um resultado.
O algoritmo pode produzir valores exatos ou aproximados.
Ele também pode calcular um valor aleatório com alta probabilidade próximo ao valor exato.
Um algoritmo heurístico usa algumas dicas sobre os valores de entrada e não calcula o valor exato (mas pode estar próximo do ideal). Em alguns casos especiais, a heurística pode encontrar a solução exata.
fonte
Um Algoritmo é um conjunto de instruções claramente definido para resolver um problema. A Heurística envolve a utilização de uma abordagem de aprendizagem e descoberta para chegar a uma solução.
Portanto, se você sabe como resolver um problema, use um algoritmo. Se você precisa desenvolver uma solução, então é a heurística.
fonte
Uma heurística geralmente é uma otimização ou estratégia que geralmente fornece uma resposta boa o suficiente, mas nem sempre e raramente a melhor resposta. Por exemplo, se você fosse resolver o problema do caixeiro viajante com força bruta, descartar uma solução parcial uma vez que seu custo exceda o da melhor solução atual é uma heurística: às vezes ajuda, outras vezes não, e definitivamente não para melhorar o tempo de execução teórico (notação big-oh) do algoritmo
fonte
Eu acho que Heurística é mais uma restrição usada no Modelo Baseado em Aprendizagem em Inteligência Artificial, uma vez que os estados da solução futura são difíceis de prever.
Mas então minha dúvida depois de ler as respostas acima é "Como a heurística pode ser aplicada com sucesso usando técnicas de otimização estocástica? Ou elas podem funcionar como algoritmos completos quando usados com otimização estocástica?"
http://en.wikipedia.org/wiki/Stochastic_optimization
fonte
Uma das melhores explicações que li vem do ótimo livro Code Complete , que agora cito:
fonte
Eles encontram uma solução subótimamente sem qualquer garantia quanto à qualidade da solução encontrada, é óbvio que faz sentido o desenvolvimento de heurísticas apenas polinomiais. A aplicação desses métodos é adequada para resolver problemas do mundo real ou grandes problemas tão incômodos do ponto de vista computacional que para eles não existe nem mesmo um algoritmo capaz de encontrar uma solução aproximada em tempo polinomial.
fonte