110 likes | 292 Views
Aula 10 Algoritmos de Busca. Aquiles Burlamaqui UERN. Roteiro. Motivação Definição Tipos de Algoritmos Exemplos Prática. Motivação. A maioria dos algoritmos estudados por cientistas da computação que resolvem problemas são algortimos de busca.
E N D
Aula 10Algoritmos de Busca Aquiles Burlamaqui UERN
Roteiro • Motivação • Definição • Tipos de Algoritmos • Exemplos • Prática
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.