Universidade Federal do Amazonas Departamento de Eletrônica...

55
PAA-DCC-UFAM Universidade Federal do Amazonas Departamento de Eletrônica e Computação Somatórios e Recorrências

Transcript of Universidade Federal do Amazonas Departamento de Eletrônica...

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

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

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

PAA-DCC-UFAM

Exercícios

Utilize as técnicas de indução, perturbação e integrais para resolver os seguintes somatórios: