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

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

Algoritmos em Grafos (Parte 2)

Apresentações semelhantes


Apresentação em tema: "Algoritmos em Grafos (Parte 2)"— Transcrição da apresentação:

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

2 Busca em Profundidade Exemplo:
1 A partir do grafo abaixo, obtemos a árvore: 6 4 6 5 1 2 Aresta de Árvore 3 7 4 3 Aresta de Retorno 2 7 5 maio/2000

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|. maio/2000

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) 1 6 4 2 3 7 5 maio/2000

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 maio/2000

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. maio/2000

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  1. 3. Dado um grafo G(V, E) não direcionado, encontrar os componentes biconexos de G. maio/2000

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 */ maio/2000

9 Busca em Largura A busca em largura biparticiona as arestas do grafo em arestas de árvore e arestas de cruzamento. 1 6 5 6 4 5 1 3 7 2 3 4 2 7 maio/2000

10 Algoritmo Distâncias Se (v, w) é uma aresta em G,
então |nível(v) - nível(w)|  1 na árvore de busca em largura. 1 6 4 5 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. 2 3 7 maio/2000

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. 1 2 5 3 6 4 5 9 3 5 2 3 4 6 7 maio/2000

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. maio/2000

13 Algoritmo Distâncias com Pesos
Abordagem Algoritmo Guloso (Indução) - Para todo v V faça { Desmarcar v; D[v] =  } - D[s] = /* 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) maio/2000

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. maio/2000

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. maio/2000

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. maio/2000

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). maio/2000

18 Algoritmo AGPM Abordagem Algoritmo Guloso (Indução)
- Para todo v V faça { Desmarcar v; D[v] =  } - D[s] = /* 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) maio/2000

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:  fin (v) =  fout (v); fin (s) = 0; fout (t) = 0 f(v,w)  c(v,w) maio/2000

20 Problema Fluxo em Rede PERGUNTA: Algoritmo Guloso funciona? maio/2000


Carregar ppt "Algoritmos em Grafos (Parte 2)"

Apresentações semelhantes


Anúncios Google