Professional Documents
Culture Documents
Paradigmas de Projeto de
Algoritmos
Antonio Alfredo Ferreira Loureiro
loureiro@dcc.ufmg.br
http://www.dcc.ufmg.br/~loureiro
UFMG/ICEx/DCC
PAA
UFMG/ICEx/DCC
PAA
n0, P (n)
P(n)
n0
UFMG/ICEx/DCC
Inteiros
PAA
UFMG/ICEx/DCC
PAA
UFMG/ICEx/DCC
PAA
P(n)
...
P (n 0)
P (n 1) P (n 2)
P (k )
P (k+1)
Inteiros
Os prximos 10 exemplos ilustram o uso do Princpio da Induo Matemtica e esto apresentados aqui para
estudo e referncia.
UFMG/ICEx/DCC
PAA
1,
1 + 2 + ... + n =
n(n + 1)
2
PAA
(k + 1)(k + 2)
2
Sabe-se que
k(k + 1)
+ (k + 1)
2
k(k + 1)
2(k + 1)
=
+
2
2
k2 + 3k + 2
=
2
(k + 1)(k + 2)
=
2
1 + 2 + . . . + k + (k + 1) =
UFMG/ICEx/DCC
PAA
0,
0 + 1 + 2 + ... + n =
n(n + 2)
2
E RRADO !
PAA
UFMG/ICEx/DCC
PAA
10
UFMG/ICEx/DCC
PAA
25
2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser verdadeira para n = k + 1, i.e., P (k) ! P (k + 1).
UFMG/ICEx/DCC
PAA
26
UFMG/ICEx/DCC
PAA
27
UFMG/ICEx/DCC
PAA
28
UFMG/ICEx/DCC
PAA
29
Inteiros
P (i )
Hipotese Indutiva
UFMG/ICEx/DCC
PAA
30
1.
UFMG/ICEx/DCC
PAA
31
UFMG/ICEx/DCC
PAA
32
UFMG/ICEx/DCC
PAA
33
T (2n) 2T (n) + 2n
T (2) = 1,
1,
UFMG/ICEx/DCC
PAA
34
1,
UFMG/ICEx/DCC
PAA
35
1,
+ 2n
2
2n + 2n
[Definio da recorrncia]
[Pela hiptese indutiva podemos substituir T (n)]
PAA
36
UFMG/ICEx/DCC
PAA
37
1,
Predicado(n) ! Predicado(2n)
(T (n) f (n)) ! (T (2n) f (2n))
(T (n) cn)) ! (T (2n) 2cn)
T (2n)
UFMG/ICEx/DCC
2T (n) + 2n 1
[Definio da recorrncia]
2cn + 2n 1
[Pela hiptese indutiva podemos substituir T (n)]
2cn + (2n 1)
2cn + 2n 1 > 2cn [A concluso (T (2n) 2cn) no vlida]
PAA
38
UFMG/ICEx/DCC
PAA
39
UFMG/ICEx/DCC
PAA
40
1,
PAA
1 < 2n log 2n
[A concluso verdadeira?]
1 < 2n log n + 2n [Sim!]
2n log n + 2n
2n log n + 2n
UFMG/ICEx/DCC
[Definio da recorrncia]
[Podemos substituir T (n)]
41
n + 1 a soluo exata de
T (n) = 2T ( n
2) + n
T (1) = 0
UFMG/ICEx/DCC
PAA
42
UFMG/ICEx/DCC
PAA
43
Recursividade
Um procedimento que chama a si mesmo, direta ou indiretamente, dito ser
recursivo.
Recursividade permite descrever algoritmos de forma mais clara e concisa,
especialmente problemas recursivos por natureza ou que utilizam estruturas
recursivas.
Por exemplo, rvore binria de pesquisa:
Todos os registros com chaves menores esto na sub-rvore esquerda;
Todos os registros com chaves maiores esto na sub-rvore direita.
UFMG/ICEx/DCC
PAA
44
Recursividade
Algoritmo para percorrer todos os registros em ordem de caminhamento
central:
1. Caminha na sub-rvore esquerda na ordem central;
2. Visita a raiz;
3. Caminha na sub-rvore direita na ordem central.
No caminhamento central, os ns so visitados em ordem lexicogrfica das
chaves.
C ENTRAL(p)
1 if p 6= nil
2
then C ENTRAL(p".esq)
3
Visita n
4
C ENTRAL(p".dir )
UFMG/ICEx/DCC
PAA
45
Implementao de recursividade
Usa-se uma pilha para armazenar os dados usados em cada chamada de
um procedimento que ainda no terminou.
Todos os dados no globais vo para a pilha, registrando o estado corrente
da computao.
Quando uma ativao anterior prossegue, os dados da pilha so recuperados.
No caso do caminhamento central:
Para cada chamada recursiva, o valor de p e o endereo de retorno da
chamada recursiva so armazenados na pilha.
Quando encontra p=nil o procedimento retorna para quem chamou utilizando o endereo de retorno que est no topo da pilha.
UFMG/ICEx/DCC
PAA
46
PAA
47
1)]
UFMG/ICEx/DCC
PAA
48
UFMG/ICEx/DCC
PAA
49
onde
1
fn = p [ n
5
8n
2.
) n],
5+1
1, 618 a razo de ouro.
2
n
F IBONACCI R EC(n
PAA
1) + F IBONACCI R EC(n
2)
50
UFMG/ICEx/DCC
PAA
51
20
1s
1/3 ms
PAA
30
2 min
1/2 ms
50
21 dias
3/4 ms
100
109 anos
1,5 ms
52
M (n) =
n 10
se n > 100
M (M (n + 11)) se n 100
M (99) = M (M (110))
= M (100)
= M (M (111))
= M (101)
= 91
UFMG/ICEx/DCC
PAA
A funo 91 de
McCarthy uma
funo recursiva
que retorna 91
para todos os inteiros n 100 e retorna n
10
para n > 100. Essa funo foi proposta pelo cientista da computao
John McCarthy, ganhador do ACM
Turing Award de 1971, responsvel
por cunhar o termo Inteligncia Artificial.
56
A(0, n) = n + 1
A(m, 0) = A(m
1, 1)
A(m, n) = A(m
1, A(m, n
1))
UFMG/ICEx/DCC
PAA
57
3)
UFMG/ICEx/DCC
PAA
58
A(m, n)
n+1
n+2
11
2n + 3
13
29
61
125
13
65533
65533
A(4, 65533)
A(5, 1)
265536
A(3, 265536
3)
8 2n
PAA
59
8
>
>
1
>
>
<
1:
se n = 1,
n)
1
+
G(
se n par,
2
>
>
>
>
: G(3n 1) se n mpar e n > 1.
G(2) = 1 + G(1) = 1 + 1 = 2
G(3) = G(8) = 1 + G(4) = 1 + (1 + G(2))
= 1 + (1 + 2) = 4
G(4) = 1 + G(2) = 1 + 2 = 3
G(5) = G(14) = 1 + G(7) = 1 + G(20)
= 1 + (1 + G(10))
= 1 + (1 + (1 + G(5))) = 3 + G(5)
UFMG/ICEx/DCC
PAA
60
8
>
>
1
>
>
<
1:
se n = 1,
n)
1
+
H(
se n par,
2
>
>
>
>
: H(3n + 1) se n mpar e n > 1.
UFMG/ICEx/DCC
PAA
61
Recursividade
Comentrios finais
Tcnica bastante adequada para expressar algoritmos que so definidos recursivamente.
No entanto, deve ser usada com muito cuidado.
Na maior parte dos casos funciona como uma tcnica conceitual ao invs de
uma tcnica computacional.
Algoritmos recursivos so normalmente modelados por uma equao de
recorrncia.
Ao se fazer a anlise de um algoritmo recursivo, deve-se tambm analisar o
crescimento da pilha.
UFMG/ICEx/DCC
PAA
62
UFMG/ICEx/DCC
PAA
63
PAA
64
UFMG/ICEx/DCC
PAA
65
UFMG/ICEx/DCC
PAA
66
2Dir e 1Cima
1Dir e 2Cima
1Esq e 2Cima
2Esq e 1Cima
8
6
2Esq e 1Baixo
UFMG/ICEx/DCC
1Esq e 2Baixo
PAA
1Dir e 2Baixo
2Dir e 1Baixo
67
1
2
3
4
5
6
7
8
9
10
11
UFMG/ICEx/DCC
PAA
Contadores
Tabuleiro de n n
Indica se achou uma soluo
Movimentos identificados por um n
Existem oito movimentos possveis
Conjunto de movimentos
Movimentos na horizontal
Movimentos na vertical
Inicializa tabuleiro
68
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
UFMG/ICEx/DCC
PAA
69
UFMG/ICEx/DCC
PAA
70
UFMG/ICEx/DCC
PAA
71
PAA
72
Pede-se:
Determine o maior e o menor elementos desse vetor usando diviso e conquista;
Determine o custo (nmero de comparaes) para achar esses dois elementos supondo que A possui n elementos.
UFMG/ICEx/DCC
PAA
73
PAA
74
UFMG/ICEx/DCC
PAA
75
f (2i) = 2f (2i 1 ) + 2
2f (2i 1 ) = 22 f (2i 2 ) + 22
22 f (2i 2 ) = 23 f (2i 3 ) + 23
...
2i 3 f (23 ) = 2i 2 f (22 ) + 2i 2
2i 2 f (22 ) = 2i 1 f (21 ) + 2i 1
= 2i 1 f (2) + 2i 1
= 2 i 1 + 2i 1
2
1
2 f (22 )
3 f (23 )
22 f (2i 2 ) + 22
2f (2i 1 ) + 2
f (2i)
f (n)
=
=
...
=
=
=
=
=
2i
2i
+ 2i
1 + 2i
1
1
+ 2i
2 i 1 + 2i 1 + 2 i 2 + . . . + 23
2 i 1 + 2i 1 + 2 i 2 + . . . + 23 + 22
2i 1 + 2 i 1 + 2 i 2 + . . . + 2 3 + 2 2 + 2
Pi 1 k
i
1
2
+ k=1 2 = 2i 1 + 2i 2
n
+ n 2 = 3n
2.
2
2
76
UFMG/ICEx/DCC
PAA
77
Diviso-e-conquista:
Alguns comentrios
Este paradigma no aplicado apenas a problemas recursivos.
Existem pelo menos trs cenrios onde diviso e conquista aplicado:
1. Processar independentemente partes do conjunto de dados.
Exemplo: Mergesort.
2. Eliminar partes do conjunto de dados a serem examinados.
Exemplo: Pesquisa binria.
3. Processar separadamente partes do conjunto de dados mas onde a soluo de uma parte influencia no resultado da outra.
Exemplo: Somador apresentado.
UFMG/ICEx/DCC
PAA
97
Balanceamento
No projeto de algoritmos, importante procurar sempre manter o balanceamento na sub-diviso de um problema em partes menores.
Diviso e conquista no a nica tcnica em que balanceamento til.
Considere o seguinte exemplo de ordenao:
E XEMPLO D E O RDENAO(n)
1 for i = 1. .n 1 do
2
Selecione o menor elemento de A[i. .n] e troque-o com o elemento A[i].
UFMG/ICEx/DCC
PAA
98
1) + n
1
2
1=
1)
n(n
2
PAA
99
UFMG/ICEx/DCC
PAA
100
UFMG/ICEx/DCC
PAA
101
UFMG/ICEx/DCC
PAA
102
Exemplo de balanceamento:
Implementao do Mergesort
M ERGESORT(A, i, j)
1
2
3
4
5
1 comparaes.
UFMG/ICEx/DCC
PAA
103
Anlise do Mergesort
Na contagem de comparaes, o comportamento do Mergesort pode ser representado por:
T (n) = 2T ( n
2) + n
T (1) = 0.
1,
n + 1.
UFMG/ICEx/DCC
PAA
104
Balanceamento:
Alguns comentrios
Para o problema de ordenao, o balanceamento levou a um resultado muito
superior:
O custo passou de O(n2) para O(n log n).
Balanceamento uma tcnica presente em diferentes aspectos algortmicos
de Cincia da Computao como Sistemas Operacionais.
Tambm uma tcnica importante quando o modelo computacional usado
o PRAM (Parallel Random Access Machine).
UFMG/ICEx/DCC
PAA
105