Algoritmo de busca
Em ciência da computação, um algoritmo de busca, em termos gerais é um algoritmo que toma um problema como entrada e retorna a solução para o problema, geralmente após resolver um número possível de soluções. Uma solução, no aspecto de função intermediária, é um método o qual um algoritmo externo, ou mais abrangente, utilizará para solucionar um determinado problema. Esta solução é representada por elementos de um espaço de busca, definido por uma fórmula matemática ou um procedimento, tal como as raízes de uma equação com números inteiros variáveis, ou uma combinação dos dois, como os circuitos hamiltonianos de um grafo. Já pelo aspecto de uma estrutura de dados, sendo o modelo de explanação inicial do assunto, a busca é um algoritmo projetado para encontrar um item com propriedades especificadas em uma coleção de itens. Os itens podem ser armazenadas individualmente, como registros em um banco de dados. A maioria dos algoritmos estudados por cientistas da computação que resolvem problemas são algoritmos de busca.
Imagem: CS Unplugged · BY-SA · Openverse
Os algoritmos de busca têm como base o método de procura de qualquer elemento dentro de um conjunto de elementos com determinadas propriedades. Que podiam ser livros nas bibliotecas, ou dados cifrados, usados principalmente durante as duas grandes guerras. Seus formatos em linguagem computacional vieram a se desenvolver juntamente com a construção dos primeiros computadores. Sendo que a maioria de suas publicações conhecidas começa a surgir a partir da década de 1970. Atualmente os algoritmos de busca são a base de motores de buscas da Internet
Imagem: Arguez · BY-NC-SA · Openverse
Para espaços de busca virtuais
Algoritmos para a busca de espaços virtuais são usados em problema de satisfação de restrição, onde o objetivo é encontrar um conjunto de atribuições de valores para certas variáveis que irão satisfazer específicas equações e inequações matemáticas. Eles também são utilizados quando o objetivo é encontrar uma atribuição de variável que irá maximizar ou minimizar uma determinada função dessas variáveis. Algoritmos para estes problemas incluem a base de busca por força bruta (também chamado de "ingênua" ou busca "desinformada"), e uma variedade de heurísticas que tentam explorar o conhecimento parcial sobre a estrutura do espaço, como relaxamento linear, geração de restrição, e propagação de restrições.
Para sub-estruturas de uma dada estrutura
O nome de pesquisa combinatória é geralmente usado para os algoritmos que procuram uma sub-estrutura específica de uma dada estrutura discreta, tais como um grafo, uma cadeia de caracteres, um grupo (matemática) finito, e assim por diante. O termo otimização combinatória é normalmente utilizado quando o objetivo é encontrar uma sub-estrutura com um valor máximo (ou mínimo) de algum parâmetro. (Uma vez que a sub-estrutura normalmente é representada no computador por um conjunto de variáveis de inteiros com restrições, estes problemas podem ser vistos como casos especiais de satisfação restrita ou otimização discreta, mas eles geralmente são formulados e resolvidos em um ambiente mais abstrato onde o representação interna não é explicitamente mencionada.)
Busca pelo máximo de uma função
Em 1953, Kiefer concebeu a busca de Fibonacci, que pode ser utilizada para encontrar o máximo de uma função unimodal e tem muitas outras aplicações em ciências da computação.
Para computadores quânticos
Há também métodos de busca projetados para computadores quânticos, como o algoritmo de Grover, que são teoricamente mais rápidos do que a busca linear ou força bruta mesmo sem a ajuda de estruturas de dados ou heurísticas.


