Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
4
PAA-ICOMP-UFAM
Contém o máximo
Contém o mínimo
5
Resolvendo somatórios
PAA-ICOMP-UFAM
6
PAA-ICOMP-UFAM
7
PAA-ICOMP-UFAM
8
PAA-ICOMP-UFAM
( 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
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
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
!! − !!!! = !! − !!!!
!!!
18
PAA-ICOMP-UFAM
Soma telescópica
!! − !!!! = !! − !!!!
!!!
19
PAA-ICOMP-UFAM
Soma telescópica
! ! !
1 1 1 1 1
= − =− −
! !+1 ! !+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
23
PAA-ICOMP-UFAM
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(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
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