complexidade de algoritmos - infprestes/courses/complexity/aula20.pdfcomplexidade de algoritmos...
TRANSCRIPT
Complexidade de Algoritmos
Edson Prestes
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) ?
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
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
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)))
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)))
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))
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
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.
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
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
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
Complexidade de Algoritmos
Complexidade da Divisão e Conquista sob subtração
Métodos de Projeto de Algoritmos
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
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
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
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
Complexidade de Algoritmos
Complexidade da Divisão e Conquista sob divisão (Generalização)
Métodos de Projeto de Algoritmos
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
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