Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Semana10-ordenacao-pesquisa-vetores

1,320 views

Published on

  • Login to see the comments

Semana10-ordenacao-pesquisa-vetores

  1. 1. Pedro Valente | Sónia Sobral [pvalente|scrls]@upt.pt 26/11/2015 Algoritmia e Programação Ordenação e Pesquisa IMP.GE.87.0 Licenciatura em Informática 1º Ano, 1º Semestre Licenciatura em Tecnologias e Sistemas de Informação 1º Ano, 1º Semestre
  2. 2. Agenda Ordenação de vetores • Ordenação por troca • Ordenação Seleção • Ordenação por partição (QuickSort) • Ordenação por Inserção Pesquisa • Pesquisa Sequencial • Pesquisa Binária 2
  3. 3. Objetivos Contextualizar ordenação e pesquisa Explorar os algoritmos de pesquisa Sequencial e Binária Apresentar os algoritmos de ordenação por Troca, Seleção e por Inserção 3
  4. 4. introdução  Um vetor (também vulgarmente conhecido por Array), tem a capacidade em armazenar um conjunto de elementos consecutivos  Podem ser acedidos individualmente a partir de um único nome (conceito de variável).  Todos os valores do Vetor estão armazenados em memória (no formato lista).  E em alguns casos, é necessário ordenar para posterior pesquisa. 4
  5. 5. Introdução Ordenação • Operação realizada sobre registros • Objetivo: organizar sobre determinada ordem Pesquisa • Operação realizada sobre registros • Objetivo: localizar um registro • Chave: campo ou chave presente em todos os registros 5
  6. 6. MÉTODOS DE ORDENAÇÃO Quando trabalhamos com vetores (mais especificamente matrizes), existem ocasiões em que necessitamos ordena-los para facilitar as pesquisas. • Podemos ordenar os valores de uma matriz do mais baixo para o mais alto (ordem crescente) ou ainda mais alto para o mais baixo (ordem crescente). Sem esse tipo de ordenação toda e qualquer pesquisa numa matriz seria muito difícil e demorada. Basicamente o que teria de se fazer é posicionar o “indice” no topo da matriz e ir comparando cada um dos elementos da matriz com o valor procurado. Para uma matriz pequena, esse "método" não é algo tão complexo e talvez seja o mais utilizado. • Mas para matrizes um pouco maiores, esse método consome muito tempo de processamento, tempo este que muitas vezes o sistema não dispões. Nestes casos o melhor é ordenar a matriz para somente então começar as pesquisas. 6
  7. 7. MÉTODOS DE ORDENAÇÃO Mas a ordenação, não irá também consumir tempo de processamento?!? • Vai, mas apenas é realizada uma só vez!  • Durante a inicialização, ou quando o vetor sofre modificações e/ou atualizações O tempo de processamento realizado numa ordenação é muito menor que o tempo de duas pesquisas feitas em uma base de dados desordenada. • Sendo assim, vale a pena “ordenar”! 7
  8. 8. Ordenação de Vetores  Problema (ordenação de vetor)  Dado um vetor (𝑣) com N elementos, rearranjar esses elementos por ordem crescente.  ou melhor, por ordem não decrescente, porque podem existir valores repetidos.  Ideias base:  Existem diversos algoritmos de ordenação que são muito simples, mas com processamento mais demorado (ex: ordenação por Inserção, BubbleSort)  Existem algoritmos de ordenação mais difíceis de codificar que tem processamento menor. 8
  9. 9. Algoritmos de Ordenação de Vetores  Ordenação por Troca (BubbleSort)  Ordenação por Seleção  Ordenação por Inserção  Ordenação por Partição (QuickSort)  Outros algoritmos:  ShellSort – variante mais popular  MergeSort  HeapSort 9
  10. 10. Ordenação por Troca (BubbleSort)  Características:  O mais simples  O mais lento  Algoritmo: Bolha (bubble Sort)  Compara dois elementos  Se o elemento da esquerda for maior, troca-os  Mover uma posição à direita  Nota: acumula os elementos ordenados no final do vetor 10
  11. 11. Ordenação por Troca (BubbleSort)  Fluxograma algoritmo 11
  12. 12. Ordenação por Troca (BubbleSort)  Código C 12 Output: Ver demos 1 e 2
  13. 13. Ordenação por Seleção  Características  Relativamente simples  Mais rápido que a ordenação por troca  Mesmo número de comparações  Número menos de trocas  Mais indicado quando o tempo de troca for significativo  Método:  Percorre o vetor e seleciona o menor elemento  Realiza a troca: transfere o menor elemento para o início  Nota: acumula os elementos ordenados no inicio do vetor 13
  14. 14. Ordenação por Seleção 14 More info: https://pt.wikipedia.org/wiki/Selection_sort demo2
  15. 15. Ordenação por seleção  Código em C 15 Output: Ver demo
  16. 16. Ordenação por Inserção  Algoritmo iterativo de N-1 passos  Em cada passo 𝑝:  Coloca-se um elemento na ordem, sabendo que elementos dos índices inferiores(entre 0 e 𝑝-1) já estão ordenados.  Algoritmo: 1. Considera-se o vetor dividido em dois sub-vetores (esquerdo e direito), com o da esquerda ordenado e o da direita desordenado 2. Começa-se com um elemento apenas no sub-vetor da esquerda 3. Move-se um elemento de cada vez do sub-vetor da direita para o sub-vetor da esquerda, inserindo-o na posição correta por forma a manter o sub-vetor da esquerda ordenando. 4. Termina-se quando o sub-vetor da direita fica vazio 16 Mais info: https://web.fe.up.pt/~prog2/docs/vectorPesqOrd.pdf
  17. 17. Ordenação por Inserção 17
  18. 18. Ordenação por Inserção – código C 18 Output: Ver demo
  19. 19. Ordenação por Partição (QuickSort) Algoritmo (ordenação por partição): • Caso básico: Se o número (𝑛) de elementos do vetor (𝑣) a ordenar for 0 ou 1, não é preciso fazer nada. • Passo de partição: • Escolher um elemento arbitrário (𝑥) do vetor (chamado pivot) • Partir o vetor inicial em dois sub-vetores (esquerdo e direito), com valores ≤ 𝑥 no sub-vetor esquerdo e valores ≥ 𝑥 no sub-vetor direito Algoritmo recursivo baseado na técnica divisão e conquista • quando parte do vetor a ordenar é de dimensão reduzida, usa um método de ordenação mais simples (ex. ‘insertionSort’ ) 19 Mais info: https://web.fe.up.pt/~prog2/docs/vectorPesqOrd.pdf
  20. 20. Ordenação por Partição (QuickSort) 20 i j ≤ 𝒙 ≥ 𝒙
  21. 21. Ordenação por Partição (QuickSort) 21 Escolha pivot determina eficiência Pior caso: pivot é o elemento mais pequeno Melhor caso: pivot é o elemento médio Caso médio: pivot corta vetor arbitrariamente. Escolha do pivot: Um dos elementos extremos do vetor • Má escolha, se o vetor estiver ordenado Elemento aleatório • Envolve uso de mais uma função pesada Mediana de três elementos (extremos do vetor e ponto médio) • Recomendado! 
  22. 22. Ordenação por Partição (QuickSort) 22 Output: Ver demos 1 e 2 Nota: Uma forma de se fazer o quickSort é considerar o primeiro elemento como pivô
  23. 23. PESQUISA Pesquisa sequencial e pesquisa binária 23
  24. 24. Pesquisa Sequencial Problema (pesquisa de valor em vetor): • Verificar se um valor existe no vetor e, no caso de existir, indicar a sua posição. • Possíveis variantes para o caso de vetores com valores repetidos: • A) indicar a posição da primeira ocorrência • B) indicar a posição da última ocorrência • C) indicar a posição de uma ocorrência qualquer Algoritmo (pesquisa sequencial): • Percorre sequencialmente todas as posições o vetor, da primeira para a última(a), ou da última para a primeira(b), até encontrar o valor pretendido ou chegar ao fim do vetor: • A) caso de pretenda saber a posição da primeira ocorrência • B) caso se pretenda saber a posição da última ocorrência Adequado para vetores não ordenados ou pequenos 24
  25. 25. Pesquisa binária  Problema (pesquisa de valor em vetor ordenado):  Verifica se um valor(x) existe num vetor (v) previamente ordenado e, no caso de existir, indicar a sua posição  No caso de vetores com valores repetidos, consideramos a variante em que basta indicar a posição de uma ocorrência qualquer 25
  26. 26. Pesquisa binária - algoritmo Comparar o valor que se encontra a meio do vetor com o valor procurado, podendo acontecer 3 cenários: • É igual ao valor procurado -> esta encontrado • É maior do que o valor procurado ->continuar a procura (mesmo modo) no sub-vetor à esquerda da posição inspecionada • É menor que o valor procurado -> continuar a procura (mesmo modo) no sub-vetor à direita da posição inspecionada Se o vetor a inspecionar se reduzir a um vetor vazio, conclui-se que o valor procurado não existe. 26
  27. 27. Pesquisa binária - exemplo 27
  28. 28. Webgrafia  https://pt.wikibooks.org/wiki/Programar_em_C/Algoritmos_de_ordena% C3%A7%C3%A3o  http://www.di.ubi.pt/~cbarrico/Disciplinas/ProgramacaoAlgoritmos/Down loads/Teorica_Ordenacao_Recursiva.pdf  http://www.programmingsimplified.com/c-program-examples  [LER] http://epaperpress.com/sortsearch/download/sortsearch.pdf 28
  29. 29. IMP.GE.87.0

×