análise projeto de algoritmos
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/1.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Análise Projeto de Algoritmos
Loana Tito Nogueira
16-Maio-2006
![Page 2: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/2.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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.
![Page 3: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/3.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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
![Page 4: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/4.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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
![Page 5: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/5.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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
![Page 6: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/6.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo Genérico – Divisão e Conquista
![Page 7: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/7.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 8: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/8.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 9: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/9.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 10: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/10.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 11: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/11.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 12: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/12.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 13: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/13.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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
![Page 14: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/14.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 15: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/15.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 16: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/16.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Projeto por Divisão e Conquista – Exemplo 1
• Exponenciação• Problema: Calcular na, para todo real a e inteiro n0.
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
![Page 17: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/17.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Projeto por Divisão e Conquista – Exemplo 1
• Exponenciação• Problema: Calcular na, para todo real a e inteiro n0.
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
![Page 18: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/18.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Projeto por Divisão e Conquista – Exemplo 1
• Exponenciação• Problema: Calcular na, para todo real a e inteiro n0.
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
![Page 19: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/19.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Projeto por Divisão e Conquista – Exemplo 1
• Exponenciação• Problema: Calcular na, para todo real a e inteiro n0.
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
![Page 20: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/20.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Projeto por Divisão e Conquista – Exemplo 1
• Exponenciação• Problema: Calcular na, para todo real a e inteiro n0.
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
![Page 21: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/21.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Projeto por Divisão e Conquista – Exemplo 1
• Exponenciação• Problema: Calcular na, para todo real a e inteiro n0.
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
![Page 22: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/22.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 23: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/23.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 24: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/24.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 25: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/25.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 26: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/26.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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
![Page 27: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/27.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 28: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/28.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Projeto por Divisão e Conquista – Exemplo 1
• Exponenciação• Problema: Calcular na, para todo real a e inteiro n0.
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
![Page 29: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/29.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Projeto por Divisão e Conquista – Exemplo 1
• Exponenciação• Problema: Calcular na, para todo real a e inteiro n0.
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
![Page 30: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/30.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Projeto por Divisão e Conquista – Exemplo 1
• Exponenciação• Problema: Calcular na, para todo real a e inteiro n0.
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
![Page 31: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/31.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Projeto por Divisão e Conquista – Exemplo 1
• Exponenciação• Problema: Calcular na, para todo real a e inteiro n0.
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.
![Page 32: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/32.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Projeto por Divisão e Conquista – Exemplo 1
• Exponenciação• Problema: Calcular na, para todo real a e inteiro n0.
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/2
![Page 33: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/33.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Projeto por Divisão e Conquista – Exemplo 1
• Exponenciação• Problema: Calcular na, para todo real a e inteiro n0.
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/2
(an/2 )2, se n é paran
a. (an/2)2, se n é ímpar
![Page 34: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/34.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo: Exp(a,n)
Entrada: A base a e o expoente nSaída: O valor de an
Se n = 0 entãoRetorne(1) {caso base}
Senãodivisão
an’ := Exp(a, n div 2)conquista
an := an’*an’Se (n mod 2)=1 então an:= an* a
Retorne(an)
![Page 35: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/35.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo: Exp(a,n)
Entrada: A base a e o expoente nSaída: O valor de an
Se n = 0 entãoRetorne(1) {caso base}
Senãodivisão
an’ := Exp(a, n div 2)conquista
an := an’*an’Se (n mod 2)=1 então an:= an* a
Retorne(an)
![Page 36: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/36.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo: Exp(a,n)
Entrada: A base a e o expoente nSaída: O valor de an
Se n = 0 entãoRetorne(1) {caso base}
Senãodivisão
an’ := Exp(a, n div 2)conquista
an := an’*an’Se (n mod 2)=1 então an:= an* a
Retorne(an)
![Page 37: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/37.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo: Exp(a,n)
Entrada: A base a e o expoente nSaída: O valor de an
Se n = 0 entãoRetorne(1) {caso base}
Senãodivisão
an’ := Exp(a, n div 2)conquista
an := an’*an’Se (n mod 2)=1 então an:= an* a
Retorne(an)
![Page 38: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/38.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo: Exp(a,n)
Entrada: A base a e o expoente nSaída: O valor de an
Se n = 0 entãoRetorne(1) {caso base}
Senãodivisão
an’ := Exp(a, n div 2)conquista
an := an’*an’Se (n mod 2)=1 então an:= an* a
Retorne(an)
![Page 39: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/39.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Complexidade
• T(n): nº de operações realizadas pelo algoritmo para calcular an
1 , n=0
T(n) =
T(n/2 )+ c , n>0
![Page 40: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/40.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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)
![Page 41: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/41.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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.
![Page 42: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/42.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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!!
![Page 43: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/43.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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
![Page 44: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/44.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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=0Se i=f então se A[i] =x então retorne(i)
senão retorne(0)senão
j:=(i+f) div 2se A[j]=x retorne(j)senão se A[j]>x então
j:=BuscaBinaria(A, i,f-1, x)senão
j:= BuscaBinaria(A, i+1, f, x)retorne(j)
![Page 45: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/45.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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=0Se i=f então se A[i] =x então retorne(i)
senão retorne(0)senão
j:=(i+f) div 2se A[j]=x retorne(j)senão se 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
![Page 46: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/46.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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=0Se i=f então se A[i] =x então retorne(i)
senão retorne(0)senão
j:=(i+f) div 2se A[j]=x retorne(j)senão se A[j]>x então
j:=BuscaBinaria(A, i,f-1, x)senão
j:= BuscaBinaria(A, i+1, f, x)retorne(j)
i fj
![Page 47: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/47.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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=0Se i=f então se A[i] =x então retorne(i)
senão retorne(0)senão
j:=(i+f) div 2se A[j]=x retorne(j)senão se A[j]>x então
j:=BuscaBinaria(A, i,f-1, x)senão
j:= BuscaBinaria(A, i+1, f, x)retorne(j)
i fj
![Page 48: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/48.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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=0Se i=f então se A[i] =x então retorne(i)
senão retorne(0)senão
j:=(i+f) div 2se A[j]=x retorne(j)senão se A[j]>x então
j:=BuscaBinaria(A, i,f-1, x)senão
j:= BuscaBinaria(A, i+1, f, x)retorne(j)
i fx =A[j] ?
![Page 49: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/49.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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=0Se i=f então se A[i] =x então retorne(i)
senão retorne(0)senão
j:=(i+f) div 2se A[j]=x retorne(j)senão se A[j]>x então
j:=BuscaBinaria(A, i,j-1, x)senão
j:= BuscaBinaria(A, i+1, f, x)retorne(j)
i fx < A[j] ?
![Page 50: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/50.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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=0Se i=f então se A[i] =x então retorne(i)
senão retorne(0)senão
j:=(i+f) div 2se A[j]=x retorne(j)senão se A[j]>x então
j:=BuscaBinaria(A, i,j-1, x)senão
j:= BuscaBinaria(A, i+1, f, x)retorne(j)
i fx < A[j] ?
![Page 51: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/51.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
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=0Se i=f então se A[i] =x então retorne(i)
senão retorne(0)senão
j:=(i+f) div 2se A[j]=x retorne(j)senão se A[j]>x então
j:=BuscaBinaria(A, i,f-1, x)senão
j:= BuscaBinaria(A, i+1, f, x)retorne(j)
![Page 52: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/52.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Complexidade
• CALCULE!
![Page 53: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/53.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Ordenação
• Problema: Ordenar um conjunto de n 1 inteiros
• Diversos algoritmos para o problema de ordenação através de indução
![Page 54: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/54.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Ordenação
• Indução Simples:
• Hipótese de Indução:
Sabemos ordenar um conjunto de n-1 1 inteiros
![Page 55: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/55.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Ordenação
• Indução Simples:
• Hipótese de Indução:
Sabemos ordenar um conjunto de n-1 1 inteiros
Caso base: n=1. Já está ordenado!!
![Page 56: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/56.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Ordenação
• Indução Simples:
• Hipótese de Indução:
Sabemos ordenar um conjunto de n-1 1 inteiros
Caso base: n=1. Já está ordenado!!
Passo da Indução: Seja S um conjunto com n>1 inteiros e x um elemento de S.
![Page 57: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/57.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Ordenação
• Indução Simples:
• Hipótese de Indução:
Sabemos ordenar um conjunto de n-1 1 inteiros
Caso base: n=1. Já está ordenado!!
Passo da Indução: Seja S um conjunto com n>1 inteiros e x um elemento de S.
Por h.i. sabemos ordenar S-x, basta então inserir x na posição correta para obtermos S ordenado
![Page 58: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/58.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Ordenação
• Indução Simples:
• Hipótese de Indução:
Sabemos ordenar um conjunto de n-1 1 inteiros
Caso base: n=1. Já está ordenado!!
Passo da Indução: Seja S um conjunto com n>1 inteiros e x um elemento de S.
Por h.i. sabemos ordenar S-x, basta então inserir x na posição correta para obtermos S ordenado
INSERTION SORT!!!
![Page 59: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/59.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo: OrdenaçãoInserção(A, n)
Se n 2 faça
OrdenaçãoInserção(A, n-1)
v:= A[n]
j:= n
enquanto (j >1) e (A[j-1]) > v) faça
A[j]:=A[j-1]
j:=j-1
A[j]:=v
Entrada: Vetor A e n inteiroSaída: Vetor A ordenado
![Page 60: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/60.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo: OrdenaçãoInserção(A, n)
Se n 2 faça
OrdenaçãoInserção(A, n-1)
v:= A[n]
j:= n
enquanto (j >1) e (A[j-1]) > v) faça
A[j]:=A[j-1]
j:=j-1
A[j]:=v
Entrada: Vetor A e n inteiroSaída: Vetor A ordenado
Versão Recursiva
![Page 61: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/61.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Complexidade
• Tanto o número de comparações quanto de trocas é dado pela recorrência:
0, n=1
• T(n)=
T(n-1) + n, n>1
![Page 62: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/62.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo: OrdenaçãoInserção(A, n)
Para i:=2 até n faça
v:= A[n]
j:= n
enquanto (j >1) e (A[j-1]) > v) faça
A[j]:=A[j-1]
j:=j-1
A[j]:=v
Entrada: Vetor A e n inteiroSaída: Vetor A ordenado
Versão Iterativa
![Page 63: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/63.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
2a. alternativa
• Hipótese de Indução:
Sabemos ordenar um conjunto de n-1 1 inteiros
Caso base: OK!
Passo da Indução: Encontrar o mínimo x.
Sabemos ordenar S\x.
Selection Sort
![Page 64: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/64.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Selection Sort(A, i, n)
Se i < n faça
min:=i
para j:= i+1 até n faça
se A[j] < A[min] então min:=j
t:= A[min]
A[min]:= A[i]
A[i]:= t
SelectionSort(a, i+1, n)
Entrada: Vetor A, inicio e fim Saída: Vetor A ordenado
![Page 65: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/65.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Complexidade
• Número de comparações:
• T(n)= 0, se n=1
• T(n)= T(n-1)+n, se n >1
• Número de trocas:
• T(n)= 0, se n=1
• T(n)= T(n-1) + 1, n > 1
![Page 66: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/66.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Complexidade
• Número de comparações:
• T(n)= 0, se n=1
• T(n)= T(n-1)+n, se n >1
• Número de trocas:
• T(n)= 0, se n=1
• T(n)= T(n-1) + 1, n > 1
(n2)
(n)
![Page 67: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/67.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Versão Iterativa
Para i:=1 até n-1 faça
min:=i
para j:= i+1 até n faça
se A[j] < A[min] então min:=j
t:= A[min]
A[min]:= A[i]
A[i]:= t
![Page 68: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/68.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Indução Forte
• Hipótese de Indução:
Sabemos ordenar um conjunto de 1 k n
![Page 69: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/69.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Indução Forte
• Hipótese de Indução:
Sabemos ordenar um conjunto de 1 k n
• Caso Base: n=1. OK!
• Passo da Indução: Seja S um conjunto com n>1 inteiros.
Podemos particionar S em dois subconjuntos de tamanhos aproximadamente iguais: n/2 en/2
![Page 70: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/70.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Indução Forte
• Hipótese de Indução:
Sabemos ordenar um conjunto de 1 k n
• Caso Base: n=1. OK!
• Passo da Indução: Seja S um conjunto com n>1 inteiros.
Podemos particionar S em dois subconjuntos de tamanhos aproximadamente iguais: n/2 en/2
< n
![Page 71: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/71.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Indução Forte
• Hipótese de Indução:
Sabemos ordenar um conjunto de 1 k n
• Caso Base: n=1. OK!
• Passo da Indução: Seja S um conjunto com n>1 inteiros.
Podemos particionar S em dois subconjuntos de tamanhos aproximadamente iguais: n/2 en/2
Podemos usar a h.i. para ordenar S1 e S2
![Page 72: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/72.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Indução Forte
• Hipótese de Indução:
Sabemos ordenar um conjunto de 1 k n
• Caso Base: n=1. OK!
• Passo da Indução: Seja S um conjunto com n>1 inteiros.
Podemos particionar S em dois subconjuntos de tamanhos aproximadamente iguais: n/2 en/2
Podemos usar a h.i. para ordenar S1 e S2
COMO OBTER S?
![Page 73: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/73.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo:
• O algoritmo emprega os seguintes procedimentos:
![Page 74: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/74.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo:
• O algoritmo emprega os seguintes procedimentos:
• SORT(i,j): ordena o subcojunto {si,..., sj}
![Page 75: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/75.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo:
• O algoritmo emprega os seguintes procedimentos:
• SORT(i,j): ordena o subcojunto {si,..., sj}
• MERGE(S1, S2): efetua a intercalação dos subconjuntos ordenados S1 e S2
![Page 76: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/76.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo:
• O algoritmo emprega os seguintes procedimentos:
• SORT(i,j): ordena o subcojunto {si,..., sj}
• MERGE(S1, S2): efetua a intercalação dos subconjuntos ordenados S1 e S2
• Chamada Externa: SORT(1,n)
![Page 77: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/77.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo
Procedimento SORT(i,j)
Se i=j então
retornar si
Senão
m:= (i+j –1)/2
Retornar MERGE(SORT(i, m), SORT(m+1, j))
![Page 78: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/78.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Algoritmo
Procedimento MERGE(S1, S2)
Se S1 = então
Retornar S2
senão
se S2 = então
Retornar S1
senão
sejam e1, e2 os elementos iniciais de S1 e S2 resp.
k:= Se e1> e2 então 1 senão 2
retornar {ek}
Sk:= Sk – {ek}
MERGE(S1, S2)
![Page 79: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/79.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos
Complexidade
• T(n)= 2T(n/2) + n-1
![Page 80: Análise Projeto de Algoritmos](https://reader036.vdocuments.site/reader036/viewer/2022062323/5681593b550346895dc67721/html5/thumbnails/80.jpg)
Loana Tito Nogueira Análise e Projeto de Algoritmos