Title: Projeto e An
1Projeto e Análise de Algoritmos
Celso Carneiro Ribeiro http//www.inf.puc-rio.br/
celso
2Parte 2
Análise de Algoritmos
3Análise de algoritmos
- Motivação
- Análise de algoritmos
- Complexidade de pior caso
- Notação O
- Aplicações
- Algoritmos polinomiais
- Comparação de algoritmos
- Algoritmos recursivos
- Algoritmos não-polinomiais
- Algoritmos pseudo-polinomiais
4Motivação
- Problema
- Alunos cursam disciplinas.
- Cada disciplina tem uma prova.
- Há um único horário em que são marcadas provas em
cada dia. - Provas de duas disciplinas diferentes não podem
ser marcadas para o mesmo dia se há alunos que
cursam as duas disciplinas. - Montar um calendário de provas
- satisfazendo as restrições de conflito e
- minimizando o número de dias necessários para
realizar todas as provas.
5Motivação
6Motivação
- Os alunos que fazem apenas uma disciplina influem
na modelagem? - Não!
- O número de alunos que cursam simultaneamente um
par de disciplinas influi na modelagem? - Não!
- E se o objetivo fosse minimizar o número de
alunos sacrificados? - Neste caso, sim!
- Este modelo pode ser simplificado?
7Motivação
- Simplificação tratando-se apenas as interseções
Considerar apenas as interseções não-vazias.
8Motivação
- Simplificação com a utilização de um grafo de
conflitos
disciplinas ? nós conflitos ? arestas
9Motivação
- Simplificação com a utilização de um grafo de
conflitos
disciplinas ? nós conflitos ? arestas
10Modelo de dados
Grafo nós, arestas
- As provas de um par de disciplinas não podem ser
marcadas simultaneamente se existe uma aresta
entre os nós que representam estas duas
disciplinas. - Outros modelos de dados listas, árvores,
conjuntos, circuitos - Como representar em computador o modelo de dados
chamado grafo? - Matriz de incidência (nó-aresta)
- Matriz de adjacência (nó-nó)
11Matriz de incidência
- n nós e m arestas
- Memória utilizada nm
a b c d e f g
A B C D E F
12Matriz de adjacência
A B C D E F
A B C D E F
13Listas de adjacências
- Estas matrizes são duas estruturas de dados que
representam o mesmo modelo de dados (grafo). - Outra estrutura de dados para grafos são as
listas de adjacências.
14Motivação
- Como montar um calendário satisfazendo as
restrições de conflito? - Marcar para o primeiro dia qualquer combinação de
disciplinas sem conflitos A, B, C, D, E, F, AE,
AF, BD, BE, BF, CD, CE, DF, BDF
15Motivação
- Como montar um calendário satisfazendo as
restrições de conflito? - Marcar para o primeiro dia qualquer combinação de
disciplinas sem conflitos A, B, C, D, E, F, AE,
AF, BD, BE, BF, CD, CE, DF, BDF
D
A
E
B
C
F
16Motivação
- Como montar um calendário satisfazendo as
restrições de conflito? - Marcar para o primeiro dia qualquer combinação de
disciplinas sem conflitos A, B, C, D, E, F, AE,
AF, BD, BE, BF, CD, CE, DF, BDF
D
A
E
B
C
F
17Motivação
- Como montar um calendário satisfazendo as
restrições de conflito? - Marcar para o primeiro dia qualquer combinação de
disciplinas sem conflitos A, B, C, D, E, F, AE,
AF, BD, BE, BF, CD, CE, DF, BDF
D
A
E
B
C
F
18Motivação
- Como montar um calendário satisfazendo as
restrições de conflito? - Marcar para o primeiro dia qualquer combinação de
disciplinas sem conflitos A, B, C, D, E, F, AE,
AF, BD, BE, BF, CD, CE, DF, BDF
D
A
E
B
C
F
19Motivação
- Como montar um calendário satisfazendo as
restrições de conflito? - Marcar para o primeiro dia qualquer combinação de
disciplinas sem conflitos A, B, C, D, E, F, AE,
AF, BD, BE, BF, CD, CE, DF, BDF
D
A
E
B
C
F
20Motivação
- Como montar um calendário satisfazendo as
restrições de conflito? - Marcar para o primeiro dia qualquer combinação de
disciplinas sem conflitos A, B, C, D, E, F, AE,
AF, BD, BE, BF, CD, CE, DF, BDF
D
A
E
B
C
F
21Motivação
- Como montar um calendário satisfazendo as
restrições de conflito? - Marcar para o primeiro dia qualquer combinação de
disciplinas sem conflitos A, B, C, D, E, F, AE,
AF, BD, BE, BF, CD, CE, DF, BDF
D
A
E
B
C
F
22Motivação
- Como montar um calendário satisfazendo as
restrições de conflito? - Marcar para o primeiro dia qualquer combinação de
disciplinas sem conflitos A, B, C, D, E, F, AE,
AF, BD, BE, BF, CD, CE, DF, BDF
D
A
E
B
C
F
23Motivação
- Como montar um calendário satisfazendo as
restrições de conflito? - Marcar para o primeiro dia qualquer combinação de
disciplinas sem conflitos A, B, C, D, E, F, AE,
AF, BD, BE, BF, CD, CE, DF, BDF
D
A
E
B
C
F
24Motivação
- Como montar um calendário satisfazendo as
restrições de conflito? - Marcar para o primeiro dia qualquer combinação de
disciplinas sem conflitos A, B, C, D, E, F, AE,
AF, BD, BE, BF, CD, CE, DF, BDF
D
A
E
B
C
F
- Escolher por exemplo o par de disciplinas B e E
para o primeiro dia e retirá-las do grafo.
25Motivação
- Como montar um calendário satisfazendo as
restrições de conflito? - Marcar para o primeiro dia qualquer combinação de
disciplinas sem conflitos A, B, C, D, E, F, AE,
AF, BD, BE, BF, CD, CE, DF, BDF
D
A
C
F
- Escolher por exemplo o par de disciplinas B e E
para o primeiro dia e retirá-las do grafo.
26Motivação
- Marcar para o segundo dia qualquer combinação de
disciplinas sem conflitos A, C, D, F, AF, CD, DF
D
A
C
F
27Motivação
- Marcar para o segundo dia qualquer combinação de
disciplinas sem conflitos A, C, D, F, AF, CD, DF
D
A
C
F
28Motivação
- Marcar para o segundo dia qualquer combinação de
disciplinas sem conflitos A, C, D, F, AF, CD, DF
D
A
C
F
29Motivação
- Marcar para o segundo dia qualquer combinação de
disciplinas sem conflitos A, C, D, F, AF, CD, DF
D
A
C
F
30Motivação
- Marcar para o segundo dia qualquer combinação de
disciplinas sem conflitos A, C, D, F, AF, CD, DF
D
A
C
F
- Escolher por exemplo o par de disciplinas D e F
para o segundo dia e retirá-las do grafo.
31Motivação
- Marcar para o segundo dia qualquer combinação de
disciplinas sem conflitos A, C, D, F, AF, CD, DF
A
C
- Escolher por exemplo o par de disciplinas D e F
para o segundo dia e retirá-las do grafo.
32Motivação
- Marcar A ou C para o terceiro dia e a que sobrar
para o quarto dia
A
C
33Motivação
- A solução assim construída utiliza quatro dias
B-E no primeiro dia, D-F no segundo dia, A no
terceiro e C no quarto
D
A
E
B
C
F
- Uma solução com quatro dias corresponde a colorir
os nós do grafo de conflitos com quatro cores!
34Motivação
- Esta solução utiliza o menor número possível de
dias? ou ... - É possível montar uma solução com menos dias? ou
... - É possível colorir o grafo de conflitos com três
cores?
Sim!
- É impossível colorir o grafo de conflitos com
menos de três cores! (por que?)
35Motivação
- Como montar um escalonamento com o menor número
possível de dias? - Recordando um subconjunto independente de um
grafo é um subconjunto de nós sem nenhuma aresta
entre eles. - Logo, um conjunto de disciplinas que forma um
subconjunto independente dos nós do grafo de
conflitos pode ter suas provas marcadas para o
mesmo dia. - Os nós deste subconjunto independente podem
receber a mesma cor.
36Motivação
- Quanto mais disciplinas forem marcadas para o
primeiro dia, menos disciplinas sobram para os
dias seguintes e, portanto, serão necessários
menos dias para realizar as provas das
disciplinas restantes. - Então, marcar para o primeiro dia as provas das
disciplinas correspondentes a um subconjunto
independente máximo. - Retirar os nós correspondentes a estas
disciplinas do grafo de conflitos. - Continuar procedendo da mesma maneira, até as
provas de todas as disciplinas terem sido
marcadas.
37Motivação
- Subconjunto independente máximo no grafo de
conflito? - BDF
38Motivação
- Subconjunto independente máximo no grafo de
conflito? - BDF
D
A
E
B
C
F
- Eliminar os nós B, D e F do grafo de conflitos.
39Motivação
- Subconjunto independente máximo no grafo de
conflito? - BDF
A
E
C
- Eliminar os nós B, D e F do grafo de conflitos.
40Motivação
- Subconjunto independente máximo no grafo de
conflito? - CE
41Motivação
- Subconjunto independente máximo no grafo de
conflito? - CE
A
E
C
- Eliminar os nós C e E do grafo de conflitos.
42Motivação
- Subconjunto independente máximo no grafo de
conflito? - CE
A
- Eliminar os nós C e E do grafo de conflitos.
43Motivação
- Subconjunto independente máximo no grafo de
conflito? - A
A
44Motivação
- Subconjunto independente máximo no grafo de
conflito? - A
A
- Eliminar o nó A do grafo de conflitos.
- Solução completa (todos nós coloridos).
45Motivação
- A solução encontrada usa o número mínimo de cores
para colorir o grafo, logo o número de dias para
aplicar todas as provas é mínimo
- Foi proposto um algoritmo para colorir um grafo
com o menor número de cores.
46Motivação
- O passo básico deste algoritmo corresponde a
determinar um subconjunto independente máximo. - Entretanto, este subproblema a ser resolvido a
cada iteração (já é um problema NP-completo por
si só, ou seja, cada subproblema) é
computacionalmente difícil. - Além deste procedimento ser computacionalmente
difícil, é possível garantir que este algoritmo
sempre encontra a solução ótima com o número
mínimo de cores? - Ou demonstrar que sim, ou dar um contra-exemplo.
47Motivação
- Considerando-se o grafo abaixo, qual solução
seria encontrada pelo algoritmo?
B
A
Os oito nós externos formam um subconjunto
independente de cardinalidade máxima e podem
todos ser coloridos com a mesma cor.
E
F
E
D
D
C
G
I
I
H
H
J
K
L
48Motivação
- Considerando-se o grafo abaixo, qual solução
seria encontrada pelo algoritmo?
Os oito nós externos formam um subconjunto
independente de cardinalidade máxima e podem
todos ser coloridos com a mesma cor.
49Motivação
- Considerando-se o grafo abaixo, qual solução
seria encontrada pelo algoritmo?
Esta solução é ótima, ou é possível colorir este
grafo com menos cores?
Sim o grafo pode ser colorido com apenas duas
cores.
50Motivação
- Considerando-se o grafo abaixo, qual solução
seria encontrada pelo algoritmo?
Esta solução é ótima, ou é possível colorir este
grafo com menos cores?
Sim o grafo pode ser colorido com apenas duas
cores
51Motivação
- O algoritmo proposto nem sempre encontra a
solução ótima (isto é, uma solução com o número
mínimo de cores). - Este algoritmo é então um algoritmo aproximado ou
uma heurística para o problema de coloração de
grafos. - Algoritmos exatos vs. algoritmos aproximados
- qualidade da solução
- tempo de processamento
52Algoritmo
- Seqüência precisa, não-ambígua de passos
elementares que levam à solução de um problema.
- Definição informal, imprecisa!
- Definição formal máquina de Turing
- Especificação português
- português estruturado
- pseudo linguagem
- linguagem de programação
53Algoritmo
Passo 0 k ? 1 Passo 1 alocar o maior número
possível de provas no dia k sem conflito Passo
2 eliminar estas provas do grafo (nós, arestas)
Passo 3 fazer k ? k1 e voltar ao passo 1
- Subproblema resolvido a cada iteração alocar o
maior número possível de provas sem conflito - Conjunto independente de cardinalidade máxima
54Análise de algoritmos
Objetivos e questões básicas
- Como avaliar a eficiência de um algoritmo?
- Dados dois algoritmos para a resolução de um
mesmo problema, qual é o mais eficiente? - Quando um problema pode ser considerado como bem
resolvido?
55Problema do caixeiro viajante
- n cidades, distâncias cij
- Obter a rota de menor comprimento que parte de
uma cidade, visita uma vez cada cidade e retorna
à cidade inicial. - Cada solução é uma permutação circular das n
cidades.
56Como escolher um algoritmo?
- Algoritmo mais fácil de entender, implementar,
documentar - Algoritmo mais rápido ou eficiente
- Eficiência é uma medida objetiva
- Memória
- I/O
- Comunicação
- Acesso a memória secundária
- Tempo ? problemas grandes (crescimento
assintótico)
57Como escolher um algoritmo?
- É impossível processar um algoritmo/programa para
todas as entradas (dados) possíveis. - Desenvolver medidas do tempo de processamento que
resumam seu comportamento para todas as entradas
possíveis. - Considerar a eficiência de um algoritmo como
sendo a quantidade de tempo que usa, medida como
função do tamanho da entrada.
58Enfoques
- Benchmark considerar uma pequena coleção de
entradas típicas e considerá-la como
representativa dos possíveis dados de entrada. - Métodos analíticos agrupar as entradas
possíveis de acordo com seu tamanho - Ordenação n
- Matriz m,n
- Grafo m,n
59Enfoques
- Usar uma função T(n) para representar o número de
unidades de tempo utilizadas pelo
algoritmo/programa quando aplicado a um problema
cujo tamanho da entrada é n - T(n) cn
- T(n) d en fn2
- T(n) número de instruções
- número de operações elementares
- tempo de CPU
- O tempo de processamento depende dos dados da
própria entrada, não apenas do seu tamanho!
60Enfoques
- T(n) tempo MÉDIO, MÍNIMO, MÁXIMO de
processamento calculado sobre todas as entradas
de tamanho n - Médio mais difícil, mais realista
- Mínimo pouca informação
- Máximo conservador
ordenação 1 2 3 4 5 6
n6 6 5 4 3 2 1
61Exemplo Ordenação por seleção
A1 A2 An para i 1 até n-1
faça início smaller ? i
para ji1 até n faça se Aj lt
Asmaller então smaller ? j temp ?
Asmaller Asmaller ? Ai Ai ?
temp fim
62Análise
- Contar como operações as linhas de código,
executando-se atribuições, comparações,
63Comparação de dois algoritmos
milisegundos
- Para n ? 50, a vantagem do algoritmo A sobre o
algoritmo B cresce com n. - A função T(n) determina o maior problema que pode
ser resolvido com este algoritmo (em determinado
tempo de computação)
64Comparação de dois algoritmos
- Quando a velocidade dos computadores aumenta,
maiores aumentos no tamanho dos maiores problemas
que podem ser resolvidos são observados para
programas cujo tempo de processamento cresce mais
lentamente.
Segundos Maior problema que pode ser resolvido Maior problema que pode ser resolvido
Segundos Alg. A Alg. B
1 10 22
10 100 70
100 1000 223
1000 10000 707
Procurar algoritmos com menores taxas de
crescimento!
65Comparação de dois algoritmos
- O tempo de processamento de um dado algoritmo
para uma entrada particular ainda depende - do computador
- do compilador
- Mesmo conhecendo-se algoritmo/programa/máquina/
compilador, ainda é difícil prever o tempo de
processamento de um programa
66Notação O
Descrever o tempo de processamento de um programa
usando a notação O, que esconde fatores tais
como
- Número de instruções de máquina geradas por um
computador - Número de instruções de máquina executadas (por
segundo) por um determinado computador - T(n) 100n ? T(n) O(n)
- Alguma constante vezes n
- Também esconde o fato de que instruções
diferentes executam em tempos diferentes.
67Notação O
- T(n) O(f(n)) se existe um inteiro n0 e uma
constante c gt 0 tal que T(n) c.f(n) para
qualquer n n0
68Notação O
- Constantes e termos de menor grau não importam
69Notação O
70Notação O
- No caso geral, obter T(n) de forma exata pode ser
muito difícil. Esta tarefa pode ser muito
simplificada se, em vez de obter-se T(n),
procura-se uma expressão O(f(n)) como limitante
superior de T(n). - Ordenação por seleção T(n) O(n2)
71Notação O
- Limite mais justo
- menor grau
- constante 1
- T(n) O(n2)
72Notação O
- Constante
- Logarítmico
- Linear
- nlogn
- Quadrático
- Cúbico
- Exponencial
- Fatorial
?
73Notação O
- Expressões na notação O podem freqüentemente ser
adicionadas
Aplicação programas que podem ser decompostos em
duas partes
74Exemplo 1
- Expressões na notação O podem freqüentemente ser
adicionadas
ler n para i 1 até n faça para j 1 até n
faça Ai,j ? 0 para i1 até n faça Ai,i ?
1
75Exemplo 2 - Fatorial
Ler n i ? 2 fact ? 1 enquanto i n
faça inicio fact ? fact i i ?
i1 fim Escreva fact
76Análise do tempo de processamento
Tempo de processamento Complexidade
- Comandos simples O(1)
- Atribuição, E/S, go to
- Bloco de comandos simples consecutivos O(1)
- Bloco for
- Limites do for dão um limite superior para o
número de vezes que o bloco é executado - Caso mais simples multiplicar a complexidade do
bloco pelo limite superior do número de vezes que
é executado
77Análise do tempo de processamento
para j 1 até n faça ? n
vezes Ai,j ? 0 ? O(1) O(n) para i 1 até
n faça ? n vezes para j 1 até
n faça ? n vezes Ai,j ? 0 ?
O(1) T(n) nT(n) n(n.O(1)) O(n2) Selection
sort smaller i ?
O(1) para j i1 até n faça
? n vezes se Aj lt A smaller então
smaller ? j ? O(1)
78Análise do tempo de processamento
- i ? n-1 T(n)O(1)
- i lt n-1 T(n)O(1) (n-i) O(1) O(n-i)
- T(n)O (max 1, n-i )
- Complexidade do algoritmo completo
79Análise do tempo de processamento
se ltcondiçãogt então ? O(1) ltparte_do_entãogt
? O(f(n)) senão ltparte_do_senãogt ?
O(g(n)) O (max(f(n), g(n)) se Ai,i0 então
? f(n) n2 para i
1 a n faça para j 1 a n faça
Ai,j ? 0 senão
? g(n) n para i 1 a n
faça Ai,i ? 0 O(n2)
80Análise do tempo de processamento
- Verificar se um elemento x pertence a um vetor
A. (busca seqüencial) com n elementos
An1 ? x i ? 1 enquanto x ? Ai faça i ?
i1 se i n1 então elemento não existe se não
elemento existe O(1) O(n)O(1) O(1) O(n)
- Programas com chamadas de funções ou procedimentos
81Análise do tempo de processamento
- Procurar algoritmos de menor complexidade
- Na prática, as constantes e termos de menor grau
omitidos podem fazer uma diferença significativa - Procurar otimizar o código nos pontos críticos
82Cálculo de polinômios
P ? A0 para i 1 até n faça P ? P Ai
(x??i) T1(n) n O(n) O(n2)
P ? A0 y ? y x para i ? 1 até n faça P ? P
Ai y y ? y x T2(n) n O(1)O(1)
O(n)
83Método de Horner
P ? An para i ? n-1 até 0 faça P ? Ai x
P T3(n) n O(1) O(n)
Qual dos três algoritmos é melhor?
84Ordenação pelo método da bolha
início chave ? 1 enquanto chave1
faça início chave ? 0 para i
1 até n-1 faça início se
Ai1 lt Ai então início
temp ? Ai Ai ?
Ai1 Ai1 ? temp
chave ? 1 fim
fim fim fim
85Ordenação pelo método da bolha
- Em cada iteração, pelo menos um elemento é
colocado na posição final correta. - No máximo, n-1 iterações
T(n) (n-1) (n-1) O(1) T(n) O(n2)
86Calcular média e elemento mais próximo
A1 ... An soma ? 0 para i1 até n faça
soma ? soma Ai fim-para
media ? soma / n maisperto ? 1 i ?
2 enquanto i ? n faça se (Aimedia)2 lt
(A(maisperto)-media)2 entao maisperto ? i i
? i 1 fim-enquanto
T(n) O(1) n O(1) O(1) (n-1) O(1) T(n)
O(n)
87Verificar se um inteiro é primo
prime ? true i ? 2
enquanto i2 ? n faça se (n mod i)
0 então início prime ? false
goto 99 fim senao
i ? i 1 fim-enquanto 99 imprimir
resultado
88Pesquisa binária
x ? A1 ...An ? (ordenado) min ?
1 max ? n med ? ?(min
max)/2? enquanto max gt min e Amed ?
x faça início se x gt Amed então
min ? med 1 se x lt Amed então max ?
med 1 med ? ?(min max)/2?
fim se Amed x então ... senão
...
T(n) O(1) log n O(1) T(n) O(log n)
Pesquisa seqüencial O(n)
Pesquisa binária O(log n)
89Exemplo
x 17
A1 A2 A3 A4 A5 A6 A7 A8
A9 A10 2 4 5 8 10
11 13 15 17 20
90Exemplo
x 16
A1 A2 A3 A4 A5 A6 A7 A8
A9 A10 2 4 5 8 10
11 13 15 17 20
91Algoritmos de menor complexidade
- Heapsort
- Mergesort
- É possível provar que este limitante é o melhor
possível, isto é, estes algoritmos são ótimos! - Problema dados um vetor A1 ... An e um valor
x, verificar se x é um elemento do vetor. - Qual é o melhor algoritmo?
O(n log n)
Depende!!! Dados ordenados ou não?
92Algoritmos de menor complexidade
- Dados ordenados
- - Pesquisa binária O(log n)
- Dados não-ordenados
- - Pesquisa seqüencial O(n)
- - Ordenar pesquisa binária O(n log n)
O(log n) O(n log n)
Pesquisa seqüencial é melhor!
93Algoritmos de menor complexidade
- Variante
- Há m elementos a serem testados
- Dados não-ordenados Pesquisa seqüencial O(m.n)
- Ordenar pesquisa binária
- O(n log n) O(m log n) O((n m) log n)
- Hipótese m ? n
Agora, a segunda alternativa é a mais
eficiente! O(n log n) vs. O(n2)
94Heap
- Tipo de dado
- Fila de prioridade
- Implementação
- Heap
- Conjunto de elementos, cada um com uma prioridade
- Operações Inserir
- Obter e eliminar o elemento com maior
prioridade - Exemplo de aplicação heapsort
95Árvore parcialmente ordenada
- Árvore binária valorada onde os rótulos
satisfazem as seguintes propriedades - Rótulos dos nós são elementos com uma prioridade
(valor de um elemento). - O elemento armazenado em um nó tem prioridade
maior ou igual à dos filhos deste nó. -
96Árvore parcialmente ordenada
- APOs são uma boa implementação de filas de
prioridade. - DeleteMax
- Substituir a raiz pelo nó mais à direita no nível
mais baixo - Reorganizar a árvore fazendo o elemento da raiz
descer até a posição apropriada. - Inserir
- Criar folha mais à esquerda possível no nível
mais baixo e subir até encontrar a posição
apropriada. -
97Árvore parcialmente ordenada balanceada
- As folhas estão no máximo em dois níveis
diferentes . - As folhas no nível mais baixo estão o mais à
esquerda possível. - n nós ? caminho da raiz tem comprimento menor ou
igual a log2 n
Heap implementação de uma APO balanceada
98Heap
- Vetor A com interpretação especial para índice
dos elementos - Elementos de APOB aparecem nível a nível em A,
começando da raiz, e dentro de um mesmo nível da
esquerda para a direita - O filho à esquerda do nó armazenado em Ai será
armazenado em A2i e seu filho à direita em
A2i1 -
18
18
7
9
16
1
9
5
7
3
1
2
5
4
3
6
7
10
9
8
99Heap
4
100Heap
type IntArray array 1...max of integer
procedure swap (var A intarrayi, j
integer) var temp integer início
temp ? Ai Ai ? Aj
Aj ? temp fim
101Heap
procedure bubbleUp (var A intarrayi
integer) início se i gt 1 AND Ai gt Ai/2
então início swap (A,i,i/2) bubbleUp
(A,i/2) fim fim
procedure insert (var A intarray x,n
integer) início n ? n 1 An ?
x bubbleUp (A,n) fim
T(n) O(log n)
102Heap
procedure bubbleDown (var A intarrayi,n
integer) var filho integer início filho ?
2i se filho lt n então se Afilho1 gt
Afilho então filho ? filho 1 se filho ? n
então se Ai lt Afilho então
início swap (A,i,filho)
bubbleDown (A,filho,n) fim fim
103Heap
procedure deletemax (var A intarray Var n
integer) início swap (A, 1, n) n ? n 1
bubbleDown (A, 1, n) fim
T(n) O(log n)
104Heapsort
- Ordenar um vetor A1..n em duas fases
- Dar ao vetor a propriedade de ser uma APO
balanceada (heap). - Repetidamente, selecionar o maior item do heap
até que o vetor fique ordenado
(n-i) maiores elementos já ordenados
para i 1 até n faça insert(ai) para i
1 até n faça deletemax
T(n) O(n log n)
105Heapsort
- Construção do vetor (primeira parte, usando
insert)
106Heapsort
- Construção do vetor (primeira parte, usando
insert)
4
107Heapsort
- Construção do vetor (primeira parte, usando
insert)
4
108Heapsort
- Construção do vetor (primeira parte, usando
insert)
4
109Heapsort
- Construção do vetor (primeira parte, usando
insert)
Atenção!!!
110Heapsort
- Construção do vetor (primeira parte, usando
insert)
4
111Heapsort
- Construção do vetor (primeira parte, usando
insert)
4
112Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
113Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
114Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
115Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
116Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
117Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
118Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
119Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
120Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
121Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
122Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
123Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
124Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
125Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
126Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
127Heapsort
- Construção do vetor (primeira parte, usando
insert)
16
128Heapsort
- Ordenação do vetor (segunda parte, usando
deleteMax)
9
8
16
14
7
4
3
1
10
2
Árvore após extrair a raiz
Árvore antes de extrair a raiz
129Heapsort
Implementação melhor em vez de montar um heap
elemento a elemento, ler o vetor e transformá-lo
após a leitura.
procedure heapsort (var A intarray n
integer) var i integer início heapify
(A, n) i ? n enquanto i gt 1
faça deletemax (A,i) fim
heapify considera o vetor A após a leitura e o
transforma em um heap, começando do nível mais
baixo e subindo nível a nível.
130Heapsort
Nada a fazer no nível mais baixo, começar um
nível acima apenas os n/2 primeiros elementos
podem ser afetados, pois são os que têm filhos.
procedure heapify (var A intarray n
integer) var i integer início para i
n/2 downto 1 faça bubbleDown (A,i,n) fim
n/2 chamadas a BubbleDown O(n log n) ou menos?
131Heapsort
? n/2 ?
? n/4 ? 1
n
? n/2 ? 1
- 2a metade 0 chamada
- 2º quarto 1 chamada
- 2º oitavo 2 chamadas
132Heapsort
n/8 n/4 n/2
n
... ? 2 ? 1
0
zona 2
zona 1
zona 0
- Zona i
-
-
- No máximo i chamadas a bubbleDown para cada
elemento na zona i - Número de elementos na zona i
133Heapsort
- Zona de maior índice log2n
- Altura log2n
- A1 é o único elemento na zona log2n de maior
índice
134Heapsort
135Algoritmos polinomiais
- Diz-se que um algoritmo é polinomial quando sua
complexidade de pior caso (T(n)) é limitada por
um polinômio em função do tamanho da entrada (n). - Considera-se um determinado tipo de problema como
bem resolvido em termos algorítmicos quando se
dispõe de um bom algoritmo para sua solução. - Diz-se que um bom algoritmo é aquele cuja
complexidade é polinomial
136Algoritmos polinomiais
- A taxa de crescimento de qualquer algoritmo
polinomial é menor do que a taxa de crescimento
dos algoritmos não polinomiais. - P(n) polinômio em n
137Algoritmos polinomiais
- Para n suficientemente grande, um algoritmo
polinomial é sempre mais rápido do que um
algoritmo não-polinomial. - T1(n) na T2(n) an
138Algoritmos polinomiais
139Algoritmos polinomiais
- Propriedade de fechamento
-
- P polinômios
- ? é uma constante
- P1, P2 ? P
- ? ? P1 ? P
- ? P1 P2 ? P
- ? P1 P2 ? P
140Algoritmos polinomiais
- Melhor utilização de avanços tecnológicos
- n1 maior tamanho de problema que pode ser
resolvido em um computador disponível hoje,
usando um algoritmo de complexidade T(n), em
determinado tempo de processamento pré-fixado. - n10 mesma definição, em um computador 10 vezes
mais rápido.
141Algoritmos polinomiais
(n10)3 10 (n1 )3 n10 n1
T(n10) 10 T(n1)
n 1012
1013 n log n 0.948 x 1011 0.87
x 1012 n3 104
2.15 x 104 2n 40
43 nlog n 79
95 n! 14
15
142Algoritmos polinomiais
- Problemas que podem ser resolvidos por algoritmos
polinomiais ? classe ? - Há muitos problemas para os quais não se conhece
algoritmos polinomiais -
Não existem?
Ainda não foram encontrados?
143Teoria da complexidade
- Problemas NP-completos
- O que fazer quando não se conhece um algoritmo
polinomial para um problema?
Desenvolver um algoritmo não-polinomial. Procurar
algoritmos aproximados de complexidade
polinomial.
decisão Problemas
avaliação otimização
sim não
144Teoria da complexidade
NP-difíceis /NP-árduos
P-SPACE
NP-Completos
NP
P
P ? NP ? ? ?
fáceis (algoritmos polinomiais)
145Algoritmos pseudopolinomiais
Exemplo ordenação pelo método das caixas
A1 ... An números inteiros ? a,b FASE
1 Colocar cada elemento Ai na caixa apropriada
(ou seja, a caixa rotulada com i) FASE 2
Percorrer as caixas na ordem por ordem crescente
de rótulo, retirando os elementos
146Algoritmos pseudopolinomiais
para j a até b faça n(j) ? 0 para i 1
até n faça nai ? nai 1 k ?
0 para j a até b faça início enquanto
nj ? 0 faça início nj
nj 1 k ? k 1
ak ? j fim fim
147Algoritmos pseudopolinomiais
T(n) (b a 1) O (1) n O
(1) O (1) (b a 1)
O (n) O (1) O(n (b a))
Não, cuidado!!!
T(n) O(b a n)
Não é um algoritmo polinomial, pois T(n) não é um
polinômio apenas no tamanho da entrada.
148Algoritmos pseudopolinomiais
Exemplo problema da mochila
-
- Selecionar dentre n objetos aqueles que serão
levados em uma mochila de capacidade (peso
máximo) limitada. - j 1, ..., n objetos
- cj ? lucro
- aj ? peso
- b ? peso máximo
-
-
-
- Hipótese aj ? b ?j
149Problema da mochila
- Decomposição do problema em estágios.
- Em vez de considerar uma solução (x1,x2,...,xn)
completa de uma só vez, visualizar o problema
como se as decisões fossem tomadas para um item
de cada vez. - Após k decisões, terão sido determinados quais
dos primeiros k itens devem ser selecionados e,
conseqüentemente, terão sido determinados os
valores das variáveis x1,x2,...,xk. - Neste ponto, o valor acumulado é
- O volume acumulado é
150Problema da mochila
- Estágio
- cada variável do problema
- Estado
- volume total ocupado com as decisões já tomadas
- Decisão
- selecionar ou não um item (isto é, fazer xk1)
- Custo da decisão de selecionar o item k
- aumento de ck unidades no lucro parcial
acumulado - Efeito da decisão de selecionar o item k
- aumento do volume ocupado (estado) em ak unidades
151Problema da mochila
- Definição yk(u) lucro máximo que pode ser
obtido com volume total igual a u e usando apenas
itens do conjunto 1,...,k - Quanto vale y0(0)?
- y0(0) 0 (sem objetos selecionados, o peso e o
lucro são nulos) - Definir yk(u) -? se é impossível obter um
volume total igual a u apenas com itens dentre os
do conjunto 1,...,k. - Quanto valem y0(u) e yk(0)?
- y0(u) -? para u gt 0 (impossível acumular peso
sem itens) - yk(0) 0 para k 1,2,...,n (nenhum item
selecionado) - Calcular yk(u) para k 1,...,n e u 0,...b, a
partir de y0(0).
152Problema da mochila
- yk(u) lucro máximo que pode ser obtido com
volume total igual a u e usando apenas itens do
conjunto 1,...,k - Calcular yk(u) para k 1,...,n e u 0,...b
- Interpretação há duas alternativas para se obter
yk(u), dependendo do item k ser selecionado ou
não - yk(u) yk-1(u), se o item k não é usado
- yk(u) yk-1(u-ak)ck, se o item k é usado
153Problema da mochila
- Observar que o lucro associado ao estado
resultante de uma decisão depende apenas do valor
desta decisão e do estado atual, mas não depende
da forma como este último foi atingido.
154Problema da mochila
y5(4)
155Problema da mochila
Valor ótimo maxb0,...,4 y5(b)
156Problema da mochila
y0(4) y5(4)
y0(3) y5(3)
y0(2) y5(2)
y0(1) y5(1)
y0(0) y1(0) y2(0) y3(0) y4(0) y5(0)
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
157Problema da mochila
y0(4)
y0(3)
y0(2)
y0(1)
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
158Problema da mochila
-?
-?
-?
-?
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
159Problema da mochila
-? ?
-? ?
-? ?
-? ?
0 ?
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
160Problema da mochila
-?
-?
-? -?
-? -?
0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
161Problema da mochila
-?
-? 3
-? -?
-? -?
0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
162Problema da mochila
-? -?
-? 3
-? -?
-? -?
0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
163Problema da mochila
-? -?
-? 3
-? -?
-? -?
0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
164Problema da mochila
-? -? ?
-? 3 ?
-? -? ?
-? -? ?
0 0 ?
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
165Problema da mochila
-? -?
-? 3
-? -?
-? -?
0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
166Problema da mochila
-? -?
-? 3
-? -? -?
-? -? -?
0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
167Problema da mochila
-? -?
-? 3
-? -? -?
-? -? -?
0 0 0
u 4
u 3
u 2
u 1
u 0
2
k 0 k 1 k 2 k 3 k 4 k 5
168Problema da mochila
-? -?
-? 3
-? -? -?
-? -? -?
0 0 0
u 4
u 3
u 2
u 1
u 0
0
2
k 0 k 1 k 2 k 3 k 4 k 5
169Problema da mochila
-? -?
-? 3 3
-? -? -?
-? -? -?
0 0 0
u 4
u 3
u 2
u 1
u 0
0
2
k 0 k 1 k 2 k 3 k 4 k 5
170Problema da mochila
-? -? -?
-? 3 3
-? -? -?
-? -? -?
0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
171Problema da mochila
-? -? -?
-? 3 3
-? -? -?
-? -? -?
0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
172Problema da mochila
-? -? -? ?
-? 3 3 ?
-? -? -? ?
-? -? -? ?
0 0 0 ?
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
173Problema da mochila
-? -? -?
-? 3 3
-? -? -?
-? -? -?
0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
174Problema da mochila
-? -? -?
-? 3 3
-? -? -?
-? -? -? 2
0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
175Problema da mochila
-? -? -?
-? 3 3
-? -? -? -?
-? -? -? 2
0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
176Problema da mochila
-? -? -?
-? 3 3
-? -? -? -?
-? -? -? 2
0 0 0 0
u 4
u 3
u 2
u 1
u 0
2
k 0 k 1 k 2 k 3 k 4 k 5
177Problema da mochila
-? -? -?
-? 3 3
-? -? -? -?
-? -? -? 2
0 0 0 0
u 4
u 3
u 2
u 1
u 0
0
2
k 0 k 1 k 2 k 3 k 4 k 5
178Problema da mochila
-? -? -?
-? 3 3 3
-? -? -? -?
-? -? -? 2
0 0 0 0
u 4
u 3
u 2
u 1
u 0
0
2
k 0 k 1 k 2 k 3 k 4 k 5
179Problema da mochila
-? -? -? 5
-? 3 3 3
-? -? -? -?
-? -? -? 2
0 0 0 0
u 4
u 3
u 2
u 1
u 0
2
k 0 k 1 k 2 k 3 k 4 k 5
180Problema da mochila
-? -? -? 5
-? 3 3 3
-? -? -? -?
-? -? -? 2
0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
181Problema da mochila
-? -? -? 5 ?
-? 3 3 3 ?
-? -? -? -? ?
-? -? -? 2 ?
0 0 0 0 ?
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
182Problema da mochila
-? -? -? 5
-? 3 3 3
-? -? -? -?
-? -? -? 2
0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
183Problema da mochila
-? -? -? 5
-? 3 3 3
-? -? -? -?
-? -? -? 2
0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
0
1
k 0 k 1 k 2 k 3 k 4 k 5
184Problema da mochila
-? -? -? 5
-? 3 3 3
-? -? -? -?
-? -? -? 2 2
0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
185Problema da mochila
-? -? -? 5
-? 3 3 3
-? -? -? -?
-? -? -? 2 2
0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
1
k 0 k 1 k 2 k 3 k 4 k 5
186Problema da mochila
-? -? -? 5
-? 3 3 3
-? -? -? -? 3
-? -? -? 2 2
0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
187Problema da mochila
-? -? -? 5
-? 3 3 3 3
-? -? -? -? 3
-? -? -? 2 2
0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
0
k 0 k 1 k 2 k 3 k 4 k 5
188Problema da mochila
-? -? -? 5
-? 3 3 3 3
-? -? -? -? 3
-? -? -? 2 2
0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
189Problema da mochila
-? -? -? 5
-? 3 3 3 3
-? -? -? -? 3
-? -? -? 2 2
0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
1
k 0 k 1 k 2 k 3 k 4 k 5
190Problema da mochila
0
-? -? -? 5
-? 3 3 3 3
-? -? -? -? 3
-? -? -? 2 2
0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
1
k 0 k 1 k 2 k 3 k 4 k 5
191Problema da mochila
0
-? -? -? 5 5
-? 3 3 3 3
-? -? -? -? 3
-? -? -? 2 2
0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
1
k 0 k 1 k 2 k 3 k 4 k 5
192Problema da mochila
-? -? -? 5 5
-? 3 3 3 3
-? -? -? -? 3
-? -? -? 2 2
0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
193Problema da mochila
-? -? -? 5 5 ?
-? 3 3 3 3 ?
-? -? -? -? 3 ?
-? -? -? 2 2 ?
0 0 0 0 0 ?
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
194Problema da mochila
-? -? -? 5 5
-? 3 3 3 3
-? -? -? -? 3
-? -? -? 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
195Problema da mochila
-? -? -? 5 5
-? 3 3 3 3
-? -? -? -? 3
-? -? -? 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
0
k 0 k 1 k 2 k 3 k 4 k 5
196Problema da mochila
-? -? -? 5 5
-? 3 3 3 3
-? -? -? -? 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
0
k 0 k 1 k 2 k 3 k 4 k 5
197Problema da mochila
-? -? -? 5 5
-? 3 3 3 3
-? -? -? -? 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
198Problema da mochila
-? -? -? 5 5
-? 3 3 3 3
-? -? -? -? 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
0
3
k 0 k 1 k 2 k 3 k 4 k 5
199Problema da mochila
-? -? -? 5 5
-? 3 3 3 3
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
0
3
k 0 k 1 k 2 k 3 k 4 k 5
200Problema da mochila
-? -? -? 5 5
-? 3 3 3 3
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
201Problema da mochila
-? -? -? 5 5
-? 3 3 3 3
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
0
3
k 0 k 1 k 2 k 3 k 4 k 5
202Problema da mochila
-? -? -? 5 5
-? 3 3 3 3 5
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
0
3
k 0 k 1 k 2 k 3 k 4 k 5
203Problema da mochila
-? -? -? 5 5
-? 3 3 3 3 5
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
204Problema da mochila
-? -? -? 5 5
-? 3 3 3 3 5
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
0
3
k 0 k 1 k 2 k 3 k 4 k 5
205Problema da mochila
-? -? -? 5 5 6
-? 3 3 3 3 5
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
0
3
k 0 k 1 k 2 k 3 k 4 k 5
206Problema da mochila
-? -? -? 5 5 6
-? 3 3 3 3 5
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
k 0 k 1 k 2 k 3 k 4 k 5
207Problema da mochila
-? -? -? 5 5 6
-? 3 3 3 3 5
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
y5(4) 6
y5(3) 5
y5(2) 3
y5(1) 2
y5(0) 0
k 0 k 1 k 2 k 3 k 4 k 5
208Problema da mochila
-? -? -? 5 5 6
-? 3 3 3 3 5
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
y5(4) 6
y5(3) 5
y5(2) 3
y5(1) 2
y5(0) 0
k 0 k 1 k 2 k 3 k 4 k 5
209Problema da mochila
-? -? -? 5 5 6
-? 3 3 3 3 5
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
y5(4) 6
y5(3) 5
y5(2) 3
y5(1) 2
y5(0) 0
k 0 k 1 k 2 k 3 k 4 k 5
210Problema da mochila
x51
-? -? -? 5 5 6
-? 3 3 3 3 5
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
y5(4) 6
y5(3) 5
y5(2) 3
y5(1) 2
y5(0) 0
k 0 k 1 k 2 k 3 k 4 k 5
211Problema da mochila
x51
x41
-? -? -? 5 5 6
-? 3 3 3 3 5
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
y5(4) 6
y5(3) 5
y5(2) 3
y5(1) 2
y5(0) 0
k 0 k 1 k 2 k 3 k 4 k 5
212Problema da mochila
x51
x41
x31
-? -? -? 5 5 6
-? 3 3 3 3 5
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
y5(4) 6
y5(3) 5
y5(2) 3
y5(1) 2
y5(0) 0
k 0 k 1 k 2 k 3 k 4 k 5
213Problema da mochila
x51
x41
x31
x20
-? -? -? 5 5 6
-? 3 3 3 3 5
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
y5(4) 6
y5(3) 5
y5(2) 3
y5(1) 2
y5(0) 0
k 0 k 1 k 2 k 3 k 4 k 5
214Problema da mochila
x51
x41
x31
x20
x10
-? -? -? 5 5 6
-? 3 3 3 3 5
-? -? -? -? 3 3
-? -? -? 2 2 2
0 0 0 0 0 0
u 4
u 3
u 2
u 1
u 0
y5(4) 6
y5(3) 5
y5(2) 3
y5(1) 2
y5(0) 0
k 0 k 1 k 2 k 3 k 4 k 5
215Problema da mochila
- Os estados em verde e as transições possíveis
(arcos com setas) definem um grafo multiestágio
para a aplicação da recursão de programação
dinâmica. - Número de operações (tempo de processamento)
diretamente proporcional ao produto do tamanho da
mochila pelo número de variáveis (preencher
inteiramente a matriz de dimensões (b1)x(n1))
aplicabilidade limitada aos valores de n e de b - Caso seja possível levar múltiplas cópias de cada
item, aumenta o número de decisões e a
complexidade do problema.
216Algoritmos pseudopolinomiais
- Calcular
- yj(u) lucro máximo que pode ser obtido
carregando-se um peso igual a u usando apenas
objetos do conjunto 1,..., j - Recursão
217Algoritmos pseudopolinomiais
y(0,0) ? 0 para k 1 até b faça y(k,0) ? -
? para j 1 até n faça início para k 0
até aj1 faça y(k,j) ? y(k,j-1) para k aj
até b faça y(k,j) ? max y(k,j-1),f(k-aj,j-1)
cj fim
218Algoritmos pseudopolinomiais
T(n) O (b) n O (b) T(n) O (n b)?
Tamanho da entrada Valor do maior dado na
entrada
Diz-se que um algoritmo é pseudopolinomial se sua
complexidade de pior caso é um polinômio
no tamanho da entrada e no valor do maior dado de
entrada
219Caixeiro viajante
- Grafo orientado com n nós
- Distâncias dij
- S ? 2, 3, ..., n
- k ? S
- C(S,k)
220Caixeiro viajante
- Início calcular C(S,k) para S 1, k 2, ...,
n -
- Cálculo de C(S,k) para S gt 1 a melhor maneira
de sair do nó 1, visitar todos os nós de S e
retornar a k é considerar visitar m imediatamente
antes de k, para cada m, considerando
C(S-k, m) calculado anteriormente -
221Caixeiro viajante
- Calcular para todos S de dado tamanho e para cada
possível nó m em S. - Complexidade
222Definições recursivas ou indutivas
- Definição recursiva uma classe de objetos
relacionados é definida em termos dos próprios
objetos. - Uma definição recursiva envolve uma base (em que
um ou mais objetos simples/elementares são
definidos) e um passo indutivo (em que objetos
maiores são definidos em termos dos objetos
menores já definidos).
223Definições recursivas ou indutivas
fat(n) 1 2 ... n Definição
recursiva Base 1! 1 Indução n!
n (n 1)!
nº uso do passo indutivo
2º uso do passo indutivo
1º uso do passo indutivo
Base
224Definições recursivas ou indutivas
- Expressões aritméticas são naturalmente definidas
de forma recursiva - Base ? especificar os operandos atômicos
(variáveis, etc.) - Base variáveis / inteiros/ reais
- Indução Se E1 e E2 são expressões, então
- (E1 E2), (E1 E2), (E1 E2),
(E1 / E2) e (-E1) - também são expressões aritméticas.
225Procedimentos recursivos
- Chamados de seu interior
- Programas recursivos são freqüentemente mais
sucintos ou mais fáceis de serem entendidos. - Base entrada particular que pode ser resolvida
pela base da indução - Parte Indutiva chamadas recursivas sucessivas ao
próprio procedimento
226Procedimentos recursivos
function fat (n integer) integer início se
n ? 1 então fat ? 1 senão fat ? n fat
(n-1) fim
227Procedimentos recursivos
Call ? fat(4)
return 24 ? fat(4)
Call ? fat(3)
return 6 ? fat(3)
Call ? fat(2)
return 2 ? fat(2)
? return 1
Call ? fat(1)
Base T(1) O(1) Indução T(n) O(1) T(n-1)
n gt 1
228Procedimentos recursivos
- É essencial que a indução faça apenas chamadas
envolvendo argumentos de menor tamanho e que a
base seja sempre necessariamente atingida. - Base Se i n, só existe um elemento a ser
ordenado. - Indução Se i lt n, obter min ai, ..., an,
trocá-lo com ai e ordenar recursivamente ai 1,
... an
- SelectionSort
- Obter menor elemento da cauda do vetor Ai...n
- 2) Trocá-lo por Ai
- 3) Ordenar o vetor Ai1... n
229Procedimentos recursivos
procedure SelectionSort (var A intarray i, n
integer) var j,smaller, temp integer início se
i lt n então início smaller ? i
para j ? i 1 até n faça se Aj lt
Asmaller então início
smaller ? j temp ? Asmaller
Asmaller ? Ai Ai ? temp
SelectionSort (A,i1,n)
fim fim fim
T(n) O(1) O(n) T(n-1) T(1) O(1)
230Procedimentos recursivos
- Análise de procedimentos recursivos
- Definir Tp(n) tempo de processamento de P em
função do tamanho n de seus argumentos. - Estabelecer uma relação de recorrência que
relacione Tp(n) com outras funções TQ(k) para
outros procedimentos Q com argumentos de tamanho
k. - Escolher uma noção de tamanho de argumento que
garanta que os procedimento