Programao II Prof Mateus Raeder Transparncias baseadas nos
Programação II Prof. Mateus Raeder Transparências baseadas nos originais da profa. Patrícia Jaques Universidade do Vale do Rio dos Sinos Programação II – Prof. Mateus Raeder - São Leopoldo -
Pesquisa de Dados em Tabelas • Métodos para localizar entradas em tabelas, dado o valor de uma chave primária como argumento de pesquisa Chave Primária Info 1 7 . . . 2 9 . . . 3 14 . . . 4 35 . . . 5 78 . . . – Localizar: informações relativa às chaves: 35, 12 Programação II – Prof. Mateus Raeder
Técnica para Pesquisa Sequencial • Fazer uma varredura serial da tabela, comparando o argumento de pesquisa com a chave de cada entrada, até ser encontrada uma que seja igual (sucesso) ou até que seja atingido o final da tabela (não foi encontrado). Programação II – Prof. Mateus Raeder 3
Pesquisa Serial em Tabela não ordenada public static int pesquisa. Sequencial (int tab[], int arg) { int i = 0; while (i < tab. length) { if (tab[i] == arg) return i; else i = i + 1; } return -1; } Exemplo: procurando chave 4 Programação II – Prof. Mateus Raeder
Pesquisa Serial em Tabela ordenada public static int pesquisa. Sequencial. Ordenada (int tab[], int arg) { int i = 0; while ((i < tab. length) && (tab[i]<= arg)) { if (tab[i] == arg) return i; else i = i + 1; } return -1; } Exemplo: procurando chave 11 Programação II – Prof. Mateus Raeder
Pesquisa Sequencial • Método mais simples • Intuitivo Programação II – Prof. Mateus Raeder
Exercício: • Fazer um algoritmo para Pesquisa Sequencial de uma tabela (ordenada e não ordenada), considerando a tabela como uma lista encadeada. Programação II – Prof. Mateus Raeder
Pesquisa Binária • Método para ser aplicado em tabelas ordenadas • Reduz o nro. de elementos a serem considerados pela metade • Exemplo: Pesquisa de chave com valor 17 1 2 Programação II – Prof. Mateus Raeder
Pesquisa Binária • Técnica – Consiste na comparação do argumento de pesquisa (arg) com a chave da entrada localizada no endereço médio da tabela. – Se arg for maior do que a chave contida naquele endereço, o processo é repetido para a metade superior da tabela, e – se for menor, para a metade inferior. – Se for igual, a busca se encerra com sucesso. • A área de pesquisa é reduzida à metade do número de elementos a cada vez Programação II – Prof. Mateus Raeder
Exemplo pesquisa binária (1) Programação II – Prof. Mateus Raeder
Exemplo pesquisa binária (2) 0 1 2 3 4 5 6 7 8 9 Programação II – Prof. Mateus Raeder
Exemplo pesquisa binária (3) 0 1 2 3 4 5 6 7 8 9 Programação II – Prof. Mateus Raeder
Algoritmo Pesquisa Binária • Localizar, por busca binária, a posição ocupada pela chave de valor arg em um vetor tab, ordenado com reorganização física Parâmetros: tabela onde será feita a pesquisa arg: argumento de pesquisa Retorno : -1 não encontrou -1 chave está na posição Programação II – Prof. Mateus Raeder
Algoritmo Pesquisa Binária public static int pesquisa. Binaria (int tab[], int arg) { int inf, sup, med; inf = 0; sup = tab. length-1; while (inf <= sup) { med = (inf + sup)/2; //divisão inteira if (arg == tab[med]) return med; else if (arg > tab[med]) inf = med + 1; // procura na 2 a. metade else if (arg < tab[med]) sup = med - 1; // procura na 1ª metade } return -1; } Exemplo: busca da chave 43 inf 0 inf sup 1 2 2º 3º 3º 3 sup inf 4 5 6 7 8 9 1ºProgramação II – Prof. Mateus Raeder
Procedimento Recursivo para Pesquisa Binária public static int pesquisa. Binaria. R (int tab[], int arg) { return pesquisa. Binaria. R (tab, arg, 0, tab. length-1); } private static int pesquisa. Binaria. R (int tab[], int arg, int inf, int sup) { int med; if (inf > sup) return -1; med = (inf + sup)/2; //divisão inteira if (arg == tab[med]) return med; else if (arg > tab[med]) return pesquisa. Binaria. R(tab, arg, med + 1, sup); else return pesquisa. Binaria. R (tab, arg, inf, med - 1); } Programação II – Prof. Mateus Raeder
- Slides: 15