1 / 14

Algoritmos Gulosos em Grafos

Algoritmos Gulosos em Grafos. Katia S. Guimarães katiag@cin.ufpe.br. Algoritmo Distâncias com Pesos. Quando o grafo tem peso nas arestas, D(v, w) é a menor soma dos pesos das arestas num caminho de v a w . Note que, nessas circunstâncias, o algoritmo de busca em largura

ziazan
Télécharger la présentation

Algoritmos Gulosos em Grafos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritmos Gulosos em Grafos Katia S. Guimarães katiag@cin.ufpe.br

  2. Algoritmo Distâncias com Pesos Quando o grafo tem peso nas arestas, D(v, w) é a menor soma dos pesos das arestas num caminho de v a w. Note que, nessas circunstâncias, o algoritmo de busca em largura já não resolve. 1 3 5 4 6 4 5 6 2 8 2 3 6 2 7 katiag@cin.ufpe.br

  3. Algoritmo Distâncias com Pesos Abordagem Algoritmo Guloso (Indução) - Inicialmente, só é conhecida uma solução trivial, para 0 ou 1 elemento do conjunto (no caso,D(v, v)). Marcar v. - A cada iteração, um elemento não marcado w é escolhido, baseado numa solução mínima local. w é marcado e incluído no conjunto dos elementos para os quais a solução é conhecida. katiag@cin.ufpe.br

  4. Algoritmo Distâncias com Pesos Abordagem Algoritmo Guloso (Indução) - Para todo v V faça { Desmarcar v; D[v] =  } - D[s] = 0 /* Base da indução */ - Enquanto  vértice não marcado faça /* Passo */ Seja v ovértice não marcado com D[v] mínimo (mínima local) Marque v; Para todo w  Adj(v) faça Se D[v] + custo (v,w) < D[w] então D[w]  D[v] + custo (v,w) katiag@cin.ufpe.br

  5. Algoritmo Distâncias com Pesos Dijkstra - Java Applet katiag@cin.ufpe.br

  6. Algoritmo Distâncias com Pesos Abordagem Algoritmo Guloso (Indução) - Os vértices são marcados em ordem crescente de distância com relação ao vértices. - É construída uma árvore, chamada Árvore de Distâncias de s, onde aparecem apenas as arestas que constituem os menores caminhos de s a cada um dos vértices do grafo. katiag@cin.ufpe.br

  7. Distâncias com Pesos - Implementação Para selecionar o mínimo D, usar um heap. Ter o cuidado de não fazer remoção no heap quando um novo custo for associado a um vértice. Para representar a árvore de distâncias, guardar, para cada vértice v, apenas a última aresta do caminho mínimo de s a v. katiag@cin.ufpe.br

  8. Algoritmo Distâncias com Pesos Complexidade Inicialização - O(|V|) Loop - O((|V| + |E|) log|V|) Existem |V| remoções do heap (extrair o mínimo) Existem no máximo |E| atualizações (cada aresta só é analisada uma vez) Custo Total: O((|V| + |E|) log|V|) katiag@cin.ufpe.br

  9. Árvore Geradora de Peso Mínimo Abordagem Algoritmo Guloso (Indução) OBJETIVO: Construir uma árvore de forma a manter o grafo conexo (há um caminho entre quaisquer dois vértices) porém a um custo mínimo. - Inicialmente, tomamos um vértice v qualquer. Marcar v. - A cada iteração, um elemento não marcado w é escolhido, baseado numa solução mínima local (mínimo custo de agregar um vértice à árvore corrente). katiag@cin.ufpe.br

  10. Algoritmo AGPM Abordagem Algoritmo Guloso (Indução) - Para todo v V faça { Desmarcar v; D[v] =  } - D[s] = 0 /* Base da indução */ - Enquanto  vértice não marcado faça /* Passo */ Seja v ovértice não marcado com D[v] mínimo (mínima local) Marque v; Para todo w  Adj(v) faça Se custo (v,w) < D[w] então D[w]  custo (v,w) katiag@cin.ufpe.br

  11. Algoritmo AGPM Algoritmo Prim - JAVA Applet katiag@cin.ufpe.br

  12. Algoritmo PRIM - Complexidade Considerando uma implementação com Heap, temos: Construção do heap - O(|V|) Loop - O(|V| log|V| + |E|log|V|) = O(|E|log|V|) Custo Total: O(|E|log|V|) katiag@cin.ufpe.br

  13. Árvore Geradora de Peso MínimoAlgoritmo de Kruskal • AGPM-Kruskal(G,w) • 1. A =  • 2. Para cada vértice v  V(G) faça • 3. Make-Set(v) • 4. Ordene as arestas de E por peso (não-decresc = ND) • 5. Para cada aresta (u,v)E em ordem ND de peso faça • se Find-Set(u)  Find-Set(v) • então A = A  {(u,v)} • Union(u,v) • 9. retorne A katiag@cin.ufpe.br

  14. Algoritmo Kruskal - Complexidade Considerando uma implementação de conjunto disjunto com compressão de caminhos, por exemplo: Inicialização – O(|V|) Ordenação de arestas – O(|E|log|E|) Operações sobre o conjunto disjunto – O(|E|log|E|) Custo Total: O(|E|log|E|) katiag@cin.ufpe.br

More Related