complexidade de algoritmos - infprestes/courses/complexity/aula20.pdfcomplexidade de algoritmos...

20
Complexidade de Algoritmos Edson Prestes

Upload: others

Post on 06-Oct-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de Algoritmos

Edson Prestes

Page 2: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de Algoritmos

Algoritmo: Prod_Int(n, p , q : Int) →Int1. se n = 12. Então r ← p . q ; 3. retorne-saída( r ); {saída direta} 4. fim-então 5. Senão x ← p1 + p2 ; y ← q1 + q2 ;.6. z ← Prod_Int(n/2, x2 , y2 ) ; 7. t ← ( x1 * y1 ) * bn + ( x1 * y2 + x2 * y1 ) * b (n/2) + z ; 8. u ← Prod_Int(n/2, p1 , q1 ) ; 9. v ← Prod_Int(n/2, p2 , q2 ) ; 10. r ← u * bn + ( t - u - v ) * b(n/2)+ v ; {combinação}11. retorne-saída( r ) {saída combinada}12. fim-senão

X e Y têm comprimento n/2 ou 1+n/2. X2 e Y2 têm comprimento n/2. X1 e Y1 corresponde aos dígitos mais a esquerda de X e Y, respectivamente, os quais podem ser zero ou 1.

Projeto e Análise de Algoritmos

Quais são as árvores de execução para a entrada (n=2, p=12, q=35) ?

Page 3: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de Algoritmos

Podemos descrever o algoritmo através da seguinte equação de recorrência

Projeto e Análise de Algoritmos

Baseado nisto, mostre que o algoritmo é

Lembre que

Page 4: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de Algoritmos

Divisão e conquista m-áriaFuncao Div_Conq_m(d:D) → R1. Se smpl(d) 2. Então r← drt(d)3. Fim-então4. Senão 5. D1 ← part1 (d); …; Dm ← partm (d)6. r1 ← Div_Conq_m (d1); … ; rm ← Div_Conq_m (dm)

7. r ← combina_m (r1, … , rm)8. Retornar-saída (r)9. Fim-senão10. Fim-se11. Fim-função

Métodos de Projeto de Algoritmos

Page 5: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de AlgoritmosMétodos de Projeto de Algoritmos

Caso smpl(d) seja verdadeiro, temosDesemp[Div_Conq_m] (d) = aval[smpl](d) + desemp[drt](d)

Caso smpl(d) seja falso, temosDesemp[Div_Conq_m] (d) = aval[smpl](d) + + desemp[part1](d) + … + desemp[partm](d) + Desemp[Div_Conq_m] (part1(d)) + … + Desemp[Div_Conq_m] (partm(d)) + Desemp[cmbn_m](Div_Conq_m(part1(d)), …, Div_Conq_m(partm(d)))

Page 6: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de AlgoritmosMétodos de Projeto de Algoritmos

Adicionando um discriminador a ∈ N, temos

Caso tam(d)≤ a (smpl(d) verdadeiro)Desemp[Div_Conq_m] (d) = aval[smpl](d) + desemp[drt](d)

Caso tam(d)>a (smpl(d) falso), temosDesemp[Div_Conq_m] (d) = aval[smpl](d) + + desemp[part1](d) + … + desemp[partm](d) + Desemp[Div_Conq_m] (part1(d)) + … + Desemp[Div_Conq_m] (partm(d)) + Desemp[cmbn_m](Div_Conq_m(part1(d)), …, Div_Conq_m(partm(d)))

Page 7: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de AlgoritmosMétodos de Projeto de Algoritmos

Para uma entrada não simples, os processos de decomposição e de combinação são chamados juntamente com o teste de simplicidade.

Logo podemos simplificar a notação considerando-os como o esforço de recursãoDesemp[Recrs_m] (d) = aval[smpl](d) + + desemp[part1](d) + … + desemp[partm](d) + Desemp[cmbn_m](Div_Conq_m(part1(d)), …, Div_Conq_m(partm(d)))

Caso smpl(d), temosDesemp[Div_Conq_m] (d) = aval[smpl](d) + desemp[drt](d)

Caso smpl(d) seja falso, temosDesemp[Div_Conq_m] (d) = Desemp[Recrs_m] (d) + + Desemp[Div_Conq_m] (part1(d)) +… + Desemp[Div_Conq_m] (partm(d))

Page 8: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de AlgoritmosMétodos de Projeto de Algoritmos

Considerando que o esforço de recursão tem cota

A divisão e conquista m-ária pode ser dada pela função kFm: N → N

Onde

Page 9: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de Algoritmos

Divisão e conquista discriminante:– Sob subtração constante de ε>0 , temos S(d)=tam(d) - ε– Sob divisão constante por c>1 , temos S(d)=tam(d)/c

Métodos de Projeto de Algoritmos

Onde H(d) corresponde a profundidade da recursão.

Page 10: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de AlgoritmosMétodos de Projeto de Algoritmos

Considerando que o esforço de recursão tem cota

A divisão e conquista m-ária sob subtração é dada pela função kSm: N → N

Page 11: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de Algoritmos

Considere um algoritmo baseado em divisão e conquista com subtração constante da entrada s(n)=n-ε, com ε >0 esforço polinomial O(nk) particionamento em m >1 partes.Considere que smpl(d) refere-se a tam(d)≤ a e que drt tenha um custo constante c’

A equação de recorrência que descreve o algoritmo é

Projeto e Análise de Algoritmos

Mostre que a complexidade do algoritmo tem ordem

Page 12: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de Algoritmos

Complexidade da Divisão e Conquista sob subtração com Esforço Polinomial.

Considere ε>0 ; discriminador a ∈ N e esforço de recursão polinomial deordem O(nk), com k≥ 0

Métodos de Projeto de Algoritmos

Page 13: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de Algoritmos

Complexidade da Divisão e Conquista sob subtração

Métodos de Projeto de Algoritmos

Page 14: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de Algoritmos

Qual é a complexidade da Busca sequencial em tabela definida por

Métodos de Projeto de Algoritmos

m=1, ε=1, k=0, a=1, complexidade pessimista n0+1=O(n)

m=1, ε=1, k=1, a=1, complexidade pessimista n1+1=O(n2)

Qual é a complexidade da Classificação por Seleção definida por

Divisão e conquista sob subtração da entrada

Page 15: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de AlgoritmosMétodos de Projeto de Algoritmos

Considerando que o esforço de recursão tem cota

A divisão e conquista m-ária sob divisão pode ser dada pela função kQm: N → N

Page 16: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de Algoritmos

Considere um algoritmo baseado em divisão e conquista com divisão constante da entrada s(n)=n/c, c>1 esforço polinomial O(nk) particionamento em m partes, onde m<ck

Considere que smpl(d) refere-se a tam(d)≤ a e que drt tenha um custo constante c’

A equação de recorrência que descreve o algoritmo é

Projeto e Análise de Algoritmos

Mostre que a complexidade do algoritmo tem ordem

Page 17: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de Algoritmos

Complexidade da Divisão e Conquista sob divisão com Esforço Polinomial.

Considere c>1 ; discriminador a ∈ N e esforço de recursão polinomial deordem O(nk), com k≥ 0

Métodos de Projeto de Algoritmos

Page 18: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de Algoritmos

Complexidade da Divisão e Conquista sob divisão (Generalização)

Métodos de Projeto de Algoritmos

Page 19: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

Complexidade de Algoritmos

Qual é a complexidade da Busca binária em tabela definida por

Métodos de Projeto de Algoritmos

m=1, c=2, k=0, (m=ck) complexidade pessimista O(log2n)

Qual é a complexidade da Classificação por Intercalação definida por

m=2, c=2, k=1, (m=ck) complexidade pessimista n1 log2n =O(n log2n)

Divisão e conquista sob divisão da entrada

Page 20: Complexidade de Algoritmos - INFprestes/Courses/Complexity/aula20.pdfComplexidade de Algoritmos Métodos de Projeto de Algoritmos Para uma entrada não simples, os processos de decomposição

No Produto de números inteiros, m=3, c=2, k=1, a=1, (m>ck)

complexidade pessimista

Complexidade de Algoritmos

Qual é a complexidade do máximo e mínimo em uma tabela expresso por

Métodos de Projeto de Algoritmos

m=2, c = 2, k=0, a=2, (m>ck) complexidade pessimista O(n)

Divisão e conquista sob divisão da entrada