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