Complexidade de Algoritmos - UFRGSprestes/Courses/Complexity/aula16.pdf · Complexidade de Algoritmos Projeto e Análise de Algoritmos Em alguns casos, o algoritmo direto tem complexidade

Post on 09-Nov-2018

238 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

top related