Aula 10
Algoritmos de Busca
Aquiles Burlamaqui
UERN
Roteiro

Algoritmos de Busca




Motivação
Definição
Tipos de Algoritmos
Algoritmos de Ordenação


Bubble Sort
Quick Sort
Motivação


A maioria dos algoritmos estudados
por cientistas da computação que
resolvem problemas são algortimos
de busca.
Uma vez que armazenada uma
informação, em um dado momento
você precisará recuperá-la.
Definição


“Algoritmo que toma um problema como entrada e retorna a
solução para o problema, geralmente após resolver um número
possível de soluções.”
“Um algoritmo de busca é um algoritmo que recebe um
parâmetro C e tenta achar um registro no arquivo (ou tabela)
cuja chave é C. O algoritmo retorna um ponteiro para o
registro, ou NULL (ou índice inválido) caso não ache o
registro.”
Tipos de Algoritmos de Busca

Busca em vetor ordenado


Busca seqüencial
Busca Binária
Busca Seqüencial

Problema:

determinar se um dado número está ou não está em um dado vetor
ordenado. Mais precisamente, dado um número x e um vetor
crescente v[0..n-1], encontrar um índice m tal que v[m] == x .
Busca Seqüencial
// A função abaixo recebe um número x e um vetor
// crescente v[0..n-1]. Ela devolve um índice m
// em 0..n-1 tal que v[m] == x. Se tal m não existe,
// a função devolve -1.
int buscaSequencial (int x, int n, int v[]) {
int m = 0;
while (m < n && v[m] < x) ++m;
if (m < n && v[m] == x)
return m;
else
return -1;
}
Busca Binária

A chave é comparada com o elemento no meio da
tabela. Se for igual, a busca terminou. Caso
contrário, ela deve continuar ou na metade inferior
(se a chave for menor que o elemento do meio) ou
na metade superior da tabela (se a chave for maior
que o elemento do meio).
Busca Binária
//
//
//
//
A função abaixo recebe um número x e um vetor
crescente v[0..n-1]. Ela devolve um índice m
tal que v[m] == x ou devolve -1 se tal m não
existe.
int buscaBinaria (int x, int n, int v[]) {
int e, m, d;
e = 0; d = n-1;
while (e <= d) {
m = (e + d)/2;
if (v[m] == x) return m;
if (v[m] < x) e = m + 1;
else d = m - 1;
}
return -1;
}
Busca Binária

Sempre teremos


v[e-1]
<
x
<
v[d+1] .
É a base de muitos algoritmos
eficientes para diversos problemas.
Algoritmos de Ordenação
Bubble Sort

A idéia básica do Buble Sort é percorrer
os dados do vetor (arquivo)
sequencialmente várias vezes. Em cada
passagem pelos dados devemos
comparar cada elemento com o seu
sucessor (x[k] com x[k+1]). Se os
elementos não estiverem ordenados
devemos trocá-los de posição.
Quick Sort
BubbleSort
Quick Sort





O Quicksort adota a estratégia de divisão e conquista. Os passos são:
1. Escolha um elemento da lista, denominado pivô;
2. Rearranje a lista de forma que todos os elementos anteriores ao
pivô sejam menores ou iguais a ele, e todos os elementos posteriores ao
pivô sejam maiores ou iguais a ele. Ao fim do processo o pivô estará em
sua posição final. Essa operação é denominada partição;
3. Recursivamente ordene a sublista dos elementos menores e a
sublista dos elementos maiores;
A base da recursão são as listas de tamanho zero ou um, que estão
sempre ordenadas. O processo é finito pois a cada iteração pelo menos
um elemento é posto em sua posição final e não será mais manipulado
na iteração seguinte.
Quick Sort
Quick Sort
Download

Aula10 - Aquiles Burlamaqui