24
Complexidade de Algoritmos Edson Prestes

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

Embed Size (px)

Citation preview

Page 1: 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

Complexidade de Algoritmos

Edson Prestes

Page 2: 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

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

Page 3: 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

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]

Page 4: 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

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

Page 5: 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

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,

Page 6: 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

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

}

Page 7: 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

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

Page 8: 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

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 é

Page 9: 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

Complexidade de AlgoritmosProjeto e Análise de Algoritmos

A iteração repete n vezes o corpo da iteração, logo o seu desempenho é

Page 10: 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

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 é

Page 11: 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

Complexidade de AlgoritmosProjeto e Análise de Algoritmos

A complexidade pessimista de um algoritmo guloso é

A complexidade pessimista da iteração é dada por

Page 12: 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

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.

Page 13: 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

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

Page 14: 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

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

Page 15: 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

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

Page 16: 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

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

Page 17: 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

Complexidade de AlgoritmosProjeto e Análise de Algoritmos

Multiplicação de Matrizes

Page 18: 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

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

Page 19: 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

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

Page 20: 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

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

Page 21: 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

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

Page 22: 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

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

Page 23: 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

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

Page 24: 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

Complexidade de AlgoritmosProjeto e Análise de Algoritmos

Este processo assemelha-se ao preenchimento de uma matriz

=3300

=1400