1 / 80

Análise Projeto de Algoritmos

Análise Projeto de Algoritmos. Loana Tito Nogueira 16-Maio-2006. Projeto de Algoritmos por Divisão e Conquista. Dividir para Conquistar: tática de guerra aplicada ao projeto de algoritmos

adora
Download Presentation

Análise Projeto de Algoritmos

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. Análise Projeto de Algoritmos Loana Tito Nogueira 16-Maio-2006 Loana Tito Nogueira

  2. Projeto de Algoritmos por Divisão e Conquista • Dividir para Conquistar: tática de guerra aplicada ao projeto de algoritmos • Um algoritmo de divisão e conquista é aquele que resolve o problema desejado combinando as soluções parciais de (um ou mais) subproblemas, obtidas recursivamente. Loana Tito Nogueira

  3. Projeto de Algoritmos por Divisão e Conquista • Seja H um problema algorítmico. O método da divisão e conquista consiste em tentar resolver H, através dos seguintes passos: • Decompor H em subproblemas H1, H2, ..., Hk Menores que H Loana Tito Nogueira

  4. Projeto de Algoritmos por Divisão e Conquista • Seja H um problema algorítmico. O método da divisão e conquista consiste em tentar resolver H, através dos seguintes passos: • Decompor H em subproblemas H1, H2, ..., Hk • Resolver cada subproblema Hi, através de uma aplicação recursiva desse método Menores que H Loana Tito Nogueira

  5. Projeto de Algoritmos por Divisão e Conquista • Seja H um problema algorítmico. O método da divisão e conquista consiste em tentar resolver H, através dos seguintes passos: • Decompor H em subproblemas H1, H2, ..., Hk • Resolver cada subproblema Hi, através de uma aplicação recursiva desse método • Compor a solução de H, a partir das soluções de H1, H2, ..., Hk Menores que H Loana Tito Nogueira

  6. Algoritmo Genérico – Divisão e Conquista Loana Tito Nogueira

  7. Algoritmo Genérico – Divisão e Conquista • DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

  8. Algoritmo Genérico – Divisão e Conquista • DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

  9. Algoritmo Genérico – Divisão e Conquista • DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

  10. Algoritmo Genérico – Divisão e Conquista • DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

  11. Algoritmo Genérico – Divisão e Conquista • DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

  12. Algoritmo Genérico – Divisão e Conquista • DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

  13. Algoritmo Genérico – Divisão e Conquista • DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Loana Tito Nogueira

  14. Algoritmo Genérico – Divisão e Conquista • DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

  15. Algoritmo Genérico – Divisão e Conquista • DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

  16. Projeto por Divisão e Conquista – Exemplo 1 • Exponenciação • Problema: Calcular na, para todo real a e inteiro n0. 1a. Solução: (Indução Fraca): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Por hipótese de indução, sei calcular an-1. Então, calculo na multiplicando an-1 por a Loana Tito Nogueira

  17. Projeto por Divisão e Conquista – Exemplo 1 • Exponenciação • Problema: Calcular na, para todo real a e inteiro n0. 1a. Solução: (Indução Fraca): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Por hipótese de indução, sei calcular an-1. Então, calculo na multiplicando an-1 por a Loana Tito Nogueira

  18. Projeto por Divisão e Conquista – Exemplo 1 • Exponenciação • Problema: Calcular na, para todo real a e inteiro n0. 1a. Solução: (Indução Fraca): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Por hipótese de indução, sei calcular an-1. Então, calculo na multiplicando an-1 por a Loana Tito Nogueira

  19. Projeto por Divisão e Conquista – Exemplo 1 • Exponenciação • Problema: Calcular na, para todo real a e inteiro n0. 1a. Solução: (Indução Fraca): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Por hipótese de indução, sei calcular an-1. Então, calculo na multiplicando an-1 por a Loana Tito Nogueira

  20. Projeto por Divisão e Conquista – Exemplo 1 • Exponenciação • Problema: Calcular na, para todo real a e inteiro n0. 1a. Solução: (Indução Fraca): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an-1 calculo na multiplicando an-1 por a Loana Tito Nogueira

  21. Projeto por Divisão e Conquista – Exemplo 1 • Exponenciação • Problema: Calcular na, para todo real a e inteiro n0. 1a. Solução: (Indução Fraca): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an-1 calculo na multiplicando an-1 por a Loana Tito Nogueira

  22. Algoritmo: Expon(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão an’ := Expon(a, n-1) an := an’*a Retorne(an) Loana Tito Nogueira

  23. Algoritmo: Expon(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão an’ := Expon(a, n-1) an := an’*a Retorne(an) Loana Tito Nogueira

  24. Algoritmo: Expon(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão an’ := Expon(a, n-1) an := an’*a Retorne(an) Loana Tito Nogueira

  25. Algoritmo: Expon(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão an’ := Expon(a, n-1) an := an’*a Retorne(an) Loana Tito Nogueira

  26. Complexidade: Expon(a,n) • T(n): nº de operações realizadas pelo algoritmo para calcular an 1, n=0 T(n) = T(n-1)+ 1, n>0 Loana Tito Nogueira

  27. Complexidade: Expon(a,n) • T(n): nº de operações realizadas pelo algoritmo para calcular an 1, n=0 T(n) = T(n-1)+ 1, n>0 T(n)= (n) Loana Tito Nogueira

  28. Projeto por Divisão e Conquista – Exemplo 1 • Exponenciação • Problema: Calcular na, para todo real a e inteiro n0. 2a. Solução: (Indução Forte): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an-1 calculo na multiplicando an-1 por a Loana Tito Nogueira

  29. Projeto por Divisão e Conquista – Exemplo 1 • Exponenciação • Problema: Calcular na, para todo real a e inteiro n0. 2a. Solução: (Indução Forte): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an-1 calculo na multiplicando an-1 por a Loana Tito Nogueira

  30. Projeto por Divisão e Conquista – Exemplo 1 • Exponenciação • Problema: Calcular na, para todo real a e inteiro n0. 2a. Solução: (Indução Forte): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular ak, para todo k<n Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an-1 calculo na multiplicando an-1 por a Loana Tito Nogueira

  31. Projeto por Divisão e Conquista – Exemplo 1 • Exponenciação • Problema: Calcular na, para todo real a e inteiro n0. 2a. Solução: (Indução Forte): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular ak, para todo k<n Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Loana Tito Nogueira

  32. Projeto por Divisão e Conquista – Exemplo 1 • Exponenciação • Problema: Calcular na, para todo real a e inteiro n0. 2a. Solução: (Indução Forte): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular ak, para todo k<n Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an/2 Loana Tito Nogueira

  33. Projeto por Divisão e Conquista – Exemplo 1 • Exponenciação • Problema: Calcular na, para todo real a e inteiro n0. 2a. Solução: (Indução Forte): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular ak, para todo k<n Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an/2 (an/2 )2, se n é par an a. (an/2)2, se n é ímpar Loana Tito Nogueira

  34. Algoritmo: Exp(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão divisão an’ := Exp(a, n div 2) conquista an := an’*an’ Se (n mod 2)=1 então an:= an* a Retorne(an) Loana Tito Nogueira

  35. Algoritmo: Exp(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão divisão an’ := Exp(a, n div 2) conquista an := an’*an’ Se (n mod 2)=1 então an:= an* a Retorne(an) Loana Tito Nogueira

  36. Algoritmo: Exp(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão divisão an’ := Exp(a, n div 2) conquista an := an’*an’ Se (n mod 2)=1 então an:= an* a Retorne(an) Loana Tito Nogueira

  37. Algoritmo: Exp(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão divisão an’ := Exp(a, n div 2) conquista an := an’*an’ Se (n mod 2)=1 então an:= an* a Retorne(an) Loana Tito Nogueira

  38. Algoritmo: Exp(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão divisão an’ := Exp(a, n div 2) conquista an := an’*an’ Se (n mod 2)=1 então an:= an* a Retorne(an) Loana Tito Nogueira

  39. Complexidade • T(n): nº de operações realizadas pelo algoritmo para calcular an • 1 , n=0 • T(n) = • T(n/2 )+ c , n>0 Loana Tito Nogueira

  40. Complexidade • T(n): nº de operações realizadas pelo algoritmo para calcular an • 1 , n=0 • T(n) = • T(n/2 )+ c , n>0 • T(n)= (log n) Loana Tito Nogueira

  41. Busca Binária • Problema: Dado um vetor ordenado A com n números reais e um real x, determinar a posição 1 i  n tal que A[i]=x, ou que não existe tal i. Loana Tito Nogueira

  42. Busca Binária • Problema: Dado um vetor ordenado A com n números reais e um real x, determinar a posição 1 i  n tal que A[i]=x, ou que não existe tal i. • INDUÇÃO FORTE!! Loana Tito Nogueira

  43. Busca Binária • Problema: Dado um vetor ordenado A com n números reais e um real x, determinar a posição 1 i  n tal que A[i]=x, ou que não existe tal i. • INDUÇÃO FORTE!! • Como o vetor está ordenado, conseguimos determinar, com apenas uma comparação, que metade das posições do vetor não podem conter o valor x Loana Tito Nogueira

  44. Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senãose A[j]>x então j:=BuscaBinaria(A, i,f-1, x) senão j:= BuscaBinaria(A, i+1, f, x) retorne(j) Loana Tito Nogueira

  45. Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senãose A[j]>x então j:=BuscaBinaria(A, i,f-1, x) senão j:= BuscaBinaria(A, i+1, f, x) retorne(j) i f Loana Tito Nogueira

  46. Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senãose A[j]>x então j:=BuscaBinaria(A, i,f-1, x) senão j:= BuscaBinaria(A, i+1, f, x) retorne(j) i f j Loana Tito Nogueira

  47. Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senãose A[j]>x então j:=BuscaBinaria(A, i,f-1, x) senão j:= BuscaBinaria(A, i+1, f, x) retorne(j) i f j Loana Tito Nogueira

  48. Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senãose A[j]>x então j:=BuscaBinaria(A, i,f-1, x) senão j:= BuscaBinaria(A, i+1, f, x) retorne(j) i f x =A[j] ? Loana Tito Nogueira

  49. Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senãose A[j]>x então j:=BuscaBinaria(A, i,j-1, x) senão j:= BuscaBinaria(A, i+1, f, x) retorne(j) i f x < A[j] ? Loana Tito Nogueira

  50. Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senãose A[j]>x então j:=BuscaBinaria(A, i,j-1, x) senão j:= BuscaBinaria(A, i+1, f, x) retorne(j) i f x < A[j] ? Loana Tito Nogueira

More Related