Complexidade de Algoritmos - Inf

Propaganda
Complexidade de Algoritmos
Edson Prestes
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
u=1 u=2
u=2
u=1
i=2
i=1
j=2
j=3
j=4
i
j
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Considere
Calcule a sequência ótima de multiplicações e o preenchimento da matriz usada na
programação dinâmica. Lembre-se da linha 5.
Seqüência ótima M = ((M1 x M 2 )x M3 )x M 4
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Idéias básicas da programação dinâmica
Objetiva construir uma resposta ótima através da combinação das respostas obtidas para
partes menores do problema (subproblemas).
 Inicialmente, a entrada é decomposta em partes mínimas e resolvidas.
 A cada passo, os resultados parciais são combinados dando respostas para os
subproblemas cada vez maiores, até que se obtenha uma resposta para o problema original.
 A decomposição é feita uma única vez e, além disso, os casos menores são tratados
antes dos maiores.
Este método é chamado ascendente, ao contrário dos métodos recursivos, que são
chamados descendentes.
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Complexidade: Multiplicação de matrizes
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
O algoritmo Multi_Mat
 Recebe como entrada um vetor B : vetor [ 0..n ] de IN , com as dimensões das n
matrizes
 Fornece como saída um natural (m[1, n]) , correspondente ao número mínimo de
multiplicações para o produto.
 Usa como área auxiliar de armazenamento uma matriz m : M, sendo
M := matriz [ 1..n, 1..n ] de Naturais.
É Assumido que o tamanho da entrada é o número n de matrizes a serem
multiplicadas.
As operações aritméticas sobre os naturais são consideradas operações
fundamentais.
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
A inicialização
Inicializa a diagonal principal
A operação m[i , i] ← 0 é executada n vezes
Logo,
desemp[ Inicialização ] = n . 1 = n;
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
A iteração nas linhas de 2 a 7 executa n - 1 vezes as linhas de 3 a 6
Executa
n-1 vezes
Considere mu os elementos da matriz acima da diagonal principal que são atualizados a
cada iteração da linha 2.
No início da u-ésima iteração dim( mu ) = n - u.
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
u=1 u=2
i
j
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
A maior contribuição do corpo do laço é dada pela linha 5.
Quantos valores intermediários têm que ser verificados
para determinar o valor a ser armazenado em M[i,j] ?
(j – 1) - i + 1 = j - i = u
(de acordo com a linha 4)
A cada valor de k realizamos 4 operações aritméticas, logo
Desemp[Linha 5] (mu) = 4.u
Na u-ésima iteração temos,
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Logo, o desempenho das linhas de 3 a 6
na u-ésima iteração é igual a
Como u varia de 1 a n-1, o desempenho da iteração é igual a
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
A ordem da complexidade pessimista do algoritmo de Multicação de Matrizes é dada
pela soma das três contribuições : inicialização, iteração e finalização.
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
O problema de caminhos de custo mínimo em grafo orientado.
O problema consiste em determinar caminhos de custo mínimo entre cada par de
vértices de um grafo.
A programação dinâmica é aplicada sobre um conjunto I de vértices intermediários, o qual
é incrementado a cada passo.
A idéia é determinar os caminhos de custo mínimo com a restrição de usar como vértices
intermediários apenas os vértices do conjunto I.
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Considere um grafo orientado G e a sua matriz de custos:
Considere como vértice intermediário o vértice v1 e m um valor inteiro grande.
O caminho de v3 a v2 passando por v1 tem comprimento 7+3=10 < m.
O caminho de v2 a v3 passando por v1 tem comprimento m+6 >2.
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Considere como vértice intermediário o vértice v2.
O caminho de v1 a v3 passando por v2 com comprimento 3+2 = 5 < 6
O caminho de v3 a v1 passando por v2 tem comprimento 10+m>7
Considere como vértice intermediário o vértice v3.
O caminho de v2 a v1 passando por v3 com comprimento 2+7 = 9 < m
O caminho de v1 a v2 passando por v3 tem comprimento 5+10>3
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Inicialização
Iteração
Finalização
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
O algoritmo
 recebe como entrada um grafo orientado G com conjunto V de vértices e
matriz de custos
 fornece como saída uma matriz com os custos dos melhores caminhos entre
os vértices de G)
 O tamanho da entrada corresponde ao número n de vértices de G.
 As operações fundamentais são as manipulações com os vértices e as
matrizes.
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
A inicialização
Algoritmo
Logo,
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
A Iteração
Algoritmo
A quantidade de elementos do Conjunto I varia com
a iteração. Portanto no final da j-ésima iteração
temos | I j | = j
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Olhando as linhas 9 e 10.
Desemp[linha 9] = n-i+1
Desemp[linha 10] =1
Algoritmo
Na i-ésima iteração,
Desemp[linha 9-linha 10] = (n-i+1)+1
Note que o enquanto das linhas 8-16 é executado n vezes, ou seja , o i
varia de 1 até n
Olhando as linhas de 11 a 15.
Temos
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
A iteração é executada n vezes
Algoritmo
Combinando os desempenhos obtidos anteriormente, temos
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
Sabemos
Complexidade de Algoritmos
Projeto e Análise de Algoritmos
A complexidade pessimista da Programação Dinâmica é
A complexidade pessimista da iteração é dada por
Download