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

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

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ções semelhantes


Apresentação em tema: "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)"— Transcrição da apresentação:

1 Ford Fulkerson Teoria dos Grafos

2 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)

3 Descrição do algoritmo FORD-FULKERSON(G,s,t) 1 for cada aresta (u,v) <- E[G] 2 do f[u,v] <- 0 3 f[v,u] <- 0 4 while existir um caminho p de s até t na rede residual Gf 5 do cf(p) <- min{cf(u,v) : (u,v) está em p} 6 for cada aresta (u,v) em p 7 do f[u,v] <- f[u,v] + cf(p) 8 f[v,u] <- (-f[u,v])

4 Aplicativos para grafos - Graphviz

5

6 Aplicativos para grafos

7 Aplicativos web para grafos ml

8 Aplicativos web para grafos html

9 Exemplo Animado - Passo 1

10 Exemplo Animado - Passo 2

11 Exemplo Animado - Passo 3

12 Exemplo Animado - Passo 4

13 Exemplo Animado - Passo 5

14 Exemplo Animado - Passo 6

15 Exemplo Animado - Passo 7

16 Exemplo Animado - Passo 8

17 Exemplo Animado - Passo 9

18 Exemplo Animado - Passo 10

19 Exemplo Animado - Passo 11

20 Exemplo Animado - Passo 12

21 Exemplo Animado - Passo 13

22 Exemplo Animado - Passo 14

23 Exemplo Animado - Passo 15

24 Exemplo Animado - Passo 16

25 Exemplo Animado - Passo 17

26 Exemplo Animado - Passo 18

27 Exemplo Animado - Corte 1 - 1

28 Exemplo Animado - Corte 1 - 2

29 Exemplo Animado – Corte 2

30 Exemplo Animado – Corte 3 Fluxo Máximo = 19 = Corte Mínimo

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

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

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

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

35 Exemplo de Armazenamento com Hash Podemos 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.

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

37 Tratamento de Colisões Endereçamento aberto A 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.

38 Tratamento de Colisões Encadeamento A 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.

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

40 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

41 Estrutura - Árvore 1.Um nó é vermelho ou preto 2.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 pretas 4.Ambos os filhos de todos os nós vermelhos são pretos 5.Todo caminho de um dado nó para qualquer de seus nós folhas descendentes contem o mesmo número de nós pretos

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

43 Explicação das implementações considerando cada estrutura de dado escolhida Java.util.Map Java.util.HashMap Java.util.TreeMap ListaAdj

44 Apresentação dos Resultados AMD Turion X2 2GHz 4GB Memória Windows 7

45 Grafo Completo - Esparsidade 0%

46 Grafo Denso - Esparsidade 40%

47 Grafo esparso - Esparsidade 80%

48 Resultados Densos Intel Centrino Duo 1.6Gh 2GB Memória Ram Ubuntu 11.04

49 Gráfico de Hash alterando nomenclatura

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

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


Carregar ppt "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ções semelhantes


Anúncios Google