Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 16
Aula 16
Busca
Dada uma coleo de n elementos, pretende-se saber se um ca determinado elemento valor est presente nessa coleo. a ca Para efeitos prticos, vamos supor que essa coleo a ca e implementada como sendo um vetor de n elementos inteiros: vetor[0]..vetor[n-1].
Pesquisa seqencial u
Uma soluo poss percorrer o vetor desde a primeira ca vel e posio at a ultima. Para cada posio i, comparamos ca e ca vetor[i] com valor. Se forem iguais dizemos que valor existe. Se chegarmos ao m do vetor sem sucesso dizemos que valor no existe. a
Pesquisa seqencial u
1o passo inicializao ca i = 0; encontrado = 0; /*Falso*/
Pesquisa seqencial u
2o passo pesquisa while (i < TAMANHO && !encontrado) { if (vetor[i] == valor) { encontrado = 1; /*Verdadeiro*/ } else { i++; } }
Pesquisa seqencial u
3o passo tratamento do resultado if (encontrado) { printf ("Valor %d est na posicao %d\n", a vetor[i], i); } else { printf ("Valor %d n~o encontrado\n", a valor); } Ver mais detalhes em sequencial.c
Pesquisa seqencial u
Quanto tempo este algoritmo demora a executar? Em outras palavras, quantas vezes a comparao ca valor == vetor[i] executada? e
Pesquisa seqencial u
caso valor no esteja presente no vetor, n vezes. a caso valor esteja presente no vetor, 1 vez no melhor caso (valor est na primeira posio). a ca n vezes no pior caso (valor est na ultima posio). a ca n vezes no caso mdio. e 2 Veja exemplos em seq-random.c e seq-random2.c
Pesquisa binria a
Vamos supor agora que o vetor inicial estava ordenado por ordem crescente (se fosse por ordem decrescente o racioc era semelhante). Ser que poss resolver o nio a e vel problema de modo mais eciente?
Pesquisa binria a
Caso a lista esteja ordenada, sabemos que, para qualquer i e j, i < j, se, e somente se, A[i] A[j]. Portanto, comparando um determinado elemento com o elemento procurado, saberemos se o elemento procurado o elemento comparado, e se ele est antes do elemento comparado ou a se est depois. a
Pesquisa binria a
Se zermos isso sempre com o elemento do meio da lista, a cada comparao dividiremos a lista em duas, ca reduzindo nosso tempo de pesquisa. Se em um determinado momento o vetor, aps o sucessivas divises, tiver tamanho zero, ento o o a elemento no est no vetor. a a Ver mais detalhes em binaria.c
Pesquisa binria a
Quanto tempo o algoritmo de busca binria demora a a executar? Por outras palavras, quantas vezes a comparao ca valor == vetor[i] executada? e
Pesquisa binria a
caso valor no exista no vetor, log2 (n) vezes. a caso valor exista no vetor, 1 vez no melhor caso (valor a mediana do vetor). e log2 (n) vezes no caso mdio. e Veja exemplos em bin-random.c
Ordenao ca
Dada uma coleo de n elementos, representada em um ca vetor de 0 a n-1, deseja-se obter uma outra coleo, cujos ca elementos estejam ordenados segundo algum critrio de e comparao entre os elementos. ca