A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Programação II Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da Prof.

Apresentações semelhantes


Apresentação em tema: "Programação II Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da Prof."— Transcrição da apresentação:

1 Programação II Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da Prof. Patrícia Jaques

2 Programação II – Prof. Mateus Raeder Métodos para localizar entradas em tabelas, dado o valor de uma chave primária como argumento de pesquisa –Localizar: informações relativa às chaves: 35, 12 Pesquisa de Dados em Tabelas Chave PrimáriaInfo 17... 29 314... 435... 578...

3 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).

4 Programação II – Prof. Mateus Raeder Pesquisa Serial em Tabela não ordenada public static int pesquisaSequencial (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

5 Programação II – Prof. Mateus Raeder public static int pesquisaSequencialOrdenada (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 Pesquisa Serial em Tabela ordenada

6 Programação II – Prof. Mateus Raeder Pesquisa Sequencial Método mais simples Intuitivo

7 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.

8 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

9 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

10 Programação II – Prof. Mateus Raeder Exemplo pesquisa binária (1)

11 Programação II – Prof. Mateus Raeder 0 1 2 3 4 5 6 7 8 9 Exemplo pesquisa binária (2)

12 Programação II – Prof. Mateus Raeder 0 1 2 3 4 5 6 7 8 9 Exemplo pesquisa binária (3)

13 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: tab: tabela onde será feita a pesquisa arg: argumento de pesquisa Retorno : -1não encontrou  -1 chave está na posição

14 Programação II – Prof. Mateus Raeder Algoritmo Pesquisa Binária public static int pesquisaBinaria (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 2a. metade else if (arg < tab[med]) sup = med - 1; // procura na 1ª metade } return -1; } 1º 0 1 2 3 4 5 6 7 8 9 infsup 2º infsup Exemplo: busca da chave 43 1º inf 3º

15 Programação II – Prof. Mateus Raeder Procedimento Recursivo para Pesquisa Binária public static int pesquisaBinariaR (int tab[], int arg) { return pesquisaBinariaR (tab, arg, 0, tab.length-1); } private static int pesquisaBinariaR (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 pesquisaBinariaR(tab, arg, med + 1, sup); else return pesquisaBinariaR (tab, arg, inf, med - 1); }


Carregar ppt "Programação II Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da Prof."

Apresentações semelhantes


Anúncios Google