Projeto e An - PowerPoint PPT Presentation

About This Presentation
Title:

Projeto e An

Description:

Title: PowerPoint Presentation Author: cynthia Last modified by: Departamento de Informatica Created Date: 3/16/2004 2:27:57 PM Document presentation format – PowerPoint PPT presentation

Number of Views:94
Avg rating:3.0/5.0
Slides: 255
Provided by: cynt180
Category:

less

Transcript and Presenter's Notes

Title: Projeto e An


1
Projeto e Análise de Algoritmos
Celso Carneiro Ribeiro http//www.inf.puc-rio.br/
celso
2
Parte 2
Análise de Algoritmos
3
Aná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

4
Motivaçã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.

5
Motivação
  • Modelagem por conjuntos

6
Motivaçã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?

7
Motivação
  • Simplificação tratando-se apenas as interseções

Considerar apenas as interseções não-vazias.
8
Motivação
  • Simplificação com a utilização de um grafo de
    conflitos

disciplinas ? nós conflitos ? arestas
9
Motivação
  • Simplificação com a utilização de um grafo de
    conflitos

disciplinas ? nós conflitos ? arestas
10
Modelo 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ó)

11
Matriz 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
12
Matriz de adjacência
  • Memória utilizada n2

A B C D E F
A B C D E F
13
Listas 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.

14
Motivaçã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

15
Motivaçã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
16
Motivaçã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
17
Motivaçã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
18
Motivaçã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
19
Motivaçã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
20
Motivaçã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
21
Motivaçã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
22
Motivaçã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
23
Motivaçã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
24
Motivaçã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.

25
Motivaçã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.

26
Motivação
  • Marcar para o segundo dia qualquer combinação de
    disciplinas sem conflitos A, C, D, F, AF, CD, DF

D
A
C
F
27
Motivação
  • Marcar para o segundo dia qualquer combinação de
    disciplinas sem conflitos A, C, D, F, AF, CD, DF

D
A
C
F
28
Motivação
  • Marcar para o segundo dia qualquer combinação de
    disciplinas sem conflitos A, C, D, F, AF, CD, DF

D
A
C
F
29
Motivação
  • Marcar para o segundo dia qualquer combinação de
    disciplinas sem conflitos A, C, D, F, AF, CD, DF

D
A
C
F
30
Motivaçã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.

31
Motivaçã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.

32
Motivação
  • Marcar A ou C para o terceiro dia e a que sobrar
    para o quarto dia

A
C
33
Motivaçã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!

34
Motivaçã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?)

35
Motivaçã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.

36
Motivaçã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.

37
Motivação
  • Subconjunto independente máximo no grafo de
    conflito?
  • BDF

38
Motivaçã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.

39
Motivaçã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.

40
Motivação
  • Subconjunto independente máximo no grafo de
    conflito?
  • CE

41
Motivação
  • Subconjunto independente máximo no grafo de
    conflito?
  • CE

A
E
C
  • Eliminar os nós C e E do grafo de conflitos.

42
Motivação
  • Subconjunto independente máximo no grafo de
    conflito?
  • CE

A
  • Eliminar os nós C e E do grafo de conflitos.

43
Motivação
  • Subconjunto independente máximo no grafo de
    conflito?
  • A

A
44
Motivaçã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).

45
Motivaçã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.

46
Motivaçã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.

47
Motivaçã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
48
Motivaçã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.
49
Motivaçã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.
50
Motivaçã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
51
Motivaçã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

52
Algoritmo
  • 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

53
Algoritmo
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

54
Aná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?

55
Problema 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.

56
Como 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)

57
Como 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.

58
Enfoques
  • 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

59
Enfoques
  • 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!

60
Enfoques
  • 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
61
Exemplo 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
62
Análise
  • Contar como operações as linhas de código,
    executando-se atribuições, comparações,

63
Comparaçã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)

64
Comparaçã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!
65
Comparaçã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

66
Notaçã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.

67
Notaçã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

68
Notação O
  • Constantes e termos de menor grau não importam

69
Notação O
70
Notaçã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)

71
Notação O
  • Limite mais justo
  • menor grau
  • constante 1
  • T(n) O(n2)

72
Notação O
  • Constante
  • Logarítmico
  • Linear
  • nlogn
  • Quadrático
  • Cúbico
  • Exponencial
  • Fatorial

?
73
Notação O
  • Expressões na notação O podem freqüentemente ser
    adicionadas

Aplicação programas que podem ser decompostos em
duas partes
74
Exemplo 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
75
Exemplo 2 - Fatorial
Ler n i ? 2 fact ? 1 enquanto i n
faça inicio fact ? fact i i ?
i1 fim Escreva fact
76
Aná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

77
Aná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)
78
Aná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

79
Análise do tempo de processamento
  • Teste

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)
80
Aná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

81
Aná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

82
Cá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)
83
Mé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?
84
Ordenaçã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
85
Ordenaçã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)
86
Calcular 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)
87
Verificar 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
88
Pesquisa 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)
89
Exemplo
x 17
A1 A2 A3 A4 A5 A6 A7 A8
A9 A10 2 4 5 8 10
11 13 15 17 20
90
Exemplo
x 16
A1 A2 A3 A4 A5 A6 A7 A8
A9 A10 2 4 5 8 10
11 13 15 17 20
91
Algoritmos 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?
92
Algoritmos 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!
93
Algoritmos 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)
94
Heap
  • 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
98
Heap
  • 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
99
Heap
  • Construção da árvore

4
100
Heap
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
101
Heap
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)
102
Heap
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
103
Heap
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)
104
Heapsort
  • 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)
105
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

106
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

4
107
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

4
108
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

4
109
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

Atenção!!!
110
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

4
111
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

4
112
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
113
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
114
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
115
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
116
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
117
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
118
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
119
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
120
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
121
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
122
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
123
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
124
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
125
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
126
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
127
Heapsort
  • Construção do vetor (primeira parte, usando
    insert)

16
128
Heapsort
  • 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
129
Heapsort
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.
130
Heapsort
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?
131
Heapsort
? n/2 ?
? n/4 ? 1
n
? n/2 ? 1
  • 2a metade 0 chamada
  • 2º quarto 1 chamada
  • 2º oitavo 2 chamadas

132
Heapsort
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

133
Heapsort
  • Zona de maior índice log2n
  • Altura log2n
  • A1 é o único elemento na zona log2n de maior
    índice

134
Heapsort
135
Algoritmos 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

136
Algoritmos 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

137
Algoritmos 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

138
Algoritmos polinomiais
139
Algoritmos polinomiais
  • Propriedade de fechamento
  • P polinômios
  • ? é uma constante
  • P1, P2 ? P
  • ? ? P1 ? P
  • ? P1 P2 ? P
  • ? P1 P2 ? P

140
Algoritmos 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.

141
Algoritmos 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
142
Algoritmos 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?
143
Teoria 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
144
Teoria da complexidade
NP-difíceis /NP-árduos
P-SPACE
NP-Completos
NP
P
P ? NP ? ? ?
fáceis (algoritmos polinomiais)
145
Algoritmos 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
146
Algoritmos 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
147
Algoritmos 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.
148
Algoritmos 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

149
Problema 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 é

150
Problema 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

151
Problema 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).

152
Problema 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

153
Problema 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.

154
Problema da mochila
y5(4)
155
Problema da mochila
Valor ótimo maxb0,...,4 y5(b)
156
Problema 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
157
Problema 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
158
Problema 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
159
Problema 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
160
Problema 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
161
Problema 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
162
Problema 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
163
Problema 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
164
Problema 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
165
Problema 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
166
Problema 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
167
Problema 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
168
Problema 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
169
Problema 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
170
Problema 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
171
Problema 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
172
Problema 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
173
Problema 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
174
Problema 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
175
Problema 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
176
Problema 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
177
Problema 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
178
Problema 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
179
Problema 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
180
Problema 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
181
Problema 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
182
Problema 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
183
Problema 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
184
Problema 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
185
Problema 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
186
Problema 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
187
Problema 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
188
Problema 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
189
Problema 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
190
Problema 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
191
Problema 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
192
Problema 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
193
Problema 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
194
Problema 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
195
Problema 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
196
Problema 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
197
Problema 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
198
Problema 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
199
Problema 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
200
Problema 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
201
Problema 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
202
Problema 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
203
Problema 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
204
Problema 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
205
Problema 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
206
Problema 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
207
Problema 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
208
Problema 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
209
Problema 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
210
Problema 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
211
Problema 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
212
Problema 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
213
Problema 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
214
Problema 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
215
Problema 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.

216
Algoritmos 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

217
Algoritmos 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
218
Algoritmos 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
219
Caixeiro viajante
  • Grafo orientado com n nós
  • Distâncias dij
  • S ? 2, 3, ..., n
  • k ? S
  • C(S,k)

220
Caixeiro 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

221
Caixeiro viajante
  • Calcular para todos S de dado tamanho e para cada
    possível nó m em S.
  • Complexidade

222
Definiçõ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).

223
Definiçõ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
224
Definiçõ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.

225
Procedimentos 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

226
Procedimentos recursivos
function fat (n integer) integer início se
n ? 1 então fat ? 1 senão fat ? n fat
(n-1) fim
227
Procedimentos 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
228
Procedimentos 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

229
Procedimentos 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)
230
Procedimentos 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
Write a Comment
User Comments (0)
About PowerShow.com