Você está na página 1de 53

PAA-ICOMP-UFAM

Projeto e Análise de Algoritmos

SOMAS +
Computando o custo de trechos de
algoritmos +
Divisão e Conquista
Universidade Federal do Amazonas
Departamento de Ciência da Computação
PAA-ICOMP-UFAM

Exemplo: MaxMin
n Problema:
n Dado um vetor de inteiros A, encontrar o maior e o
menor elementos de A
n 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

2
PAA-ICOMP-UFAM

Exemplo: MaxMin (2)


n Versão 2
n Melhor caso: A está em ordem crescente T(n) = n-1
n Pior caso: A está em ordem decrescente T(n) = 2(n-1)
n 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

3
PAA-ICOMP-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

4
PAA-ICOMP-UFAM

Exemplo MaxMin (4)

Contém o máximo

Contém o mínimo

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


= 3n/2 –2 = O (n)

5
Resolvendo somatórios
PAA-ICOMP-UFAM

Algumas técnicas úteis


n Procurar resposta e conferir
n Vale principalmente para o dia-a-dia.
n Indução
n Perturbação
n Somas Telescópicas
n Usar integrais

6
PAA-ICOMP-UFAM

Prova por indução


n Deseja-se mostrar que uma propriedade P é
verdadeira para todo inteiro n ≥ n0
n Base:
n provar que P é verdadeiro para n0
n Passo indutivo:
n provar que
n se P é verdadeiro para todo k
n tal que n0 ≤ k ≤ n – 1
n então P é verdadeiro para n

7
PAA-ICOMP-UFAM

Prova por indução (2)


n Exemplo
n
n(n + 1)
S ( n) = ∑ i = for n ≥ 1
i =0 2
n Base
1
1(1 + 1)
S (1) = ∑ i =
i =0 2

8
PAA-ICOMP-UFAM

Prova por Indução (3)


n Passo indutivo
k
k ( k + 1)
S (k ) = ∑ i = , 1 ≤ k ≤ n −1
for
i =0 2
n n −1
S (n) = ∑ i =∑ i + n =S (n − 1) + n =
i =0 i =0

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

9
PAA-ICOMP-UFAM

Somatórios
n O tempo de execução da ordenação por
inserção é determinado pelos loops
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

n Loops aninhados correspondem a


somatórios aninhados

10
PAA-ICOMP-UFAM

Somatórios (2)
n Progressão aritmética
n
n2 + n
∑ i = 1 + 2 + 3 + ... + n =
i =0 2

n Progresão Geométrica
n Seja um inteiron0 e um real 0< a ≠ 1
n
i 2 1 − a n+1
n
∑ a = 1 + a + a + ... + a =
i =0 1− a
n Progressões geométricas apresentam
crescimento exponencial

11
PAA-ICOMP-UFAM

Algumas propriedades

∑ cak = c ∑ ak
k∈K k∈K
Distributiva

∑ (ak + bk ) = ∑ ak + ∑ bk
k∈K k∈K k∈K
Associativa

∑a = ∑a
k∈K
k
p ( k )∈K
P(k ) Comutativa
(P é uma permutação)

12
PAA-ICOMP-UFAM

Exemplo
for j←2 to |A|
key←A[j]
Ordenação por i←j-1
while i>0 and A[i]>key
Inserção 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

13
PAA-ICOMP-UFAM

Perturbação
n Escrever Sn+1 tirando o primeiro termo e
igualar a Sn+1 tirando o último termo
n Encontrar Sn dos dois lados da equação
n Isolar Sn para encontrar a fórmula fechada
para o somatório

14
PAA-ICOMP-UFAM

Perturbação
n
S n = ∑ ak
k =0

S n +1 = S n + an +1
n +1 n
S n +1 = a0 + ∑ ak = a0 + ∑ ak +1
k =1 k =0

O truque agora consiste em quebrar o termo do somatório para chegar a Sn

15
PAA-ICOMP-UFAM

Perturbação
n
Sn = ∑ c k
k =0

S n +1 = S n + c n +1
n +1 n n
S n +1 = c 0 + ∑ c k = 1 + ∑ c k +1 = 1 + c∑ c k = 1 + cS n
k =1 k =0 k =0
n +1
1 + cS n = S n + c
c n +1 − 1
Sn =
c −1

16
PAA-ICOMP-UFAM

Perturbação
n Dá pra resolver somatórios importantes,
como (tente sempre resolver ik+1 para
achar ik, ex. i2, acha i1):

!
!(! + 1)
!=
2
!!!

17
PAA-ICOMP-UFAM

Soma telescópica

!! − !!!! = !! − !!!!
!!!

Demais parcelas internas são somadas e


subtraídas, anulando-se

18
PAA-ICOMP-UFAM

Soma telescópica

!! − !!!! = !! − !!!!
!!!

Demais parcelas internas são somadas e


subtraídas, anulando-se

19
PAA-ICOMP-UFAM

Soma telescópica
! ! !
1 1 1 1 1
= − =− −
! !+1 ! !+1 !+1 !
!!! !!! !!!

Fazendo 1/(i+1) ser ai, 1/(i) seria ai-1,


resultado seria an=1/(n+1) menos
a0=1/1…

!
1 1 1 1 !+1 −1 !
− − == − −1 =1− = =
!+1 ! !+1 !+1 !+1 !+1
!!!

20
PAA-ICOMP-UFAM

Integrais
n Integrais podem ser usadas para
encontrarmos o valor aproximado de um
somatório, indicando seu comportamento
assintótico.
n Exemplo:

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

21
PAA-ICOMP-UFAM

Somatórios Importantes

!
!(! + 1)
!=
2
!!!

! !
!!!! − 1
!! = 1= !−! +1
!−1
!!! !!! 22
PAA-ICOMP-UFAM

Determine a função de custo


n FOR(x=0; x< n; x++) {
n FOR(y=0; y<x; y++) {
n FOR(z=y; z<x; z++) {
n faz_algo;
n }
n }
n }
n }

23
PAA-ICOMP-UFAM

Falando um pouco de projeto


de algoritmos…

24
PAA-ICOMP-UFAM

Divisão e Conquista
n Método usado para projeto de algoritmos:
n Divisão: Se o tamanho da entrada é muito grande
para aplicação de uma solução simples, dividir o
problema e dois ou mais subproblemas disjuntos
n Conquista: Usar o método recursivamente para
resolver os subproblemas
n Combinação: Tomar as soluções dos subproblemas e
combina-las para compor uma solução para o
problema original.

25
PAA-ICOMP-UFAM

MergeSort
n Divisão: Se S tem n≥2 elementos, dividir seus
elementos em duas subsequencias S1 e S2 com
respectivamente ⎡n/2⎤ e ⎣n/2⎦ elementos.
n Conquista: Ordernar as subsequencias S1 e S2
usando MergeSort.
n Combinação: Intercale os elementos de S1 e S2
de forma a obter uma seqüência ordenada

26
PAA-ICOMP-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)

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.

27
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 1

28
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 2

29
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 3

30
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 4

31
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 5

32
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 6

33
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 7

34
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 8

35
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 9

36
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 10

37
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 11

38
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 12

39
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 13

40
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 14

41
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 15

42
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 16

43
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 17

44
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 18

45
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 19

46
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 20

47
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 21

48
PAA-ICOMP-UFAM

MergeSort (Exemplo) - 22

49
PAA-ICOMP-UFAM

Recorrências
n As chamadas recursivas nos algoritmos
podem ser descritas usando-se
equações(ou inequações) de recorrência

n São funções descritas em termos dos seus


valores para entradas menores.

50
PAA-ICOMP-UFAM

Recorrências (2)
n 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)

51
PAA-ICOMP-UFAM

Recorrências (3)
n Exemplo: MergeSort
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)

52
PAA-ICOMP-UFAM

Pergunta
n Fatores constantes somados no custo de
um programa recursivo (em cada instância)
podem mudar sua complexidade ?

53

Você também pode gostar