ford fulkerson teoria dos grafos. definições uma rede de fluxo g = (v, e) é um grafo dirigido em...

51
Ford Fulkerson Teoria dos Grafos

Upload: internet

Post on 16-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Ford Fulkerson

Teoria dos Grafos

Page 2: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Definições

• Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v)  ³ 0 

• Se (u,v)  Ï E, então c(u,v) = 0• Dois vértices especiais: fonte s e destino t • Todos os vértices de G num caminho de s para t• Grafo conexo, |E| ³ |V| - 1• Um fluxo G = (V, E) é uma função f : V  ´ V  ® R tal

que:• f(u, v)  £ c(u, v) para u, v  Î V (restrição de

capacidade) • f(u, v) = - f(v, u) para u, v  Î V (simetria) • para u  Î V - { s, t }:   (conservação de fluxo) 

Page 3: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Descrição do algoritmo

FORD-FULKERSON(G,s,t)

1 for cada aresta (u,v) <- E[G]2   do f[u,v] <- 03        f[v,u] <- 04 while existir um caminho p de s até t na rede residual Gf5     do cf(p) <- min{cf(u,v) : (u,v) está em p}6          for cada aresta (u,v) em p7               do f[u,v] <- f[u,v] + cf(p)8                   f[v,u] <- (-f[u,v])

Page 4: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Aplicativos para grafos - Graphviz

Page 5: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Aplicativos para grafos - Graphviz

Page 6: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Aplicativos para grafos

Page 7: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Aplicativos web para grafos

http://www.cs.pitt.edu/~kirk/cs1501/animations/Network.html

Page 8: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Aplicativos web para grafos

http://www.ibiblio.org/links/applets/appindex/graphtheory.html

Page 9: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 1

Page 10: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 2

Page 11: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 3

Page 12: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 4

Page 13: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 5

Page 14: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 6

Page 15: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 7

Page 16: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 8

Page 17: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 9

Page 18: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 10

Page 19: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 11

Page 20: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 12

Page 21: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 13

Page 22: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 14

Page 23: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 15

Page 24: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 16

Page 25: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 17

Page 26: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Passo 18

Page 27: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Corte 1 - 1

Page 28: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado - Corte 1 - 2

Page 29: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado – Corte 2

Page 30: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo Animado – Corte 3

 

Fluxo Máximo = 19 = Corte Mínimo

Page 31: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Complexidade do algoritmo

  •  O algoritmo usando Busca por Profundidade tem

complexidade O(E|f*|):o Para encontrar o caminho na rede residual O(E)o Processo de aumento do fluxo, enquanto houver um

caminho aberto na rede residual, incrementa pelo menos uma unidade o fluxo até o limite do fluxo máximo O(|f*|). 

o O Algoritmo só funciona se todos os pesos forem inteiros. Do contrário, é possível não convergir para o valor máximo.

Page 32: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Descrição das estruturas de dados consideradasAs estruturas de dados consideradas para avaliação e desempenho do algoritmo de Ford-Fulkerson foram:• Lista de Adjacência• Árvore• Hash

Page 33: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Hash

• Estrutura de dados que associa chaves de pesquisa a valores, objetivando, a partir de uma chave simples, fazer uma busca rápida e obter o valor desejado.

• A implementação típica busca uma função de dispersão que seja de complexidade O(1), não importando o número de registros na tabela (desconsiderando colisões). O ganho com relação a outras estruturas associativas (como um vetor simples) passa a ser maior conforme a quantidade de dados aumenta.

Page 34: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Funcionamento do Hash

A função de dispersão é a responsável por gerar um índice a partir de determinada chave. 

O ideal para a função de espalhamento é que sejam sempre fornecidos índices únicos para as chaves de entrada. A função perfeita seria a que, para quaisquer entradas A e B, sendo A diferente de B, fornecesse saídas diferentes. Quando as entradas A e B são diferentes e, passando pela função de espalhamento, geram a mesma saída, acontece o que chamamos de colisão.

Na prática, funções de espalhamento perfeitas ou quase perfeitas são encontradas apenas onde a colisão é intolerável (por exemplo, nas funções de dispersão da criptografia), ou quando conhecemos previamente o conteúdo da tabela armazenada. Nas tabelas de dispersão comuns a colisão é apenas indesejável, diminuindo o desempenho do sistema.

Page 35: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Exemplo de Armazenamento com HashPodemos armazenar uma lista telefônica em um vetor e criar uma função de espalhamento que funcionasse de acordo com o seguinte critério: devolver um valor distinto para cada letra inicial do nome distinta. Iniciando de 0 para a letra 'A', até 25 para a letra 'Z'

Uma colisão ocorre quando dois registros recebem o mesmo índice na tabela Hash.

Page 36: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Fator de Carga

O desempenho da maioria dos métodos de resolução de colisão não depende diretamente do 'n' número de entradas armazenadas, mas depende fortemente da carga da tabela fator, a razão 'n' / 's' entre 'n' e o tamanho da sua matriz 's'. Com uma boa função hash, a média de custo de pesquisa é praticamente constante como aumento do fator de carga de 0 a 0,7 (cerca de 2 / 3) mais ou menos. Além desse ponto, a probabilidade de colisões e os custos de lidar com eles aumenta. Por outro lado, como o fator de carga se aproxima de zero, a proporção da áreas não utilizadas nos aumentos de tabela de hash, mas não há necessariamente qualquer melhoria no custo de pesquisa, resultando em desperdício de memória.

Page 37: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Tratamento de Colisões

Endereçamento abertoA informação é armazenada na própria tabela de dispersão. • Para a estratégia linear, é utilizada uma

segunda função matemática para calcular a posição em que deve ser feita a próxima prova, a função de redispersão. 

• Na estratégia quadrática, para reduzir o agrupamento primário, procura-se por um lugar livre através da fórmula: h + n2, em que h representa o índice da colisão e n o sequencial de busca pela nova posição.

Page 38: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Tratamento de Colisões

EncadeamentoA informação é armazenada em estruturas encadeadas fora da tabela de dispersão. Encontra-se uma posição disponível na tabela e indicamos que esta posição é a que deve ser buscada em seguida. Os mais conhecidos:• O encadeamento separado em que normalmente um

registro aponta para uma lista encadeada em que são armazenados os registros em conflito. A inserção na tabela requer uma busca e inserção dentro da lista encadeada; uma remoção requer atualizar os índices dentro da lista, como se faria normalmente. 

• Método de endereçamento aberto os registros em conflito são armazenados dentro da própria tabela. A resolução das colisões é realizada através de buscas padronizadas dentro da própria tabela.

• A Dispersão Dupla, forma mais complexa de implementar o endereçamento aberto, cria uma nova função de espalhamento que resolva o novo conflito.

Page 39: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Limitações

• A tabela de dispersão é uma estrutura de dados do tipo dicionário, que não permite armazenar elementos repetidos, recuperar elementos seqüencialmente (ordenação), nem recuperar o elemento antecessor e sucessor. 

• Para otimizar a função de dispersão é necessário conhecer a natureza da chave a ser utilizada. No pior caso, a ordem das operações pode ser O(N), caso em que todos os elementos inseridos colidirem. As tabelas de dispersão com endereçamento aberto podem necessitar de redimensionamento.

Page 40: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Estrutura - Árvore

• Árvore rubro-negra (não é flamenguista)• Estrutura original foi inventada em 1972 por Rudolf

Bayer 

• artigo de 1978 por Leonidas J. Guibas e Robert Sedgewick, onde ganhou esse nome 

• pode-se buscar, inserir, e remover em tempo O(log n)

• É uma arvore binária, que se balanceia dinâmicamente

Page 41: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Estrutura - Árvore1. Um nó é vermelho ou preto2. A raiz é preta. (A raiz pode sempre ser alterada de vermelho para preto,

mas não sendo válido o oposto,.)3. Todas as folhas são nulas e são pretas4. Ambos os filhos de todos os nós vermelhos são pretos5. Todo caminho de um dado nó para qualquer de seus nós folhas

descendentes contem o mesmo número de nós pretos

Page 42: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Estrutura - Lista Encadeada

• Uma lista encadeada é uma representação de uma sequência de objetos na memória do computador. Cada elemento da sequência é armazenado em uma célula da lista: o primeiro elemento na primeira célula, o segundo na segunda e assim por diante.

• Uma Lista Encadeada  (= linked list = lista ligada)  é uma sequência de células: cada célula contém um objeto de algum tipo e o endereço da célula seguinte.   

Page 43: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Explicação das implementações considerando cada estrutura dedado escolhida

Java.util.Map<K,V> Java.util.HashMap<K,V> Java.util.TreeMap<K,V> ListaAdj<K,V>

Page 44: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Apresentação dos ResultadosEstrutura de Dados Esparsidade 50 100 200 300 500 1000HashMap 00% 0,405 4,992 55,416 177,73 856,992 8117,287

HashMap 40% 0,151 1,752 20,228 31,46 293,868 2657,641

HashMap 80% 0,026 0,057 0,233 5,293 29,723 259,787

TreeMap 00% 0,421 4,727 53,617 204,947 978,932 8670,662

TreeMap 40% 0,171 1,565 20,862 74,74 309,582 3052,514

TreeMap 80% 0,036 0,26 1,575 8,471 36,92 344,433

HashMap Nominado 00% 0,182 1,617 15,912 194,912 842,682 8388,098

HashMap Nominado 40% 0,078 0,785 9,531 68,13 177,902 1797,663

HashMap Nominado 80% 0,015 0,072 1,237 7,155 22,854 165,935

AMD Turion X2 2GHz4GB MemóriaWindows 7

Page 45: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Grafo Completo - Esparsidade 0%

Page 46: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Grafo Denso - Esparsidade 40%

Page 47: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Grafo esparso - Esparsidade 80% 

Page 48: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Resultados Densos800 900 1000 1100 1200 1300 1400 1500

Árvore 2970,248 4392,804 5648,012 7723,679 10002,078

11789,555

13919,365

18194,72

Hash 3007,014 3457,458 5325,752 7910,981 10247,536

12816,059

15540,319 L. Adj 4069,375 29321,94

1   

50 100 200 300 400 500 600 700

Árvore 0,482 2,639 35,623 142,748 706,187 1185,395 2149,697

Hash 0,453 2,557 24,532 93,892 501,502 962,985 1985,005

L. Adj 0,563 2,06 41,14 152,389 457,512 749,336 1611,091 2415,765

Intel Centrino Duo 1.6Gh2GB Memória RamUbuntu 11.04

Page 49: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Gráfico de Hash alterando nomenclatura

Page 50: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Conclusões

• O custo computacional para o algoritmo de Ford-Fulkerson, é muito elevado em virtude da sua complexidade, diretamente associada ao número de arcos no grafo. 

• Sua performance pode ser melhorada dependendo da estrutura de dados selecionada. 

• Um eficiente algoritmo de hash pode ampliar ainda mais esta performance.

Page 51: Ford Fulkerson Teoria dos Grafos. Definições Uma rede de fluxo G = (V, E) é um grafo dirigido em que cada arco (u,v) tem capacidade c(u, v) 0 Se (u,v)

Pesquisas Futuras

• Estudo aprofundado sobre a nomenclatura inferindo na agilidade de tabelas hash - java.util.HashMap