14.03.2015 Views

ILA - Unisinos

ILA - Unisinos

ILA - Unisinos

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Aprendendo a Programar Programando numa Linguagem Algorítmica Executável (<strong>ILA</strong>) - Página 79<br />

Escrever x, " não encontrado"<br />

Fim_se<br />

Fim<br />

7.3 Pesquisa binária<br />

É fácil perceber que a pesquisa sequencial é muito ineficiente. Imagine que se queira<br />

pesquisar num dicionário o significado da palavra zumbaia. Pelo método anterior, começaríamos na<br />

letra a e iríamos de palavra em palavra até encontrar a palavra cujo significado estamos procurando<br />

(a propósito, zumbaia significa cortesia exagerada; cumprimento ruidoso e servil).<br />

Existe um método, chamado pesquisa binária, que se aplica quando o vetor possui seus<br />

elementos ordenados (que é o caso de um dicionário) e é bem mais eficiente que a pesquisa<br />

sequencial. Este método consiste em se comparar o valor a ser pesquisado x com o valor da<br />

componente que ocupa a posição central do vetor. Se x for igual a esta componente a pesquisa se<br />

encerra; se x for menor que esta componente, repete-se o raciocínio com a "metade inferior" do<br />

vetor; se x for maior que a componente central, repete-se o raciocínio com a "metade superior" do<br />

vetor. Isto se repete até que x seja encontrado ou que se tenha condições de se afirmar que x não está<br />

no vetor.<br />

Por exemplo, se se pretende pesquisar x = 16 no vetor Vet = (1, 2, 4, 7, 9, 11, 13, 14, 16, 18,<br />

19, 22, 24), compara-se 16 com o termo central do vetor (13); como x é maior que este termo<br />

central, repete-se o raciocínio com o vetor Vet1 = (14, 16, 18, 19, 22, 24). Assim compara-se 16<br />

com o novo "termo central" 18; como x é menor, raciocina-se com o vetor Vet2 = (14, 16). Agora o<br />

termo central é 14 e x é maior que ele. Passa-se então para o vetor Vet3 = {16} e aí a pesquisa se<br />

encerra com sucesso. O interessante da implementação deste método é que não há necessidade da<br />

criação destes vetores. Eles são criados abstratamente através de duas variáveis Prim e Ult que<br />

estabelecem quais são as primeira e última componentes do vetor que se está analisando.<br />

//Programa para pesquisa pelo método da pesquisa binária<br />

Variaveis<br />

Numerico Aux, i, x, Prim, Ult, Cent<br />

Matriz numerico Vet[50]<br />

Inicio<br />

Escrever "Digite os elementos da relação (-1 para encerrar)"<br />

Ler Aux<br />

Vet[1] = Aux<br />

i = 1<br />

Faca enquanto Vet[i] -1<br />

Ler Aux<br />

i = i + 1<br />

Vet[i] = Aux<br />

Fim_enquanto<br />

i = i - 1<br />

//Comandos para a pesquisa binária<br />

Escrever "Digite o valor a ser pesquisado"<br />

Ler x<br />

Prim = 1<br />

Ult = i<br />

Cent = Inteiro((Prim + Ult)/2)<br />

Faca enquanto (Vet[Cent] x) e (Prim < Ult)<br />

Se Vet[Cent] > x entao<br />

Ult = Cent - 1<br />

Senao

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!