Você está na página 1de 6

CLASSIFICAO E PESQUISA

Pesquisa de Dados
Primeiramente sero apresentados dois mtodos de pesquisa para ento ser
apresentados os mtodos de ordenao. Os mtodos de pesquisa apresentados so:
Pesquisa seqencial ou linear;
Pesquisa binria.
Pesquisa de Dados: Seqencial
A pesquisa seqencial (ou busca linear) constitui a forma mais simples de busca de
um elemento num conjunto de dados. Esta busca inicia no primeiro registro e segue
seqencialmente at encontrar o elemento (ou chave) procurado. Na pior situao
possvel, a busca passa por todos os elementos do conjunto e no o encontra, sendo que na
melhor situao o elemento procurado est na primeira posio pesquisada. Este tipo de
tcnica indicado para conjuntos ordenados ou no.
A seguir ser ilustrada uma funo de pesquisa seqencial (negrito) em um programa
em C:
#include <stdio.h>
#include <stdlib.h> //funo rand()
#define TAM 100
int p_sequencial(int vet[TAM], int N){
int i=0;
while ((N != vet[i]) && (i<TAM))
i++;
return (i);//retorna a posio do vetor em que
o elemento est ou TAM se o elemento no
estiver no vetor
}
void main(){
int vetor[TAM], i, pos,N;
for(i=0;i<TAM;i++)
vetor[i]=rand();//gera nmeros aleatrios
printf("Digite o valor a ser procurado no vetor:");
scanf("%d",&N);
pos=p_sequencial(vetor, N);
if(pos<TAM)
printf("O numero esta na posicao: %d", pos);
else
printf("Numero nao existe no conjunto.");
}

Anlise de Complexidade
a) No melhor caso, o registro com chave igual procurada encontrado na primeira
posio, com apenas uma comparao.
C(n) = 1
b) No pior caso, de pesquisa bem sucedida, o registro localizado na posio N, com
um custo de N comparaes.
C(n) = n
c) No caso mdio, o nmero de comparaes para localizar o registro a mdia entre o
pior e o melhor caso, ou seja, (N+1)/2. Portanto, a complexidade da pesquisa
seqencial C(n), ou seja, cresce linearmente com o tamanho do vetor.
C(n) = (n +1)/2
d) Para pesquisas sem sucesso, temos o pior caso + 1.
C(n) = n +1.
Exemplo: Dado o vetor abaixo com 10 posies ou seja n = 10.
9 8 0 2 5 4 3 7 1 6
a) Quantas comparaes so feitas para achar o nmero 9? C(10) = 1
b) Quantas comparaes so feitas para achar o nmero 5? C(10) = 5
c) Quantas comparaes so feitas para achar o nmero 6? C(10) = 10
d) Quantas comparaes so feitas para achar o nmero 10? C(10) = 11
Exerccio
1. Execute o programa de busca seqencial mostrando o pior caso, o caso mdio, melhor
caso e o um caso sem sucesso, utilizando seu RA.
2. Dado o vetor A={9,7,5,2,4,6,10,3,1,8} faa um algoritmo utilizando uma pesquisa
seqencial para encontrar os nmeros pares.
Pesquisa de Dados: Binria
O algoritmo de busca binria s pode ser usado em um conjunto de dados ordenados.
O processo consiste em "dividir para conquistar", logo:
Divida um conjunto de elementos em duas partes;
Compare com a chave do elemento do meio;
Se a chave for igual ao elemento do meio, sucesso na busca (pare), se a chave
comparada for menor, o elemento est na parte esquerda da lista, se maior, na
parte direita;
Aplique o mtodo recursivamente.
Exemplo:

1. Verificar atravs da pesquisa binria se a chave NEI se encontra no vetor de registros


ordenados segundo as chaves [ANA, BIA, CID, EVA, GIL, IVO, LIA, RUI]
Soluo:
1
2
3
4
5
6
7
8
ANA BIA CID EVA GIL IVO LIA RUI

Meio =
(Esq+Dir)/2

Esq

Meio

Dir

Meio = (1+8)/2 = 4

Como NEI > EVA, Esq = Meio + 1 = 4 + 1 = 5


5
GIL

6
IVO

Esq

Meio

7
LI
A

8
RUI

Meio = (5+8)/2 = 6

Dir

Como NEI > IVO, Esq = Meio + 1 = 6 + 1 = 7


7
LIA

Esq, Meio

8
RUI

Dir

Meio = (8+7)/2 =7

Como NEI > LIA, Esq = Meio + 1 = 7 + 1 = 8


8
RUI

Esq, Dir

Meio = (8+8)/2 =8

Como NEI < RUI, Dir = Meio - 1 = 8 - 1 = 7


A nova partio (Meio = 8 e Dir = 7) uma partio vazia porque meio>dir e, como no
restam mais chaves, a pesquisa termina sem sucesso, ou seja, a chave NEI no foi
localizada.
2. Verificar atravs da pesquisa binria se a chave BIA se encontra no vetor de registros
ordenados segundo as chaves [ANA, BIA, CID, EVA, GIL, IVO, LIA, RUI]
Soluo:
1

ANA BIA CID EVA GIL IVO LIA RUI

Meio =
(Esq+Dir)/2

Esq
Meio
Como BIA < EVA, Dir = Meio -1 = 4 - 1 = 3
1
ANA

Esq

2
BIA

Meio

Dir

Meio = (1+8)/2 = 4

3
CID

Dir

Meio = (1+3)/2 = 2

Como BIA = BIA, sucesso na busca.


3. Verificar atravs da pesquisa binria se a chave IVO se encontra no vetor de registros
ordenados segundo as chaves [ANA, BIA, CID, EVA, GIL, IVO, LIA, RUI]
Soluo:
1
2
3
4
5
6
7
8
ANA BIA CID EVA GIL IVO LIA RUI

Meio =
(Esq+Dir)/2

Esq

Meio

Dir

Meio = (1+8)/2 = 4

Como IVO > EVA, Esq = Meio + 1 = 4 + 1 = 5


5
GIL

6
IVO

Esq

Meio

7
LI
A

8
RUI

Meio = (5+8)/2 = 6

Dir

Como IVO = IVO, sucesso na busca.


A seguir ser ilustrada uma funo de pesquisa binria (negrito) em um programa em
C:

#include <stdio.h>
#include <stdlib.h>
#define TAM 10
int p_binaria(int vet[TAM], int N){
int inicio=0;
int fim = TAM- 1;
int meio;
while (inicio<=fim)
{
meio = (inicio + fim)/2;
if (N < vet[meio])
fim = meio -1;
else
if(N > vet[meio])
inicio = meio+1;
else
return meio;
}
return -1; //retorna -1 se o elemento no existir
}
void main()
{
int vetor[TAM], i, N, aux, pos;
for(i=0;i<TAM;i++)
vetor[TAM]=rand();
for(i=1;i<TAM;i++)
{
aux=rand();
if( aux> vetor[i-1])
vetor[i]=rand();
printf("Digite o valor a ser procurdo no vetor:");
scanf("%d",&N);
pos=p_binaria(vetor, N);
if(pos<TAM && pos !=-1)
printf("O numero esta na posicao: %d", pos);
else
printf("Numero nao existe no conjunto.");
}

Exerccios
3. Execute o programa de busca binria, passo-a-passo, utilizando como dados de entrada o
vetor abaixo e procurando os nmeros:
1 2 3 4 5 6 7 8 9 10
i. 6
ii. 5
iii. 2
4. Faa uma comparao entre os mtodos de pesquisa seqencial e binria, mostrando
quantas comparaes seriam necessrias para achar um nmero em cada um dos vetores:
a. 9
1 2 3 4 5 6 7 8 9 10
b. 20
1 2 3 4 5 6 7 8 9 10
c. 3
1 2 3 4 5 6 7 8 9 10
5. Utilizando o vetor A faa um algoritmo com pesquisa binria e encontre os nmeros
mpares.
Bibliografia:
Livro-texto:
ZIVIANI, Nivio. Projeto de Algoritmos: com implementao em Pascal e C.. 2.ed. So
Paulo: Pioneira Thomson Learning, 2004. (Captulo 5)
Bibliografia Complementar
CELES, Waldemar; CERQUEIRA, Renato. Introduo a Estruturas de Dados: com
tcnicas de programao em C. 4.ed. Rio de Janeiro: Elsevier, 2004.