330 likes | 460 Views
Algoritmos. Escher. Agenda. Método de Ordenação; Método de Pesquisa; Exercícios. Conceitos Iniciais. Métodos de Ordenação – Bolha :
E N D
Algoritmos Escher
Agenda • Método de Ordenação; • Método de Pesquisa; • Exercícios.
Conceitos Iniciais • Métodos de Ordenação – Bolha: • O algoritmo de “ordenação bolha”, ou “bubble sort”, recebeu este nome pela forma usada para descrevê-lo: os elementos maiores são mais leves, e sobem como bolhas até suas posições corretas. • Simples, fácil de entender e implementar; • Um dos mais conhecidos métodos de ordenação; • Baixa eficiência; • Utilizado basicamente para desenvolvimento do raciocínio ou onde não exige-se muita performance;
Conceitos Iniciais • Métodos de Ordenação – Bolha: • Critério de ordenação: ordem crescente ou decrescente. • A filosofia básica deste método consiste em: • “Varrer” o vetor, comparando os elementos vizinhos entre si: se (V[I] > V[I+1]). • Caso estejam fora de ordem, os mesmos trocam de posição entre si.
Conceitos Iniciais • Métodos de Ordenação - Bolha: • A filosofia básica - continuação: • Procede-se assim até o final do vetor. Na primeira “varredura” verifica-se que o último elemento do vetor já está no seu devido lugar (no caso de ordenação crescente, ele é o maior de todos).A segunda “varredura” é análoga à primeira e vai até o penúltimo elemento. • Este processo é repetido até que seja feito um número de varreduras igual ao número de elementos a serem ordenados menos um. Ao final do processo o vetor está classificado segundo o critério escolhido.
Método da BOLHA (ordem crescente) prog metodobolha int L, c , AUX, V[5], n; # onde L, c: são variáveis de controle # AUX: variável auxiliar para troca # V[5] : tabela ou vetor a ser ordenado n <- 5; # tamanho do vetor imprima " \nInforme os dados da tabela: \n"; para (L <- 0; L < n; L++) { imprima “Digite valor: "; leia V[L]; } imprima "\nValores Informados: "; para (L <- 0; L < n; L++) { imprima V[L] , " "; }
Método da BOLHA (ordem crescente) • para (L<- n-1; L>=1; L--) { • para (c<- 0; c<L; c++) { • se (V[c]>V[c+1]) { /* troca */ • AUX <- V[c]; • V[c] <- V[c+1]; • V[c+1] <- AUX; • } • } • } • imprima "\nValores Ordenados:"; • para (L <- 0; L < n; L++) • { imprima V[L], " "; } • fimprog Ordenação
Conceitos Iniciais • Métodos de Ordenação – Seleção (Livro): • Critério de ordenação: ordem crescente ou decrescente. • A idéia básica do Método de Seleção é, a cada passagem pelo vetor, selecionar o menor elemento e colocar este elemento o mais a esquerda possível. • A cada passo encontra-se o menor elemento dentro do segmento com os elementos não selecionados; • Troca-se este elemento com o primeiro elemento do segmento; • Atualiza-se o tamanho do segmento (menos um elemento); • Este processo é repetido até que o segmento fique com apenas um elemento.
Método da SELEÇÃO prog metodoselecao int L, c , AUX, V[5], n; # onde L, c: são variáveis de controle # AUX: variável auxiliar para troca # V[5] : tabela ou vetor a ser ordenado n <- 5; # tamanho do vetor imprima " \nInforme os dados da tabela: \n"; para (L <- 0; L < n; L++) { imprima “Digite valor: "; leia V[L]; } imprima "\nValores Informados: "; para (L <- 0; L < n; L++) { imprima V[L] , " "; }
Método da SELEÇÃO • para (L<-0; L<n-1; L++) { • para (c<-(L+1); c<=n-1; c++) { • se(V[L] > V[c]) • { • AUX <- V[L]; • V[L] <- V[c]; • V[c] <- AUX; • } • } • } • imprima "\nValores Ordenados:"; • para (L <- 0; L < 5; L++) • { imprima V[L], " "; } • fimprog Ordenação
Conceitos Iniciais • Métodos de Pesquisa: • PESQUISA: O problema de procurar (pesquisar) alguma informação numa tabela ou num catálogo é muito comum. • Exemplo: • procurar o telefone de uma pessoa no catálogo • procurar o nº da conta de um certo cliente • consultar um determinado saldo em um terminal automático
Conceitos Iniciais • Métodos de Pesquisa: • A tarefa de “pesquisa”, “procura” ou “busca” é, como se pode imaginar, uma função muito utilizada. • As rotinas que executam a busca devem ser eficientes (menor tempo possível). • EFICIÊNCIA • O TEMPO GASTO pesquisando dados em tabelas depende do TAMANHO da tabela e do ALGORITMO utilizado na busca.
Conceitos Iniciais • Métodos de Pesquisa: • Método da Pesquisa Sequêncial • Método da Pesquisa Binária
Conceitos Iniciais • Métodos de Pesquisa - SEQUÊNCIAL: • A pesquisa seqüencial ou linear é o método mais objetivo para se encontrar um elemento particular em um conjunto não classificado. • A idéiabásicadaPesquisaSequêncialé localizar o elementoprocuradoatravés de comparaçõessucessivas e sequênciais, a partir do primeiroelemento do vetor.
Conceitos Iniciais • Métodos de Pesquisa - SEQUÊNCIAL: • A pesquisaterminaquando o elemento é encontradoouquando é atingido o fim do vetor. • No melhorcaso, acha-se o elementoprocuradona 1acomparação, no piornaNacomparação. Na média, o número de comparações é N/2
Conceitos Iniciais • Métodos de Pesquisa - SEQUÊNCIAL: • Comparar o elemento procurado (DADO) com cada um dos elementos da tabela TAB na seqüência em que aparecem na tabela.
Conceitos Iniciais • Métodos de Pesquisa - SEQUÊNCIAL: • Para os métodos de pesquisa que se seguem vamos denotar por: • TAB - um vetor contendo N elementos inteiros distintos. • DADO - elemento a ser procurado em TAB • ACHOU - indica o sucesso ou falha na pesquisa. • POS - aponta para a posição do elemento encontrado.
Pesquisa Seqüêncial prog BUSCASEQUENCIAL int i /*variável de controle*/, N /*tamanho da tabela*/, DADO /*elemento a ser procurado na tabela*/, POS /*posição em que se encontra o elemento*/, TAB [5] /*tabela para os valores*/, ACHOU; /*valor lógico que representa o sucesso da busca*/ imprima "\nInforme os dados da tabela: "; para (i <- 0; i < 5; i++) { leia TAB[i]; } imprima "\nValores Informados:"; para (i <- 0; i < 5; i++) { imprima TAB[i] , " "; }
Pesquisa Seqüêncial imprima "\nDigite o elemento a ser procurado: "; leia DADO; ACHOU <- 0; para (i <- 0; i < 5; i++) { se (TAB[i] == DADO) { ACHOU <- 1; POS <- i; } } se (ACHOU == 1) { imprima DADO, " se encontra na posicao ", POS; } senao { imprima DADO, " NAO se encontra na TABELA."; } fimprog INEFICIENTE: O processo de busca continua mesmo depois que o elemento foi encontrado. Solução: Parar a busca quando o DADO for encontrado.
Pesquisa Seqüêncial – solução 02 imprima "\nDigite o elemento a ser procurado: "; leia DADO; //***** ACHOU <- 0; i = 0; enquanto ((ACHOU == 0) && (i <= N)) { se (TAB[i] == DADO) ACHOU <-1; senao i++; } se (ACHOU == 1) imprima DADO, " se encontra na posicao “, i; senao imprima DADO, " NAO se encontra na TABELA."; fimprog EFICIENTE: O processo de busca pára quando o elemento é encontrado. Condição melhorada, prevê sucesso na busca e fim da tabela. Programa
Conceitos Iniciais • Métodos de Pesquisa - Binária: • A idéiabásicadaPesquisaBináriaconsisteemdiminuircadavezmais o intervalo de busca. • Nestemétodo, a tabela a ser pesquisadadeveestarpreviamenteordenada (classificada). • Encontra-se, inicialmente, o elementocentral databeladividindo-a, assim, emduasmetades. • Verifica-se emquemetade o elementoprocurado se encontra e abandona-se a outrametade.
Conceitos Iniciais • Métodos de Pesquisa - Binária: • Conforme o resultadodaoperaçãoefetuada, toma-se comonovo intervalode pesquisauma das metades do intervalo anterior e o processo de busca é repetido. • O términodo processo se dáquando o elementodesejado é localizadoouquando o intervalo de buscatorna-se vazio (significandoque o elementodesejadonãoestápresentenatabela).
Conceitos Iniciais • Métodos de Pesquisa - Binária: • A cada passo divide-se a área de pesquisa à metade; • Caso a tabela tenha 1500 valores: O número máximo de passos é log2 N, arredondado ao inteiro mais próximo. Se N = 12. Temos 12 = 24 => log2 24 = 4 (máx.)
Elem = 22 22 >21, inicio = meio +1 22 < 62, fim= meio -1 22 = 22, o elem está na posição meio
Pesquisa Binária prog metodobinario //Declarações int i /*variável de controle*/, N /*tamanho da tabela*/, DADO /*elemento a ser procurado na tabela*/, MEIO /*posição central tabela*/, INIC /*posição inicial da busca*/, FIM /*posição final da busca */, TAB [30] /*tabela para os elementos */, ACHOU; /*valor lógico que representa o sucesso da busca*/ imprima "Digite o tamanho da tabela: "; leia N; imprima "\nInforme os dados da tabela: "; para (i <- 0; i < N; i++) leia TAB[i]; imprima "\nValores Informados:"; para (i <- 0; i < N; i++) imprima TAB[i], " ";
Pesquisa Binária imprima"\nDigite o elemento a ser procurado: "; leia DADO; //***** ACHOU <- 0; INIC <- 0; FIM <- (N - 1); enquanto ((INIC <= FIM) && (ACHOU == 0)) { MEIO <- (INIC + FIM) / 2; //divisao de inteiro, resulta inteiro se (TAB[MEIO] == DADO) ACHOU <- 1; // o elemento foi encontrado senao { se (TAB[MEIO] > DADO) FIM <- (MEIO - 1); // ajusta fim do vetor senao INIC <- (MEIO + 1); // ajusta inicio do vetor } } se (ACHOU == 1) imprima DADO , " foi encontrado. "; senao imprima DADO, " NAO se encontra na TABELA."; fimprog Inicialização do intervalo de busca Determinação da posição central Mudança do intervalo de busca Programa
Referências • Lopes, A. & Garcia, G. – Introdução a Programação. • Schildt – C Completo e Total.
E Agora??? • Exercícios!!!
Exercícios Propostos Faça um programa para ler dois vetores e intercalar estes dois vetores formando o vetor . Apresentar o vetor C gerado, ordenar este vetor C e mostrá-lo também. Verifique se os elementos de um vetor A estão em ordem crescente.