universidade federal do amazonas departamento de eletrônica...
TRANSCRIPT
PAA-DCC-UFAM
Universidade Federal do Amazonas
Departamento de Eletrônica e Computação
Somatórios e Recorrências
PAA-DCC-UFAM
Exemplo: MaxMin (1)
� Problema:
� Dado um vetor de inteiros A, encontrar o maior e o menor elementos de A
� O número de comparações entre elementos de A é dado por T(n) = 2 (n-1) para qualquer caso
MaxMin(A[1…n])
Max ← Α[1]; Min ← Α[1];
for i = 2 … n
if A[i] > Max then Max ← Α[i ];
if A[i] < Min then Min ← Α[i ];
end_for
(n-1)(n-1)
(n)
PAA-DCC-UFAM
Exemplo: MaxMin (2)
� Versão 2
� Melhor caso: A está em ordem crescente T(n) = n-1
� Pior caso: A está em ordem decrescente T(n) = 2(n-1)
� Caso médio: T(n) = n-1 + (n-1)/2 = 3n/2 – 3/2
MaxMin2(A[1…n])
Max ← Α[1]; Min ← Α[1];
for i = 2 … n
if A[i] > Max then Max ← Α[i ];
else if A[i] < Min then Min ← Α[i ];
end_for
PAA-DCC-UFAM
Exemplo: MaxMin (3)
MaxMin3(A[1…n])
if (n mod 2)>0 then u ← n; A[n+1]=A[n]
else u ← n-1;
if A[1]>A[2] then Max ← Α[1]; Min ← Α[2]
else Min ← Α[1]; Max ← Α[2]
i ← 3;
while i ≤ u do
if A[i]>A[i+1] then
if A[i] > Max then Max ← Α[i];
if A[i+1] < Min then Min ← Α[i+1];
else
if A[i] < Min then Min ← Α[i];
if A[i+1] > Max then Max ← Α[i+1];
i ← i+2;
end-while
PAA-DCC-UFAM
Exemplo: MaxMin (4)
T(n) = n/2 + (n-2)/2 + (n-2)/2
= 3n/2 –2 = O (n)
Contém o máximo
Contém o mínimo
PAA-DCC-UFAM
� Procurar resposta e conferir
� Vale principalmente para o dia-a-dia
� Indução
� Perturbação
� Usar integrais
Resolvendo somatóriosAlgumas técnicas úteis
PAA-DCC-UFAM
Prova por indução (1)
� Deseja-se mostrar que uma propriedade P é verdadeira para todo inteiro n ≥ n0
� Base: � provar que P é verdadeiro para n0
� Passo indutivo: � provar que
� se P é verdadeiro para todo k
� tal que n0 ≤ k ≤ n – 1
� então P é verdadeiro para n
PAA-DCC-UFAM
Prova por indução (2)
� Exemplo
� Base: Provar que S(n0)=1 é verdadeiro
0
( 1)( ) for 1
2
n
i
n nS n i n
=
+= = ≥∑
1
0
1(1 1)(1)
2i
S i=
+= =∑ n0 = 1
PAA-DCC-UFAM
Prova por indução (3)
� Passo indutivo
0
1
0 0
2
( 1)( ) for 1 k 1
2
( ) ( 1)
( 1 1) ( 2 )( 1)
2 2
( 1)
2
k
i
n n
i i
k kS k i n
S n i i n S n n
n n n nn n
n n
=
−
= =
+= = ≤ ≤ −
= = + = − + =
− + − += − + = =
+=
∑
∑ ∑
,
Caso base provou para o limite 1
Provar para o limite
n-1
PAA-DCC-UFAM
Exercício: Prova por indução
� Prove que
� Base: Provar que S(n0)=a é verdadeiro
n0 = 1
1n para 1
≥==∑=
naaSn
i
n
aaSn
i
n .11
==∑=
PAA-DCC-UFAM
Exercício: Prova por indução
� Passo indutivo
( )
( )
na
aanaaan
anSaaa
kaaS
n
i
n
i
k
i
k
=
+−=+−=
+−=+==
≤≤==
∑∑
∑−
==
=
.1
1S
1-nk1 para
1
11
n
1
PAA-DCC-UFAM
Somatórios (1)
� O tempo de execução da ordenação por inserção é determinado pelos loops aninhados:
� Loops aninhados correspondem a somatórios aninhados
for j←2 to length(A)
key←A[j]
i←j-1
while i>0 and A[i]>key
A[i+1]←A[i]
i←i-1
A[i+1]←key
PAA-DCC-UFAM
Somatórios (2)
� Progressão aritmética
� Progresão geométrica
� Seja um inteiron0 e um real 0 < a ≠ 1
� Progressões geométricas apresentam crescimento exponencial
12
0
11 ...
1
nni n
i
aa a a a
a
+
=
−= + + + + =
−∑
2
0
1 2 3 ...2
n
i
n ni n
=
+= + + + + =∑
PAA-DCC-UFAM
Algumas propriedades
∑∑
∑∑∑
∑∑
∈∈
∈∈∈
∈∈
=
+=+
=
Kkp
kP
Kk
k
Kk
k
Kk
k
Kk
kk
Kk
k
Kk
k
aa
baba
acca
)(
)(
)(
Comutativa
(P é uma permutação)
Associativa
Distributiva
PAA-DCC-UFAM
Exercício: Prova por indução (1)
� Demostrar que a série geométrica
� Vamos provar que
� Base: Condição inicial n0=0, temos:
� Passo indutivo: Supondo que o limite se mantenha válido para n, vamos provar que ele é válido para n+1
( )nn
k
k 330
Ο=∑=
nn
k
kc33
0
≤∑=
ccn
n
k
k≤=≤∑
=
1330
PAA-DCC-UFAM
Exercício: Prova por indução (2)
� Passo indutivo: Provar para n+1
2
3 e,equivalent modo de ou, 1
1
3
1 que desde
3
31
3
1
33
333
1
1
1
1
0
1
0
≥≤
+
≤
+=
+≤
+=
+
+
+
+
=
+
=
∑∑
cc
c
cc
c
n
n
nn
nn
k
kn
k
k
nn
k
kc33
0
≤∑=
PAA-DCC-UFAM
Exemplo
for j←2 to |A|
key←A[j]
i←j-1
while i>0 and A[i]>key
A[i+1]←A[i]
i←i-1
A[i+1]←key
|A| = 2 → 1
|A| = 3 → 1 + 2
|A| = 4 → 1 + 2 + 3
...
|A| = n → 1 + 2 + 3 + … + n-1
Ordenação porInserção
PAA-DCC-UFAM
Perturbação (1)
� Escrever Sn+1 tirando o primeiro termo e igualar a Sn+1 tirando o último termo
� Encontrar Sn dos dois lados da equação
� Isolar Sn para encontrar a fórmula fechada para o somatório
PAA-DCC-UFAM
Perturbação (2)
∑∑
∑
=
+
+
=
+
++
=
+=+=
+=
=
n
k
k
n
k
kn
nnn
n
k
kn
aaaaS
aSS
aS
0
10
1
1
01
11
0
O truque agora consiste em quebrar o termo do somatório para chegar a Sn
Tirando o último termo
Tirando o primeiro termo
PAA-DCC-UFAM
Perturbação (3)
1
1
1
111
1
1
00
11
1
0
1
1
1
0
−
−=
+=+
+=+=+=+=
+=
=
+
+
==
++
=
+
+
+
=
∑∑∑
∑
c
cS
cScS
cScccccS
cSS
cS
n
n
n
nn
n
n
k
kn
k
kn
k
k
n
n
nn
n
k
k
n
PAA-DCC-UFAM
Exercício: Perturbação
1
1
1
11
11
2
1
1
1
1
1
−
−=
+=+
+=+=+=+=
+=
=
+
+
==
++
=
+
+
+
=
∑∑∑
∑
a
aaS
aSaaS
aSaaaaaaaaS
aSS
aS
n
n
n
n
n
n
n
k
kn
k
kn
k
k
n
n
nn
n
k
k
n
� Encontre a fórmula fechada para ∑=
n
k
ka
1
PAA-DCC-UFAM
Integrais
� Integrais podem ser usadas para encontrarmos o valor aproximado de um somatório, indicando seu comportamento assintótico
� Exemplo:
∫∑ ===
nn
inOiOi
0
2
0)()(
PAA-DCC-UFAM
Exercício: Integrais
� Encontre o valor aproximado dos seguintes somatório: ∑∑∑
===
n
i
n
i
n
i iia
11
3
1
1,,
( )
( )
( )nii
nii
naa
nn
i
nn
i
nn
i
ln11
11
4
1
3
1
3
11
Ο=
Ο=
Ο=
Ο=
Ο=
Ο=
∫∑
∫∑
∫∑
=
=
=
PAA-DCC-UFAM
Divisão e Conquista
� Método usado para projeto de algoritmos:
� Divisão: Se o tamanho da entrada é muito grande
para aplicação de uma solução simples, dividir o
problema em dois ou mais subproblemas disjuntos
� Conquista: Usar o método recursivamente para
resolver os subproblemas
� Combinação: Obter as soluções dos subproblemas e
combiná-las para compor uma solução para o
problema original
PAA-DCC-UFAM
MergeSort
� Divisão: Se S tem n≥2 elementos, dividir seus
elementos em duas subsequências S1 e S2 com
respectivamente n/2 e n/2 elementos
� Conquista: Ordernar as subsequências S1 e S2
usando MergeSort
� Combinação: Intercale os elementos de S1 e S2
de forma a obter uma seqüência ordenada
PAA-DCC-UFAM
Merge Sort: Algoritmo
� Analogia com o jogo de cartas
� Temos duas pilhas ordenadas com as cartas de menor
valor em cima
� Desejamos juntar as duas pilhas (fazendo a
intercalação) em uma única pilha de saída ordenada
1) Escolher a menor das duas cartas nas pilhas
2) Removê-la de sua pilha
3) Colocá-la sobre a pilha de saída
4) Repetir os passos 1,2,3 até uma das duas pilhas de entrada
esvaziarem
PAA-DCC-UFAM
Merge Sort: Algoritmo
Merge-Sort(A, p, r)
if p < r then
q ← (p+r)/2Merge-Sort(A, p, q)
Merge-Sort(A, q+1, r)
Merge(A, p, q, r)
Merge(A, p, q, r)
Retire o menor entre o menor dos elementos de
A[p…q] e A[q+1…r] e acrescente ao resultado. Repita
até que as duas sub-sequências estejam vazias
A é o arranjop, q e r são índices de numeração dos elementos do arranjo p ≤ q < r
Se p≥ r, o subarranjo tem no máximo um elemento e, portanto, já está ordenado
PAA-DCC-UFAM
Recorrências
� As chamadas recursivas nos algoritmos podem ser descritas usando-se equações(ou inequações) de recorrência
� Recorrência é uma equação ou desigualdade que descreve uma função em termos dos seus valores para entradas menores
PAA-DCC-UFAM
Recorrências (2)
� Exemplo: Busca Binária
BuscaBin(A[1…n],q)
if n=1
then if A[n]=q then return n
else return 0
k←(n+1)/2
if q < A[k] then BuscaBin(A[1…k-1],q)
else BuscaBin(A[k…n],q)
PAA-DCC-UFAM
Exemplo: MergeSort
� Suposição: O tamanho do problema original é uma potência de dois (simplificação)
Merge-Sort(A, p, r)
if p < r then
q←(p+r)/2Merge-Sort(A, p, q)
Merge-Sort(A, q+1, r)
Merge(A, p, q, r)
Duas subsequências de tamanho n/2
PAA-DCC-UFAM
Procedimento do Merge
Merge(A, p, q, r)
n1 = q-p+1
n2 = r-q
criar arranjos L[0..n1] e R[0..n2]
for i=0 to n1-1
do L[i]=A[p+i]
for j=0 to n2-1
do R[j]=A[q+j+1]
L[n1]=∞
R[n2]=∞
i=0
j=0
for k=p to r
do if L[i] ≤ R[j]
then A[k]=L[i]
i=i+1
else A[K]=R[j]
j=j+1
Θ(1)
Θ(n1)
Θ(n2)
Θ(1)
Θ(n)
PAA-DCC-UFAM
Complexidade do MergeSort
( ) ( )nnncn lg1lg Θ=+
Caso base: ocorre quandon=1. Como lg 1=0, temosque lg n +1 fornece o número correto
Hipótese indutiva: uma árvore de 2i nós, temos lg2i+1=i+1. Para 2i+1 nós temos lg 2i+1+1 = (i+1)+1