Você está na página 1de 2

-Problema de busca

-Avaliar se um outro elemento do mesmo tipo dos elementos que estão contidos
em uma sequência está na sequência ou não
-A partir disso podemos ter uma definição do problema. A definição do
problema especifica quais as saídas possíveis de um problema, ou seja, quais as
respostas podemos esperar da solução do problema e quais são as condições que levam
a cada uma das repostas
-Pra o problema de busca nós temos 2 valores de entrada: o vetor no qual será
buscado o elemento e o elemento chave que será buscado na sequência em questão
-Nessa versão do problema de busca que iremos trabalhar as saídas são
verdadeiro, caso o elemento buscado seja encontrado na sequência, e falso caso o
elemento buscado não esteja contido na sequência
-Definição do problema de busca: uma função que retorna verdadeiro caso
a chave de busca esteja contida na sequência e retorna falso caso a chave de busca
não esteja contida na sequência
-Instância de um problema é quando temos um vetor específico e uma chave
específica que eu quero encontrar, e para cada instância temos uma solução
diferente que é relacionada àquela instância
-Conceitos importantes:
-definição do problema: é o que te diz qual a relação entre as saídas e
as entradas do problemas
-instância: que consiste em um conjunto de valores de entrada
específico para o qual eu espero uma solução
-solução: é a resposta para uma dada instância
-O processo de busca consiste em 3 operações principais:
-Escolher um elemento do conjunto/sequência
-Acessar/identificar a identidade/o valor desse elemento
-Comparar o valor armazenada no elemento com o valor de referência, ou
seja, a nossa chave
*Além disso essas 3 operações entram em um loop, que se encerra quando
a comparação for verdadeira ou quando não houver mais registros para avaliar
*Essa é a cara de basicamente todo algoritmo de busca, a diferença
entre cada um vai ser feita no modo de escolha do elemento que se quer comparar com
a chave

-Busca sequencial
-na busca sequencial é utilizada a informação sobre a organização do
espaço de busca em uma sequencia para facilitar a indicação da parte da sequencia
que já foi avaliada e a parte que ainda falta ser avaliada. Ela faz uma comparação
elemento a elemento, sendo que o primeiro elemento selecionado é o primeiro
elemento da sequência, o segundo elemento selecionado é o segundo elemento da
sequência e assim por diante até o último elemento da sequência, ou então o
contrário, ou seja, do último para o primeiro
-crescente: começa da primeira posição e vai até a última posição do
vetor
-decrescente: começa da última posição e volta até a primeira posição
do vetor
-Busca sequencial crescente recursiva
bool buscaSequencial(char* V, int N, char X){
if(N<=0){
if(V[0]==X){
return True;
}
return buscaSequencial(V+1, N-1, X);
}
return False;
}
-Busca sequencial decrescente recursiva
bool buscaSequencial(char* V, int N, char X){
if(N==0){
if(V[N-1]==X){
return True;
}
return buscaSequencial(V, N-1, X);
}
return False;
}

-Busca Binária
-também utiliza a informação de que a base de busca é organizada em uma
sequência (dessa forma com apenas um corte é possível separa a parte que já foi
avaliada e a parte que falta avaliar)
-além disso, utiliza uma informação sobre como os dados estão
organizados entre si. Um caso específico da busca binária exige que a sequência
esteja ordenada
-Busca binária recursiva
bool busca(char* V, int N, char X){
if(N==0) return False;
int ii = N/2;
if(V[ii]==X) return True;
if(V[ii]>X) return busca(V+ii+1, N-(N/2 + 1), X);
if(V[ii]<X) return busca(V, N/2, X);
}

-Busca binária iterativa


bool busca(char* V, int N, char X){
int pp = 0, qq = N-1;
while(qq-pp+1 > 0){
ii = (pp+qq)/2;
if(V[ii]==X) return True;
if(V[ii]>X) qq = ii-1;
else pp = ii+1;
}
return False;
}

Você também pode gostar