Algoritmos de busca

Propaganda
MC 102 – Algoritmos e programação de computadores
Profa. Wanessa Machado do Amaral
Aula 18 – Algoritmos de busca
Algoritmos de busca
Realizam a busca de um determinado elemento em um
vetor.
Existem vários algoritmos de busca, e novos são criados,
dependendo da aplicação.
Aqui veremos: busca sequencial e busca binária.
MC102 – Profa.Wanessa Machado do Amaral - 1s2010
Busca sequencial
Ou busca linear. Verifica elemento por elemento da lista, de
modo que a função do tempo de execução do algoritmo em
relação ao número de elementos é linear, ou seja, cresce
proporcionalmente.
Num vetor ordenado, não é o método mais eficiente.
Complexidade: * No melhor caso, o elemento é encontrado
na primeira alternativa.
* No pior caso, se o elemento não existir na lista ou estiver
na última posição, necessita de n comparações.
* No caso médio, o elemento é encontrado após n/2
comparações.
MC102 – Profa.Wanessa Machado do Amaral - 1s2010
Busca sequencial
// Retorna -1 caso não encontre ou a posição
// caso encontre.
int procura(char vetor[], int tamanho, char
elementoProcurado) {
int i;
for (i = 0; i < tamanho; i++) {
if (vetor[i] == elementoProcurado) {
return i;
}
}
return -1;
}
MC102 – Profa.Wanessa Machado do Amaral - 1s2010
Busca binária
Parte do pressuposto de que o vetor está ordenado e
realiza sucessivas divisões do espaço de busca (divisão e
conquista)
1- marca o elemento do meio da lista como o corrente (EC)
2- compara EC com o elemento procurado (EP)
Se EC = EP – achou! Pare.
Se EC < EP – inicio = EC, ou seja lista = L{EC, final}
Se EC > EP – fim = EC, ou seja lista = L{inicio, EC}
3- repete os procedimentos 1 e 2, até que o elemento seja
encontrado, termine a busca sem sucesso: inicio = fim;
MC102 – Profa.Wanessa Machado do Amaral - 1s2010
Busca binária
// Retorna -1 caso não encontre ou a posição procurada
int buscaBinaria(char vetor[], char procurado, int fim) {
int inicio, meio = 0;
while ( inicio <= fim ){
meio = (inicio+fim)/2;
if (procurado == vetor[meio])
return meio;
else if (procurado < meio)
fim = meio - 1;
else
inicio = meio + 1;
}
return -1;
}
MC102 – Profa.Wanessa Machado do Amaral - 1s2010
Busca binária
Procurar pela letra R:
1
2
3
4
5
6
7
8
9
10
A
C
E
H
L
M
P
R
T
Z
1
2
3
4
5
6
7
8
9
10
A
C
E
H
L
M
P
R
T
Z
MC102 – Profa.Wanessa Machado do Amaral - 1s2010
Comparação
Qual algoritmo é melhor: busca sequencial ou binária?
Para n = 1000, o algoritmo de pesquisa sequencial ira
executar 1000 comparacoes no pior caso, 500 operacoes
no caso medio.
●
Por sua vez, o algoritmo de pesquisa binaria ira executar
10 comparacoes no pior caso, para o mesmo n.
●
MC102 – Profa.Wanessa Machado do Amaral - 1s2010
Comparação
O algoritmo de pesquisa binaria assume que o vetor esta
ordenado. Ordenar um vetor tambem tem um custo,
superior ao custo da pesquisa sequencial.
●
Se for para fazer uma so pesquisa, nao vale a pena
ordenar o vetor. Por outro lado, se pretendermos fazer
muitas pesquisas, o esforco da ordenacao ja podera valer
a pena.
●
MC102 – Profa.Wanessa Machado do Amaral - 1s2010
Download