Escolar Documentos
Profissional Documentos
Cultura Documentos
Contedo
Busca Seqencial
Busca mais simples Consiste em varrer linearmente o conjunto de dados at localizar (ou no) a chave desejada
int busca_seq(registro *A, int tam, int K) { int i = 0; while ((i < tam) && (A[i].chave != K)) i++; if (A[i].chave == K) return 1; else return 0; }
Busca Seqencial
int busca_seq(registro *A, int tam, int K) { int i = 0; while ((i < tam) && (A[i].chave != K)) i++; if (A[i].chave == K) return 1; else return 0; }
Duas comparaes dentro do lao Podemos otimizar fazendo busca com sentinela
int busca_sentinela(registro *A, int tam, int K) { int i = 0; A[tam].chave = K; while (A[i].chave != K) i++; if (i < tam) return 1; else return 0; }
int busca_seq_ordenado(registro *A, int tam, int K) { int i = 0; A[tam].chave = K; while (A[i].chave < K) i++; if ((i < tam) && (A[i].chave == K)) return 1; else return 0; }
Baseada no princpio de dividir para conquistar Usar varaveis que indiquem o incio e fim do conjunto
Faa meio=(incio+fim)/2 Se elemento procurado (X) == A[meio], achou Seno Se X < A[meio], faa fim = meio-1 Seno faa inicio = meio+1 Se no achou e inicio < fim, repita o processo
Busca Binria
Exemplo
10
20
30
40
50
60
70
80
90
100
10
20
30
40
50
60
70
80
90
100
3a. Iterao
10
20
30
40
50
60
70
80
90
100
Busca binria
Detalhamento 1 3 4 5 17 18 31 33
Se (inicio > fim) Retorne (-1) meio = (inicio + fim) / 2 Se (x = = v[meio]) Retorne (meio); Se (x < v[meio]) Busque por x em v de v[inicio] at v[meio 1]; seno Busque por x em v de v[meio + 1] at v[fim];
Busca binria
Implementao
Se (inicio > fim) Retorne (-1) meio = (alto + baixo) / 2 Se (x = = v[meio]) Retorne (meio); Se (x < v[meio]) Busque por x em v de v[inicio] at v[meio 1]; seno Busque por x em v de v[meio + 1] at v[fim];
Duas solues
Trabalho 2
Gerar colees de at 1.000.000 nmeros inteiros Ordenar essa coleo utilizando QuickSort Realizar a busca por 10 chaves geradas aleatoriamente
a) Utilizando busca sequencial ordenada b) Utilizando busca binria iterativa c) Utilizando busca binria recursiva