complexidade de algoritmos - ufrgsprestes/courses/complexity/aula16.pdf · complexidade de...
TRANSCRIPT
Complexidade de Algoritmos
Edson Prestes
Complexidade de Algoritmos
Caminhos de custo mínimo em grafo orientado
Este problema consiste em determinar um caminho de custo mínimo a partir de um vértice fonte a cada vértice do grafo.
Considere um grafo orientado G = < V, E > com 5 vértices: V = {a, b, c, d, e} e6 arestas com a seguinte matriz de custos:
Projeto e Análise de Algoritmos
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
Inicialização
Iteração
Finalização
Algoritmo: Custo mínimo de caminhos a partir de fonte em grafo orientado
[v0,vi]
Complexidade de Algoritmos
O algoritmo
recebe como entrada Um grafo orientado valorado G com fonte v0 e uma matriz de custos
fornece como saída Um vetor dist (com os custos dos melhores caminhos a partir de v0).
Consideremos um grafo orientado G com conjunto V = { v0, v1, …, vn } de vértices.
As operações fundamentais do algoritmo são as manipulações com conjuntos (de vértices) e matrizes; e para o tamanho da entrada o número n de vértices não fonte.
Projeto e Análise de Algoritmos
Complexidade de Algoritmos
O desempenho do Algoritmo tem contribuições dadas por suas componentes:inicialização, iteração e finalização.
Projeto e Análise de Algoritmos
InicializaçãoA inicialização fornece valores iniciais às variáveis. Portanto, temos
Logo,
Complexidade de Algoritmos
A iteração executa n vezes a seleção, remoção e inclusão de um elemento na resposta parcial se viável.
Projeto e Análise de Algoritmos
Iteração
As variáveis p e dist variam da seguinte maneira
}
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
Iteração
No ínicio da i-ésima iteração, | pi | = n - i + 1
O desempenho da iteração é dado pela soma das contribuições das linhas de 4 a 5 e das linhas de 6 a 9.
Logo,
As cotas superiores para as linhas 4 e 5 são
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
Iteração
As cotas superiores para o desempenho das linhas 7 e 8 são
Logo, temos
O desempenho do corpo da iteração na i-ésima iteração é
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
A iteração repete n vezes o corpo da iteração, logo o seu desempenho é
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
O desempenho do algoritmo é dado predominantemente pelo desempenho da inicialização e da iteração. Assim, temos
A complexidade pessimista do algoritmo é
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
A complexidade pessimista de um algoritmo guloso é
A complexidade pessimista da iteração é dada por
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
Programação DinâmicaA programação dinâmica costuma ser aplicada a problemas de otimização resultando, em geral, em algoritmos mais eficientes que os mais diretos.
Esse método é útil quando não é fácil chegar a uma seqüência ótima de decisões sem testar todas as seqüências possíveis para então escolher a melhor.
A cada passo são eliminadas subsoluções que certamente não farão parte da solução ótima do problema.
Ele reduz drasticamente o número total de seqüências viáveis através de um mecanismo que evita aquelas seqüências que sabidamente não podem resultar em seqüências ótimas.
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
Em alguns casos, o algoritmo direto tem complexidade exponencial, enquanto que o algoritmo desenvolvido por programação dinâmica é polinomial.
Outras vezes, a complexidade continua exponencial, mas de ordem mais baixa.
A programação dinâmica pode ser aplicada em diversos problemas :
- multiplicação de várias matrizes;
- caminhos de custo mínimo em grafos orientados;
- projeto de sistemas confiáveis;
- casamento de strings;
- problema do caixeiro viajante;
- problema de linha de montagem;
- extração de eixo de rodovias em processamento de imagens aéreas, entre outros
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
Problema de Multiplicação de MatrizesConsiste em determinar a seqüência ótima de multiplicações de n matrizes
Sabemos que
Este cálculo exige p.q.r multiplicações.
Considere o seguinte exemplo
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
1a. Maneira
A quantidade de operações é dada por
= 218000 operações
2a. Maneira
A quantidade de operações é dada por
= 18150 operações
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
Para este caso, o algoritmo direto tem complexidade exponencial no número de matrizes
Usando a programação dinâmica encontramos um algoritmo de complexidade polinomial.
Multiplicação de Matrizes
Série de Fibonacci
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
Multiplicação de Matrizes
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
Como minimizar ou reduzir a redundância de trabalho ?
Devemos resolver os problemas menores e utilizá-los para resolver os maiores
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
Dado o problema
Considere o subproblema (ou subseqüência)
Com 1 ≤ i <j ≤ n e custo mínimo dado por imj. .
Considere imi =0 , para i=1,…, n
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
A matriz 2M3 é uma matriz 3 x 40, ou seja, b1 x b 3
Portanto, uma matriz iMj é uma matriz bi-1 x b j
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
O cálculo de iMj com custo mínimo imj pode ser decomposto em dois subproblemas. Considere i≤ k<j, logo
Onde
iMk tem custo mínimo imk e dimensões bi-1 x b k
(k+1)Mj tem custo mínimo (k+1) mj e dimensões bk x bj
O custo associado ao cálculo de iMk x (k+1)Mj , é dado por
( imk + (k+1)mj ) + ( bi-1 x b kx b j ).
O custo mínimo é dado por
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
Considere o produto das seguintes matrizes
Inicialmente temos, imi =0 , para i=1,2 e 3.
O produto de 2 matrizes pode ser feito das seguintes maneiras
1m2 =2 x 30 x 20 =1200 2m3 =30 x 20 x 5=3000
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
O produto de 3 matrizes pode ser feito das seguintes maneiras
Vimos que o custo mínimo é dado por
Temos 2 valores possíveis para k, k=1 e k=2.
Para k=1 temos
1m3 = 1m1+ 2m3 + 2 x 30 x 5 =300+3000 = 3300
Para k=2 temos
1m3 = 1m2 + 3m3 +2 x 20 x 5 =1200+200 =1400
Complexidade de AlgoritmosProjeto e Análise de Algoritmos
Este processo assemelha-se ao preenchimento de uma matriz
=3300
=1400