You are on page 1of 5

Classificao e Pesquisa

Hlio Filho
helio.filho@aedu.com
Site: https://sites.google.com/a/aedu.com/heliofilho/
Ementa
Mtodos de Ordenao: seleo, troca distribuio, insero, intercalao e clculo de endereos
Pesquisa de dados: sequencial, binria, hashing, rvore de pesquisa, rvores binrias de pesquisa,
rvores AUL (AVL?), rvore patrcia, B-Trees
Objetivos
Manipular estrutura de ordenao e pesquisa
Sistema de avaliao
1 avaliao Peso 4
Prticas: 3,0 pts
Terica: 7,0 pts
2 avaliao Peso 6
Prticas: 3,0 pts
Terica: 7,0 pts
Projeto de Algortimos
Ziviani, Nvio
3 Ed. So Paulo
Contextualizao
Apresentaremos e disutiremos estratgias para efetuarmos a pesquisa de um elemento especfico em
um conjunto de dados.
Esta uma operao muito importante, uma vez que encontrada em diversas aplicaes.
Apresentaremos os mtodos de pesquisa sequencial e binria sobre a estrutura de dados vetor.
Pesquisa sequencial
a forma mais simples de se realizar pesquisas. Consiste em percorrer todo o vetor, elemento por
elemento, verificando se o item desejado est presente no vetor.
21

14

36

76

95

78

Perguntas:
1- Como verificar se o elemento 48 est no vetor?
2- Quantas comparaes so necessrias para encontrar o elemento 48?

35

48

56

71

void main(){
int vet[12]= {21,14,36,5,76,95,78,7,35,48,56,71}
int i, bachou = 0, num = 48;
for (i = 0; i < 12 && bachou ==0; i++) {
if (vet[i] == num)
bachou = 1;
if (bachou == 1) {
printf (O elemento %d esta no vetor, num)
printf (Foram realizadas %d comparaes, i)
}
}
Exerccio:
1- Reescreva o exerccio anterior utilizando funes, sendo:
1.1- Ler Vetor carregar os elementos do vetor
1.2- Informar Numeros Solicitar ao usurio um nmero para ser pesquisado no vetor
1.3- Buscar Elementos Percorrer o vetor em busca do nmero solicitado pelo usurio
1.4- Exibir Resultado Exibe o relatrio da pesquisa
2- Transcreva o exerccio anterior para Java (em casa)
void LeVetor (int vet[12]){
int i;
for (i = 0; i < 12; i++){
printf (Informe um nmero);
scanf (%d, &vet[i]);
}
}
int InformaNumero (){
int num;
printf (Qual numero deseja buscar?);
scanf (%d, &num);
return num;
}
int BuscaElemento (int vet[], int num){
int i;
for (i = 0; i < 12; i++){
if (vet[i] == num)
return i;
}

return -1
}
ExibeResultado (int res, int num){
if (res < 0 )
printf (O elemento %d no foi encontrado, num);
else
printf (O elemento %d foi encontrado com %d consultas, num, res);
}
void main (){
int vet [12], num, bRet;
LeVetor(vet[] );
num = InformaNumero();
bRet = BuscaEleemento (vet[], num);
ExibeResultado(bRet, num);
}
Analise de complexidade:
A anlise de complexidade se dar em funo dos dados de entrada e ser validado em torno de trs
situaes
Melhor caso: Corresponde ao menor tempo de execuo sobre todas as possveis entradas
Pior caso: Corresponde ao maior tempo de execuo sobre todas as entradas de tamanho N
Caso mdio: Corresponde mdia dos tempos de execuo de todas as entradas de tamanho N
No caso mdio ou caso esperado, a analise realizada com base em uma distribuio de
probabilidades sobre o conjunto de entradas de tamanho N e o custo mdio obtido com base nessa
distribuio.
Por essa razo, a analise do caso mdio geralmente mais dificil de se obter que as analises de melhor
e pior casos.
Seja F uma funo de complexidade tal que F(n) o numero de registros consultados no arquivo, ou
seja, o numero de vezes que a chave de consulta comparada com a chave de cada registro, os casos a
considerar so:
Melhor caso: F(n) = 1 (No ex. Do vetor abaixo, seria o N 1)
Pior caso: F(n) = 12 (ltima posio do vetor abaixo)
Mdio caso: F(n) =(n+1)/2 (imagine que o N pesquisado fosse o 35 [posio 9], essa formula
seria calculada assim: F(n)=(9 + 1)/2 = 5

21

14

36

76

95

78

35

48

56

71

10

11

12

Para Pensar:
Tem-se dois baldes sendo um de cinco litros e outro de tres litros. Faa uma sequencia envolvendo as
funes encher, esvaziar e derramar, at que o balde com capacidade de cinco litros contenha apenas
quatro litros.
1- Encher vazo3
2- Derramar vazo3 em vazo5
3- Encher vazo3
4- Derramar vazo3 em vazo5
5- Esvaziar vazo5
6- Derramar vazo3 em vazo5
7- Encher vazo3
8- Derramar vazo3 em vazo5
Melhor metodo:
1- Encher vazo5
2- Derramar vazo5 em vazo3
3- Esvaziar vazo3
4- Derramar vazo5 em vazo3
5- Encher vazo5
6- Derramar vazo5 em vazo3
26/08/2014
Ordenao
Ordenao interna e externa
Ordenao interna: a que pode ser feita na memoria (ex: vetor)
Ordenao externa: a que pode ser feita fora da memoria (ex: gravacao em midia externa)
Metodo de selecao ou troca
Consiste em pegar o primeiro elemento e o comparar com os demais, trocando de posicao quando
encontra um elemento menor. Isso e realizado tantas vezes quanto necessario.
Ordenao
temos ordenao interna e ordenao externa. A ordenao interna e aquela que e realizada diretamente
na memoria principal, enquanto que a ordenao externa e aquela que exige a leitura e/ou
armazenamento em disco, fita, CD, etc.
Metodos de ordenao
Selecao/troca
Esse metodo consistem em selecionar o menor item do vetor e a seguir troque-o com o item que esta
primeira posicao do vetor, Repita essas duas operacoes com os n 1 itens restantes, depois com os n
2 itens, ate que reste apenas um elemento.

For (i = 0/ i < TAM; i++) {


min = i/
for (j = i +1; j <TAM; j++){
if (vet[j] < vet[min]) {
min = j;
aux = vet[min];
vet[min] = vet[i];
vet[i] = aux;
}
}
}