Você está na página 1de 55

PAA-DCC-UFAM

Somatrios e Recorrncias

Universidade Federal do Amazonas


Departamento de Eletrnica e Computao

PAA-DCC-UFAM

Exemplo: MaxMin (1)


Problema:
Dado um vetor de inteiros A, encontrar o maior e o
menor elementos de A
O nmero de comparaes entre elementos de A
dado por T(n) = 2 (n-1) para qualquer caso
MaxMin(A[1n])
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)
(n-1)
(n-1)

PAA-DCC-UFAM

Exemplo: MaxMin (2)


Verso 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 mdio: T(n) = n-1 + (n-1)/2 = 3n/2 3/2
MaxMin2(A[1n])
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[1n])
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)


Contm o mximo
Contm o mnimo

T(n) = n/2 + (n-2)/2 + (n-2)/2


= 3n/2 2 = O (n)

Resolvendo somatrios
Algumas tcnicas teis

PAA-DCC-UFAM

Procurar resposta e conferir


Vale principalmente para o dia-a-dia

Induo
Perturbao
Usar integrais

PAA-DCC-UFAM

Prova por induo (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
ento P verdadeiro para n

PAA-DCC-UFAM

Prova por induo (2)


Exemplo
n

n(n + 1)
for n 1
S ( n) = i =
2
i =0

Base: Provar que S(n0)=1 verdadeiro


1

1(1 + 1)
S (1) = i =
2
i =0

n0 = 1

PAA-DCC-UFAM

Prova por induo (3)


Passo indutivo
k

S (k ) =

i=0

S (n) =

i=

Caso base provou para o limite 1

k ( k + 1)
for
, 1 k n 1
2

n 1

i=0

i=0

i = i + n = S ( n 1) + n =

( n 1 + 1)
(n 2 n + 2n)
= ( n 1)
+n=
=
2
2
n ( n + 1)
=
2

Provar para o limite


n-1

PAA-DCC-UFAM

Exerccio: Prova por induo


Prove que
n

S n = a = na para n 1
i =1

Base: Provar que S(n0)=a verdadeiro


n

S n = a = 1.a
i =1

n0 = 1

PAA-DCC-UFAM

Exerccio: Prova por induo


Passo indutivo
k

S k = a = ka para 1 k n - 1
i =1
n

n 1

i =1

i =1

Sn = a = a + a = S (n 1) + a
= (n 1).a + a = na a + a
= na

PAA-DCC-UFAM

Somatrios (1)
O tempo de execuo da ordenao por insero
determinado pelos loops aninhados:
for j2 to length(A)
keyA[j]
ij-1
while i>0 and A[i]>key
A[i+1]A[i]
ii-1
A[i+1]key

Loops aninhados correspondem a somatrios


aninhados

PAA-DCC-UFAM

Somatrios (2)
Progresso aritmtica
n2 + n
i = 1 + 2 + 3 + ... + n =

2
i =0
n

Progreso geomtrica
Seja um inteiron0 e um real 0 < a 1
1 a n +1
a = 1 + a + a + ... + a =

1 a
i =0
n

Progresses geomtricas apresentam crescimento


exponencial

PAA-DCC-UFAM

Algumas propriedades

cak =cak
kK

Distributiva

kK

(ak +bk ) = ak +bk


kK

kK

a = a
k

kK

P(k)

p(k)K

Associativa

kK
Comutativa
(P uma permutao)

PAA-DCC-UFAM

Exerccio: Prova por induo (1)


n

Demostrar que a srie geomtrica 3k = (3n )


k =0
n

Vamos provar que

k
n
3

c3

k =0

Base: Condio inicial n0=0, temos: 3k c3n = 1 c


k =0

Passo indutivo: Supondo que o limite se


mantenha vlido para n, vamos provar que ele
vlido para n+1

PAA-DCC-UFAM

Exerccio: Prova por induo (2)


Passo indutivo: Provar para n+1

k
n
3

c3

k =0

n +1

k
n +1
=
+
3
3
3

k

k =0

k =0

c3n + 3n +1
1 1
= + c3n +1
3 c
c3n +1
3
1 1
desde que + 1 ou, de modo equivalente, c
2
3 c

PAA-DCC-UFAM

Exemplo
Ordenao por
Insero

|A| = 2
|A| = 3
|A| = 4
...
|A| = n

for j2 to |A|
keyA[j]
ij-1
while i>0 and A[i]>key
A[i+1]A[i]
ii-1
A[i+1]key

1
1+2
1+2+3
1 + 2 + 3 + + n-1

PAA-DCC-UFAM

Perturbao (1)
Escrever Sn+1 tirando o primeiro termo e igualar a
Sn+1 tirando o ltimo termo
Encontrar Sn dos dois lados da equao
Isolar Sn para encontrar a frmula fechada para o
somatrio

PAA-DCC-UFAM

Perturbao (2)
n

S n = ak
k =0

S n +1 = S n + an +1
n +1

Tirando o ltimo termo


n

S n +1 = a0 + ak = a0 + ak +1
k =1

k =0

Tirando o primeiro
termo

O truque agora consiste em quebrar o termo do somatrio para chegar a Sn

PAA-DCC-UFAM

Perturbao (3)
n

Sn = c k
k =0

S n +1 = S n + c n +1
n +1

S n +1 = c + c = 1 + c
0

k =1

1 + cS n = S n + c n +1
n +1

1
Sn =
c 1
c

k =0

k +1

= 1 + c c = 1 + cS n
k

k =0

PAA-DCC-UFAM

Exerccio: Perturbao
n

Encontre a frmula fechada para

k
a

k =1

Sn = a k
k =1

S n +1 = S n + a n +1
n +1

k =2

k =1

k =1

S n +1 = a1 + a k = a + a k +1 = a + a a k = a + aS n
S n + a n +1 = a + aS n
a n +1 a
Sn =
a 1

PAA-DCC-UFAM

Integrais
Integrais podem ser usadas para
encontrarmos o valor aproximado de um
somatrio, indicando seu comportamento
assinttico
Exemplo:
n

2
=
=
i
O
(
i
)
O
(
n
)
i =0

PAA-DCC-UFAM

Exerccio: Integrais
Encontre o valor aproximado dos seguintes
somatrio: a, i , 1
n

i =1

i =1

n
a = a = (n )

i =1
1
n
n

3
3
4

i
=

i
=


i =1
1
n
n 1
1
= = (ln n )

i =1 i
1 i
n

( )

i =1

PAA-DCC-UFAM

Diviso e Conquista
Mtodo usado para projeto de algoritmos:
Diviso: Se o tamanho da entrada muito grande
para aplicao de uma soluo simples, dividir o
problema em dois ou mais subproblemas disjuntos
Conquista: Usar o mtodo recursivamente para
resolver os subproblemas
Combinao: Obter as solues dos subproblemas e
combin-las para compor uma soluo para o
problema original

PAA-DCC-UFAM

MergeSort
Diviso: Se S tem n2 elementos, dividir seus
elementos em duas subsequncias S1 e S2 com
respectivamente n/2 e n/2 elementos
Conquista: Ordernar as subsequncias S1 e S2
usando MergeSort
Combinao: Intercale os elementos de S1 e S2
de forma a obter uma seqncia 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
intercalao) em uma nica pilha de sada ordenada
1)

Escolher a menor das duas cartas nas pilhas

2)

Remov-la de sua pilha

3)

Coloc-la sobre a pilha de sada

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)/2
Merge-Sort(A, p, q)
Merge-Sort(A, q+1, r)
Merge(A, p, q, r)

A o arranjo
p, q e r so ndices de
numerao dos elementos
do arranjo p q < r

Se p r, o subarranjo tem no mximo um elemento e,


portanto, j est ordenado
Merge(A, p, q, r)
Retire o menor entre o menor dos elementos de
A[pq] e A[q+1r] e acrescente ao resultado. Repita
at que as duas sub-sequncias estejam vazias

PAA-DCC-UFAM

MergeSort (Exemplo) - 1

PAA-DCC-UFAM

MergeSort (Exemplo) - 2

PAA-DCC-UFAM

MergeSort (Exemplo) - 3

PAA-DCC-UFAM

MergeSort (Exemplo) - 4

PAA-DCC-UFAM

MergeSort (Exemplo) - 5

PAA-DCC-UFAM

MergeSort (Exemplo) - 6

PAA-DCC-UFAM

MergeSort (Exemplo) - 7

PAA-DCC-UFAM

MergeSort (Exemplo) - 8

PAA-DCC-UFAM

MergeSort (Exemplo) - 9

PAA-DCC-UFAM

MergeSort (Exemplo) - 10

PAA-DCC-UFAM

MergeSort (Exemplo) - 11

PAA-DCC-UFAM

MergeSort (Exemplo) - 12

PAA-DCC-UFAM

MergeSort (Exemplo) - 13

PAA-DCC-UFAM

MergeSort (Exemplo) - 14

PAA-DCC-UFAM

MergeSort (Exemplo) - 15

PAA-DCC-UFAM

MergeSort (Exemplo) - 16

PAA-DCC-UFAM

MergeSort (Exemplo) - 17

PAA-DCC-UFAM

MergeSort (Exemplo) - 18

PAA-DCC-UFAM

MergeSort (Exemplo) - 19

PAA-DCC-UFAM

MergeSort (Exemplo) - 20

PAA-DCC-UFAM

MergeSort (Exemplo) - 21

PAA-DCC-UFAM

MergeSort (Exemplo) - 22

PAA-DCC-UFAM

Recorrncias
As chamadas recursivas nos algoritmos podem
ser descritas usando-se equaes(ou inequaes)
de recorrncia
Recorrncia uma equao ou desigualdade que
descreve uma funo em termos dos seus
valores para entradas menores

PAA-DCC-UFAM

Recorrncias (2)
Exemplo: Busca Binria
BuscaBin(A[1n],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[1k-1],q)
else BuscaBin(A[kn],q)

PAA-DCC-UFAM

Exemplo: MergeSort
Suposio: O tamanho do problema original
uma potncia de dois (simplificao)
Duas
subsequncia
s de tamanho
n/2

Merge-Sort(A, p, r)
if p < r then
q(p+r)/2
Merge-Sort(A, p, q)
Merge-Sort(A, q+1, r)
Merge(A, p, q, r)

PAA-DCC-UFAM

Procedimento do Merge
(1)

(1)

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
(n1)
do L[i]=A[p+i]
for j=0 to n2-1
(n2)
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]
(n)
i=i+1
else A[K]=R[j]
j=j+1

PAA-DCC-UFAM

Complexidade do MergeSort
Caso base: ocorre quando
n=1. Como lg 1=0, temos
que lg n +1 fornece o
nmero correto
Hiptese indutiva: uma
rvore de 2i ns, temos lg
2i+1=i+1. Para 2i+1 ns
temos lg 2i+1+1 = (i+1)+1

cn(lg n + 1) = (n lg n )

PAA-DCC-UFAM

Exerccios
Utilize as tcnicas de induo, perturbao e
integrais para resolver os seguintes
somatrios: