1 / 258

Parte 3

Parte 3. Técnicas de projeto de algoritmos. Técnicas de projeto de algoritmos. Divisão e conquista Algoritmos gulosos Programação dinâmica Caminhamento em grafos Heurísticas. Divisão e conquista. Divisão e conquista. Princípio básico :. function DC (x)

korene
Download Presentation

Parte 3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Parte 3 Técnicas de projeto de algoritmos

  2. Técnicas de projeto de algoritmos • Divisão e conquista • Algoritmos gulosos • Programação dinâmica • Caminhamento em grafos • Heurísticas Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  3. Divisão e conquista

  4. Divisão e conquista Princípio básico: function DC (x) se {x é suficientemente pequeno ou simples} então return ADHOC(x) senão decompor x em x1, x2, …, xK para i= 1 até K faça yi DC (xi); recombinar os yi para obter y return y Pesquisa binária Merge Sort Top down Recorrente Balanceamento Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  5. Máximo e mínimo Entrada: a1,, a2, …, an Saída: MIN, MAX com: MIN  min { a1, a2, … , an } MAX= max{ a1, a2, … , an } trivial: determinar MIN: (n-1) comparações determinar MAX: (n-1) comparações 2n-2 comparações melhorado: MIN, MAX  a1 para i = 2 até n faça se ai > MAX então MAX  ai senão se ai < MIN então MIN  ai melhor caso: ai n-1 comparações pior caso: ai 2n-1comparações Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  6. Máximo e mínimo procedure MaxMin(i, j, fmax, fmin) integer i, j global n, A(1:n) case : i=j fmax, fmin A(i) : i=j-1 se A(i) < A(j) então fmax A(j) fmin A(i) else fmax A(i) fmin A(j) : else meio  (i+j)/2 MaxMin(i, meio, gmax , gmin) MaxMin(meio+1, j, hmax , hmin) fmax max(hmax , gmax) fminmin(hmin , gmin) endcase T(n) = O(1) + 2·T(n/2) T(n) = O(n) Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  7. Divisão e conquista Pesquisa binária max min Multiplicação de polinômios Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  8. Divisão e conquista mergesort multiplicação de polinômios Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  9. Problema de seleção ai  x ai  x Dado um vetor a1, a2, …, an obter o k-ésimo menor elemento • ordenação: O(n log n) + O(k) • k pequeno: O(k·n) • É possível fazer melhor do que isso? Reorganizar o vetor a em relação a um pivô x: Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  10. Problema de seleção A x p r partition(A, p, r, x) i p-1 j r+1 enquanto TRUE faça repita j  j -1até que A[j]  x repita i  i+1até que A[i]  x se i < j então troca A[i] ↔ A[j] senão retornar j fim Complexidade: O(n) Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  11. Exemplo: A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 3 2 6 4 1 3 7 1 6 5 3 j A[j]  5 j A[j]  5 j A[j]  5 j A[j]  5 i A[i]  5 i A[i]  5 i A[i]  5 i A[i]  5 i A[i]  5 j i X = 5 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  12. Problema de seleção P1 P2  X  X • Determinar o k-ésimo menor elemento: • Se |P1|  k  procurar o k-ésimo em P1 • Se |P1|  k  procurar o k-|P1| ésimo em P2 • usar o algoritmo de partição Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  13. Problema de seleção Select(k,n): • Dividir os n elementos em n/5 grupos de 5 elementos cada. • Extrair a mediama de cada um dos n/5 grupos de 5 elementos cada. • Extrair recursivamente a mediana das n/5 medianas usando select: Select (n/10,n/5). Seja x esta mediana: Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  14. Problema de seleção X m2 m5 m6 m7 m1 m3 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  15. Problema de seleção • Particionar os dados de entrada utilizando x como pivô usando o algoritmo partition • Sejam b1 e b2 o número de elementos em cada partição.Se k  b1: aplicar select para obter o k-ésimo da 1aparte Se k > b1: aplicar select para obter o (k-b1)-ésimo da 2a parte(recursivamente) Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  16. Multiplicação de polinômios Polinômio de grau n-1 tem n termos Entrada: p(x) e q(x) têm tamanho n Saída : r(x)=p(x)·q(x) “força bruta”: para i = 0 até 2n-2 faça r(i)  0; para i = 0 até n-1 faça para j= 0 até n-1 faça r(i+j)  r(i+j) + p(i)·q(j); T(n) = O(n2) Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  17. Multiplicação de polinômios Idéia: substituir “·” por “+” n=2k p(x) + q(x)  O(n) p(x) · q(x)  O(n2), computacionalmente mais caro Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  18. Multiplicação de polinômios | b1 | b0 | a0b1 a1b1 b0 + b1 a0b0 a1b0 a0 a1 a0+a1 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  19. Multiplicação de polinômios 4 multiplicações 1 adição Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  20. Multiplicação de polinômios Complexidade: É necessário resolver menos de quatro problemas Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  21. Multiplicação de polinômios Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  22. Multiplicação de polinômios Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  23. Multiplicação de polinômios Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  24. Multiplicação de matrizes Multiplicação de matrizes Hipótese: n=2k Particionar A e B em quatro submatrizes n/2 x n/2 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  25. Multiplicação de matrizes Multiplicação de matrizes A · B: oito multiplicações de matrizes (n/2) Adicionar duas matrizes n/2 x n/2: O(n2) Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  26. Multiplicação de matrizes Aumentar o número de adições de matrizes para diminuir o número de multiplicações: método de Strassen 7 multiplicações 18 adições Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  27. Multiplicação de matrizes Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  28. Problema do par mais próximo • Problema do par mais próximo: dados n pontos no plano com coordenadas (xi, yi), i=1,…n, obter o par de pontos mais próximo • “Força bruta”: calcular todas as n(n-1)/2 distâncias: O(n2) É possível fazer melhor do que isso? • Ordenar todos n pontos pelas coordenadas xi  O(n log n) Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  29. Problema do par mais próximo • Separar os pontos em duas metades, de acordo com a ordenação pelas coordenadas xi • P1 P2 • d1: menor distância entre pontos de P1 • d2: menor distância entre pontos de P2 • Verificar se existe A1  P1 e A2  P2 tais que: • d(A1,A2) = d < min{d1,d2} • d1 e d2 podem ser calculados recursivamente. • Falta calcular d = min {d(A1,A2): A1  P1 e A2  P2}. Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  30. Problema do par mais próximo d2 d1   P1 P2 T(n) = 2.T(n/2) + O(n)  T(n) = O(n log n) Como calcular d em O(n)?  = min {d1,d2} Só é necessário calcular d se d < . • Só é necessário examinar uma faixa de pontos a distância   da reta vertical que separa P1 e P2. Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  31. Problema do par mais próximo • Muitos pontos são eliminados, mas no pior caso podem restar O(n) pontos nesta faixa: o cálculo de d continuaria O(n2). • É possível mostrar que na média há na média. para i =1 até #pontos_na_faixa-1 faça para j = i+1 até #pontos_na_faixa-1 faça se d(pi, pj) <  então d(pi, pj) Como melhorar? Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  32. Problema do par mais próximo • As coordenadas y dos dois pontos que definem d diferem por no máximo , senão d > . • Se os pontos na faixa estão ordenados em ordem crescente pelas coordenadas y, se d(pi,pj) >  pode-se abandonar a análise de pi e passar-se a pi+1. • Hipótese: pontos na faixa ordenados por yi. para i =1 até #pontos_na_faixa-1 faça para j = i+1 até #pontos_na_faixa-1 faça se |yi - yj| >  então examinar pi+1 e sair do loop interno senão se d(pi,pj) < então  d(pi, pj) Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  33. Problema do par mais próximo            i   • Não pode haver mais do que oito pontos no retângulo  x . • Um deles é o ponto sendo examinado. • Verificar no máximo sete pontos: pode ser feito em O(1). Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  34. Problema do par mais próximo Algoritmo 1: • Ordenar os pontos pelas coordenadas x. • Dividir o conjunto em duas partes P1 e P2. • Recursivamente calcular as distâncias d1 e d2. • Fazer  ← min {d1,d2}. • Eliminar os pontos a uma distância superior a da linha de separação. • Ordenar os pontos na faixa de acordo com as coordenadas y. • Investigar os pontos na ordem e computar a distância de cada um deles a no máximo sete vizinhos. Se alguma distância for menor do que , então atualizar . T(n) = O(n log n) + 2.T(n/2) + O(1) + O(n) + O(n log n) + O(n) Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  35. Problema do par mais próximo Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  36. Problema do par mais próximo Algoritmo 2: • Ordenar os pontos pelas coordenadas x. • Dividir o conjunto em duas partes P1 e P2. • Recursivamente: • Calcular as distâncias minímas d1 e d2. . • Ordenar os pontos em P1 e P2 segundo as coordenadas y. • Combinar as duas listas ordenadas em uma única • Fazer  ← min {d1,d2}. • Eliminar os pontos a uma distância superior a da linha de separação. • Investigar os pontos na ordem e computar a distância de cada um deles a no máximo sete vizinhos. Se alguma distância for menor do que , então atualizar . T(n) = 2.T(n/2) + O(n) = O(n log n) Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  37. Algoritmos gulosos

  38. Algoritmos gulosos • Problema de otimização • Extensões sucessivas de soluções parciais • Sempre escolhe a extensão viável que propicia o maior ganho (“gula”) • Otimalidade nem sempre garantida • Sistema de subconjuntos: matróide • Algoritmos simples e eficientes • Análise de complexidade: simples Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  39. Cobertura por nós mínima maior grau (guloso) ordem dos vértices divisão e conquista 2 2 2 2 1 3 1 3 1 3 1 3 4 4 4 4 5 5 5 5 |S| = 3 |S| = 4 |S| = 2 • Grafo não-orientado G(V, E): obter S  V tal que: • {u, v}  E então uS ou vS • |S| é mínima Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  40. Cobertura por nós mínima Solução gulosa Solução ótima • O algoritmo guloso obtém necessariamente a solução ótima? Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  41. Cobertura por nós mínima • O algoritmo guloso obtém necessariamente a solução ótima? grau 1 n+2 nós n+2 nós grau n+1 grau n+2 n nós A solução pode ser muito ruim! Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  42. Armazenamento em fita • Entrada: L  (l1, l2, …, ln) vetor com comprimentos de narquivos a serem armazenados em uma fita suficientemente extensa • Saída: (j, li(j)) para j=1, …, n • i(j)é o índice do j-ésimo arquivo na fita Determinar a ordem de armazenamento dos arquivos na fita, de modo a minimizar o tempo médio TMR (ou total) de recuperação de um arquivo. Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  43. Armazenamento em fita 7 3 5 2 … 7 3 2 5 … Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  44. Armazenamento em fita 2 3 5 7 … • Armazenar arquivos em ordem crescente de tamanhos • Algoritmo auxiliar: ordenar o vetor em O(n log n) Mostrar que o algoritmo é correto Numa solução ótima não existe Supondo-se que existisse: Trocando: B-A? Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  45. Armazenamento em fita a troca diminuiria o custo. Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  46. Problema da mochila em qualquer solução ótima Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  47. Problema da mochila Exemplo: Objeto Ganho Volume 1 25 18 2 24 15 3 15 10 total 64 43 Volume disponível na mochila = 20 • Guloso 1: maior ganho primeiro • Guloso 2: menor volume primeiro • Guloso 3: maior densidade primeiro (densidade = ganho/volume) Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  48. Problema da mochila É permitido fracionar os objetos • guloso 1: ganhos decrescentes • x1: fração do objeto 1  x1 = 1 • volume residual = 20 - 18 = 2 • 15·x2 = 2  x2 = 2/15 • valor total: 25 + 2/15 · 24 = 28.2 • x1 x2 x3 ganho • 2/15 0 28.2 • 4/9 4/5 0 30.3 Enche a mochila muito rapidamente! Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  49. Problema da mochila x1 x2 x3 valor 1 2/15 0 28.2 4/9 4/5 0 30.3 0 2/3 1 31.0 0 4/5 4/5 31.2 0 1 1/2 31.5 guloso 1 guloso 2 guloso 3 • i ci ai ci/ai • 25 18 ~1.38 3 • 2 24 15 1.60 1 • 3 15 10 1.50 2 • b=20 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

  50. Problema da mochila Provar que a solução do guloso com o terceiro critério é ótima: • Ordenar os objetos em ordem decrescente das razões cj/aj • Solução gulosa: (1, 1, 1, …, 1, gj, 0,…, 0, 0) • Diminuir o valor de uma variável em A  aumentar uma variável em B Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro

More Related