Algoritmos em Grafos Parte 2 Katia S Guimares

  • Slides: 20
Download presentation
Algoritmos em Grafos (Parte 2) Katia S. Guimarães katia@cin. ufpe. br maio/2000 katia@cin. ufpe.

Algoritmos em Grafos (Parte 2) Katia S. Guimarães katia@cin. ufpe. br maio/2000 katia@cin. ufpe. br 1

Busca em Profundidade • Exemplo: 1 A partir do grafo abaixo, obtemos a árvore:

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

Busca em Profundidade • Qual o custo de fazer busca em um grafo com

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 katia@cin. ufpe. br 3

Variações de Busca em Profundidade O algoritmo de busca em profundidade pode ser alterado

Variações de Busca em Profundidade O algoritmo de busca em profundidade pode ser alterado para muitas aplicações em tempo linear. 1 4 6 2 Ex. Base de Ciclos, isto é, um conjunto de ciclos a partir do qual todos os ciclos do grafo podem ser expressos. Ex. C 1 = (1, 4 , 2, 3, 5, 1) C 2 = (4, 2, 3, 4) C 3 = C 1 C 2 = (1, 4, 3, 5, 1) maio/2000 katia@cin. ufpe. br 3 7 5 4

Base de Ciclos • P(v, pai) – Insira v na pilha Q. Marque v

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 katia@cin. ufpe. br 5

Custo de Base de Ciclos • Note que o algoritmo dado encontra a base

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 katia@cin. ufpe. br 6

Exercícios • 1. Fazer uma implementação linear para o problema de Bases de Ciclos.

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 katia@cin. ufpe. br 7

Busca em Largura • Tome um vértice qualquer v. Coloque v na fila F.

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 maio/2000 Inclua w em F /* aresta de árvore */ senão se w = pai então /* aresta de árvore */ senão /* aresta de cruzamento */ katia@cin. ufpe. br 8

Busca em Largura • A busca em largura biparticiona as arestas do grafo em

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

Algoritmo Distâncias Se (v, w) é uma aresta em G, então |nível(v) - nível(w)|

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 4 6 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. maio/2000 katia@cin. ufpe. br 2 5 3 7 10

Algoritmo Distâncias com Pesos Quando o grafo tem peso nas arestas, D(v, w) é

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. 1 5 4 6 maio/2000 katia@cin. ufpe. br 5 9 3 Note que, nessas circunstâncias, o algoritmo de busca em largura já não resolve. 2 3 2 5 3 4 6 7 11

Algoritmo Distâncias com Pesos Abordagem Algoritmo Guloso (Indução) - Inicialmente, só é conhecida uma

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 katia@cin. ufpe. br 12

Algoritmo Distâncias com Pesos Abordagem Algoritmo Guloso (Indução) - Para todo v V faça

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) maio/2000 katia@cin. ufpe. br 13

Algoritmo Distâncias com Pesos Abordagem Algoritmo Guloso (Indução) - Os vértices são marcados em

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 katia@cin. ufpe. br 14

Distâncias com Pesos - Implementação Para selecionar o mínimo D, usar um heap. Cada

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 katia@cin. ufpe. br 15

Distâncias com Pesos -Análise do Custo Operações de inclusão/remoção do heap Cada operação de

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 katia@cin. ufpe. br 16

Árvore Geradora de Peso Mínimo Abordagem Algoritmo Guloso (Indução) OBJETIVO: Construir uma árvore de

Á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 katia@cin. ufpe. br 17

Algoritmo AGPM Abordagem Algoritmo Guloso (Indução) - Para todo v V faça { Desmarcar

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) maio/2000 katia@cin. ufpe. br 18

Problema Fluxo em Rede Def: Uma rede é um grafo direcionado com capacidades (de

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 katia@cin. ufpe. br 19

Problema Fluxo em Rede PERGUNTA: Algoritmo Guloso funciona? maio/2000 katia@cin. ufpe. br 20

Problema Fluxo em Rede PERGUNTA: Algoritmo Guloso funciona? maio/2000 katia@cin. ufpe. br 20