Académique Documents
Professionnel Documents
Culture Documents
Edson Prestes
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
Idias bsicas
Um algoritmo guloso seleciona, a cada passo, o melhor elemento pertencente a entrada. Verifica se ele vivel - vindo a fazer parte da soluo ou no. Aps uma seqncia de decises, a soluo do problema alcanada.
Na seqncia de decises, nenhum elemento examinado mais de uma vez: ou ele far parte da sada, ou ser descartado. No caso da intercalao, verifica sempre o par de listas de menor custo!
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
A estratgia gulosa possui a seguinte estrutura geral Inicializao ; Iterao ; Finalizao.
A Inicializao prepara a entrada (muitas vezes a entrada classificada) e
inicializa a sada.
A Iterao
seleciona um elemento conforme uma funo gulosa, marca-o para no consider-lo novamente no futuro, atualiza a entrada, examina o elemento selecionado quanto sua viabilidade e decide a sua participao ou no na soluo.
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
A estrutura algortmica do mtodo guloso dada pelo seguinte programa abstrato.
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
Intercalao tima de listas x Algoritmo Guloso
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
A rvore geradora (ou de espalhamento) mnima
Uma rvore geradora (ou de espalhamento) de um grafo G um subgrafo acclico que contm todos os vrtices do grafo. Usando as idias bsicas do mtodo guloso Inicialmente, as arestas so ordenadas em ordem crescente de seus custos; e cada vrtice considerado uma rvore distinta. Isto gera uma floresta de rvores. A cada passo, seleciona-se uma aresta de custo mnimo (ainda no examinada). Se a incluso desta aresta na configurao de rvores corrente criar um ciclo, ela descartada; caso contrrio, ela includa nesta configurao de tal forma que ligue duas rvores da floresta.
1.
2. 3.
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
Considere um grafo no orientado G = < V, E > com - V = { a, b, c, d, e, f }; - E={( a, b ),( a, e ), ( a, f ), ( b, c ), ( b, d ), ( b, f ), ( c, d ), ( d, e ), ( d, f ), ( e, f )};
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
A construo da rvore espalhada mnima para G como segue
Custo(b,c)=5 Custo(b,d)=6 Custo(a,e)=9 Custo(c,d)=10 Custo(b,f)=11 Custo(d,f)=14 Custo(a,b)=16 Custo(d,e)=18 Custo(a,f)=21 Custo(e,f)=33
C=({a},{b},{c},{d},{e},{f})
C=({a},{b,c},{d},{e},{f})
C=({a},{b,c,d},{e},{f})
C=({a,e},{b,c,d},{f})
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
Custo(b,c)=5 Custo(b,d)=6 Custo(a,e)=9 Custo(c,d)=10 Custo(b,f)=11 Custo(d,f)=14 Custo(a,b)=16 Custo(d,e)=18 Custo(a,f)=21 Custo(e,f)=33
C=({a,e},{b,c,d},{e},{f})
C=({a,e},{b,c,d,f})
C=({a,e},{b,c,d,f})
C=({a,b,c,d,e,f})
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
Inicializao
Iterao
Finalizao
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
Caminhos de custo mnimo em grafo orientado
Este problema consiste em determinar um caminho de custo mnimo a partir de um vrtice fonte a cada vrtice do grafo. Considere um grafo orientado G = < V, E > com 5 vrtices: V = {a, b, c, d, e} e 6 arestas com a seguinte matriz de custos:
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
O algoritmo constri incrementalmente um conjunto I de vrtices intermedirios e o usa para calcular os caminhos de custo mnimo a partir do vrtice fonte. A cada passo, seleciona-se um novo vrtice intermedirio cuja distncia em relao ao vrtice fonte seja mnima.
Este novo vrtice utilizado para atualizar o custo associado aos demais vrtices em relao ao vrtice fonte.
Quando I contiver todos os vrtices do grafo ento teremos calculados todos os caminhos com custo mnimo a partir do vrtice fonte.
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
Considere que o vrtice fonte o vrtice a Inicialmente, o conjunto I de vrtices intermedirios vazio e o vetor de distncias inicializado com a primeira linha da matriz de custos. A cada passo, seleciona-se um vrtice que tenha a menor distncia em relao a fonte. Em seguida, atualiza-se a distncia deste vrtice em relao aos demais.
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
Algoritmo: Custo mnimo de caminhos a partir de fonte em grafo orientado Inicializao
[v0,vi]
Iterao
Finalizao
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
Complexidade de intercalao tima de listas
O algoritmo efetua operaes sobre o multiconjunto L, portanto a complexidade do algoritmo pode variar conforme a estrutura de dados escolhida para representar L. O multiconjunto L uma lista encadeada, em que cada elemento guarda tanto uma lista quanto seu tamanho. Assumiremos que para determinar as duas menores listas, a L percorrida, com complexidade O(n); para remoo a complexidade O(n); para a incluso a complexidade constante.
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
Complexidade: Intercalao tima de Listas
Inicializao
Iterao
Finalizao
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
O Algoritmo recebe como entrada n listas (com seus comprimentos)
fornece como sada o par (intercalao das n listas em L, nmero mnimo de comparaes).
A operao fundamental a comparao entre elementos das listas e o tamanho da entrada o par formado pelo tamanho n do multiconjunto L e pelo comprimento m da maior lista em L.
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
O desempenho do algoritmo tem contribuies dadas por suas componentes: Inicializao, Iterao e Finalizao.
Inicializao
Como a inicializao e a finalizao no envolvem comparaes. Logo, desemp[ Inicializao] = 0 desemp[ Finalizaco] = 0.
Finalizao
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
A cada iterao As duas menores listas em L so substitudas por sua intercalao O tamanho de L diminui de 1.
Iterao
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
No nicio da i-sima iterao, | Li | = n - i +1. Portanto temos
Sendo m'i e m"i os tamanhos das duas listas selecionadas na i-sima iterao, temos
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
O desempenho da iterao
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
Tomando m como o mximo dos comprimentos das n listas em L, temos
Pq ?
Complexidade de Algoritmos
Projeto e Anlise de Algoritmos
O desempenho de Interc_Suc_Lst