Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar

arquivoescolar.org
from arquivoescolar.org More from this publisher
13.04.2013 Views

6. Divisão e conquista • Numa árvore de recursão cada nó representa o custo de um único subproblema da respectiva chamada recursiva • Somam-se os custos de todos os nós de um mesmo nível, para obter o custo daquele nível • Somam-se os custos de todos os níveis para obter o custo da árvore Exemplo Dada a recorrência T (n) = 3T (⌊n/4⌋) + Θ(n 2 ) • Em que nível da árvore o tamanho do problema é 1? No nível i = log 4 n = 1/2 log 2 n. • Quantos níveis tem a árvore? A árvore tem log 4 n+1 níveis (0, . . . , log 4 n). • Quantos nós têm cada nível? 3 i . • Qual o tamanho do problema em cada nível? n/4 i . • Qual o custo de cada nível i da árvore? 3 i c(n/4 i ) 2 . • Quantos nós tem o último nível? Θ(n log 4 3 ). • Qual o custo da árvore? log4 (n) i=0 n2 · (3/16) i = O(n2 ). Exemplo nível nós 0 Θ(n2 ) 30 1 Θ((n/4) 2 ) Θ((n/4)2 ) Θ((n/4) 2 ) 31 2 Θ((n/4 2 ) 2 ) Θ((n/4 2 ) 2 ) Θ((n/4 2 ) 2 ) 3 2 h = ⌈log 4 n⌉ · · · Θ((n/4 h ) 2 ) · · · 3 h Prova por substituição usando o resultado da árvore de recorrência 132 • O limite de O(n 2 ) deve ser um limite restrito, pois a primeira chamada recursiva é Θ(n 2 ). · · ·

• Prove por indução que T (n) = Θ(n 2 ) T (n) ≤ 3T (⌊n/4⌋) + cn 2 ≤ 3d ⌊n/4⌋ 2 + cn 2 ≤ 3d(n/4) 2 + cn 2 = 3 16 dn2 + cn 2 ≤ dn 2 . para 3d/16 + c ≤ d, ou seja, para valores d ≥ 16/13 c 6.2. Resolver recorrências Exemplo 6.6 Considere a recorrência T (n) = 3T (n/2) + cn do algoritmo de multiplicação de números binários (exemplo 6.4). A árvore tem log 2 n níveis, o nível i com 3 i nós, tamanho do problema n/2 i , trabalho cn/2 i por nó e portanto (3/2) i n trabalho total por nível. O número de folhas é 3 log 2 n e logo temos T (n) = 0≤i

6. Divisão e conquista<br />

• Numa árvore <strong>de</strong> recursão cada nó representa o custo <strong>de</strong> um único subproblema<br />

da respectiva chamada recursiva<br />

• Somam-se os custos <strong>de</strong> todos os nós <strong>de</strong> um mesmo nível, para obter o<br />

custo daquele nível<br />

• Somam-se os custos <strong>de</strong> todos os níveis para obter o custo da árvore<br />

Exemplo<br />

Dada a recorrência T (n) = 3T (⌊n/4⌋) + Θ(n 2 )<br />

• Em que nível da árvore o tamanho do problema é 1? No nível i =<br />

log 4 n = 1/2 log 2 n.<br />

• Quantos níveis tem a árvore? A árvore tem log 4 n+1 níveis (0, . . . , log 4 n).<br />

• Quantos nós têm cada nível? 3 i .<br />

• Qual o tamanho do problema em cada nível? n/4 i .<br />

• Qual o custo <strong>de</strong> cada nível i da árvore? 3 i c(n/4 i ) 2 .<br />

• Quantos nós tem o último nível? Θ(n log 4 3 ).<br />

• Qual o custo da árvore? log4 (n)<br />

i=0 n2 · (3/16) i = O(n2 ).<br />

Exemplo<br />

nível nós<br />

0 Θ(n2 <br />

<br />

) <br />

<br />

30 1 Θ((n/4) 2 <br />

<br />

)<br />

<br />

<br />

Θ((n/4)2 ) Θ((n/4) 2 ) 31 2 Θ((n/4 2 ) 2 ) Θ((n/4 2 ) 2 ) Θ((n/4 2 ) 2 ) 3 2<br />

h = ⌈log 4 n⌉ · · · Θ((n/4 h ) 2 ) · · · 3 h<br />

Prova por substituição usando o resultado da árvore <strong>de</strong> recorrência<br />

132<br />

• O limite <strong>de</strong> O(n 2 ) <strong>de</strong>ve ser um limite restrito, pois a primeira chamada<br />

recursiva é Θ(n 2 ).<br />

· · ·

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!