A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Algoritmos em Grafos (Parte 2) Katia S. Guimarães

Apresentações semelhantes


Apresentação em tema: "Algoritmos em Grafos (Parte 2) Katia S. Guimarães"— Transcrição da apresentação:

1 Algoritmos em Grafos (Parte 2) Katia S. Guimarães

2 Busca em Profundidade Exemplo: A partir do grafo abaixo, obtemos a árvore: Aresta de Árvore Aresta de Retorno

3 Busca em Profundidade Qual o custo de fazer busca em um grafo com n vértices e m arestas? Dentro do procedimento P, cada aresta na lista de incidências do vértice v é visitada, tomando um tempo (grau(v)). Sobre todas as chamadas de um grafo conexo, temos: grau(v), v V. grau(v) = 2.|E|.

4 Variações de Busca em Profundidade O algoritmo de busca em profundidade pode ser alterado para muitas aplicações em tempo linear. Ex. Base de Ciclos, isto é, um conjunto de ciclos a partir do qual todos os ciclos do grafo podem ser expressos. Ex. C1 = (1, 4, 2, 3, 5, 1) C2 = (4, 2, 3, 4) C3 = C1 C2 = (1, 4, 3, 5, 1)

5 Base de Ciclos P(v, pai) –Insira v na pilha Q. Marque v como visitado –Para toda aresta (v, w) incidente a v faça: Se w não marcado então P(w) /* aresta de árvore */ senão se w pai então /* aresta de retorno */ Se nível[v] > nível[w] então /* primeira vez que acha (v, w) */ Imprima (w, Q[topo], Q[topo-1],..., Q[?] = w) senão nada senão /* aresta de árvore */ –Remova v da pilha Q

6 Custo de Base de Ciclos Note que o algoritmo dado encontra a base de ciclos do grafo em tempo linear. No entanto, a impressão dos ciclos pode tomar tempo quadrático. Isso pode ser corrigido lembrando o nível das arestas de retorno que incidem em cada nó da árvore, e verificando qual o melhor (menor) ciclo a imprimir em caso de escolha.

7 Exercícios 1. Fazer uma implementação linear para o problema de Bases de Ciclos. 2. Dado um grafo G(V, E) não direcionado que contém exatamente um ciclo, direcionar as arestas de G de forma que todo vértice em V tenha grau Dado um grafo G(V, E) não direcionado, encontrar os componentes biconexos de G.

8 Busca em Largura Tome um vértice qualquer v. Coloque v na fila F. Enquanto F não for vazia faça –v Primeiro elemento da fila F –Para toda aresta (v, w) incidente a v faça Se w não marcado então Inclua w em F /* aresta de árvore */ senão se w = pai então /* aresta de árvore */ senão /* aresta de cruzamento */

9 Busca em Largura A busca em largura biparticiona as arestas do grafo em arestas de árvore e arestas de cruzamento

10 Algoritmo Distâncias D(v, w) é o menor número de arestas num caminho de v a w. A distância do vértice inicial a qualquer outro vértice na árvore é a distância entre estes vértices no grafo G. Se (v, w) é uma aresta em G, então |nível(v) - nível(w)| 1 na árvore de busca em largura

11 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

12 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.

13 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 o vé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)

14 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értice s. - É 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.

15 Distâncias com Pesos - Implementação Para selecionar o mínimo D, usar um heap. Cada operação de inclusão/remoção custará (log |E|). 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.

16 Distâncias com Pesos -Análise do Custo Operações de inclusão/remoção do heap Cada operação de inclusão/remoção custará (log |E|). O laço enquanto é executado |V| vezes, no entanto, como o heap vai conter elementos que não são candidatos de fato, a seleção do mínimo custará no total (|E|. log |E|). No total, o laço para todo será executado (|E|) vezes.

17 Á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).

18 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 o vé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)

19 Problema Fluxo em Rede Def: Uma rede é um grafo direcionado com capacidades (de transmissão) nas arestas. OBJETIVO: Dados - Uma rede D (V, E, C), - Uma fonte s, e um destino t, definir um fluxo f máximo de s a t, obedecendo aos critérios: f in (v) = f out (v); f in (s) = 0; f out (t) = 0 f(v,w) c(v,w)

20 Problema Fluxo em Rede PERGUNTA: Algoritmo Guloso funciona?


Carregar ppt "Algoritmos em Grafos (Parte 2) Katia S. Guimarães"

Apresentações semelhantes


Anúncios Google