• Nenhum resultado encontrado

Diêgo João Costa SantiagoHallan Cosmo dos Santos

N/A
N/A
Protected

Academic year: 2022

Share "Diêgo João Costa SantiagoHallan Cosmo dos Santos"

Copied!
31
0
0

Texto

(1)

{djcs, hcs}@cin.ufpe.br

Diêgo João Costa Santiago

Hallan Cosmo dos Santos

(2)

O Problema Fluxo Máximo

 O que é o problema de encontrar fluxo máximo?

Uma empresa possui uma fábrica localizada na cidade X onde são fabricados produtos que necessitam ser transportados para o centro de distribuição na cidade Y.

Dados as estradas direcionadas que ligam os pares de cidades do país, bem como o número máximo de caminhões que pode se conduzir ao longo de cada estrada. Qual é o número máximo de caminhões que a empresa pode enviar para o centro de distribuição?

(3)

O Problema Fluxo Máximo

De acordo com a Teoria dos Grafos:

Dado uma rede – um grafo direcionado, em que cada aresta tem uma capacidade c associada a ele, um vértice de partida (source) e um vértice de chegada (sink). Devemos associar um valor não-negativo f , com f <= c para cada aresta, onde para cada vértice, exceto o source e o sink, a soma dos valores associados às arestas que entram deve ser igual a soma dos valores associados às arestas que o deixam.

Nós chamaremos f de o fluxo ao longo da aresta.

Devemos maximizar a soma dos valores associados às arestas que deixam o source, o fluxo total da rede.

(4)

O Problema Fluxo Máximo

A Imagem abaixo mostra uma solução ótima para uma instância deste problema. Cada

aresta apresentada com f/c .

(5)

Como resolver o problema

Precisamos de duas definições básicas para entender como resolver fluxo em redes:

A rede residual

Tem o mesmo número vértices da rede original e uma ou duas arestas para cada aresta na rede original. Se o fluxo ao longo da aresta a-b é menor do que a capacidade, existe uma aresta a-b com uma capacidade igual à diferença entre a capacidade e o fluxo (capacidade residual), e se o fluxo é positivo há uma aresta b-a com a capacidade igual ao fluxo de a- b.

O caminho de aumento

(6)

Como resolver o problema

(7)

Como resolver o problema

(8)

Como resolver o problema

(9)

Como resolver o problema

(10)

Problema Resolvido!

O exemplo sugeriu o seguinte algoritmo:

Inicie com nenhum fluxo em todas as arestas e aumente o fluxo total na rede enquanto há um aumento caminho desde o source até o sink - um caminho de aumento na rede residual.

O algoritmo (conhecido como o método Ford- Fulkerson) sempre termina: devido às capacidades e fluxos inteiros não-negativos, a cada passo obtemos um novo fluxo que está mais próximo do máximo.

(11)

Problema Resolvido!

A função max_flow será similar a esta,

independente do método que utilizamos para

encontrar caminhos de aumento:

(12)

Algoritmos para Caminho de Aumento

O algoritmo Ford-Fulkerson descrito obtém o resultado correto, não importa como resolvermos o sub-problema de encontrar um caminho de aumento.

No entanto, a cada novo caminho podemos

aumentar o fluxo total muito pouco, daí o

número de iterações do algoritmo pode ser

muito grande se nos descuidarmos ao

escolher qual caminho de aumento o

algoritmo deve usar.

(13)

Algoritmos para Caminho de Aumento

Agora é necessário uma implementação para a função find_path.

A primeira abordagem que me vem à mente é

a de usar uma busca em profundidade, pois

ela é provavelmente a mais fácil de

implementar. Infelizmente, seu desempenho é

muito ruim em algumas redes, e normalmente

é menos preferida em relação à que vamos

mostrar a seguir.

(14)

Algoritmos para Caminho de Aumento

A próxima idéia na simplicidade é uma usar uma busca em largura.

Sabemos que esta pesquisa normalmente retorna o caminho mais curto em um grafo não-ponderado.

Essa era a base da idéia de Edmonds-Karp.

No psedo-código a seguir, nós iremos basicamente:

Encontrar o menor caminho do source ao sink e determinar a capacidade da aresta de menor capacidade desse caminho. Então, para cada aresta, ao longo do caminho, reduzimos a capacidade dela e aumentarmos a capacidade da aresta oposta.

(15)

Algoritmos para Caminho de Aumento

(16)

Algoritmos para Caminho de Aumento

(17)

Algoritmos para Caminho de Aumento

Como podemos ver, isto é muito fácil de implementar.

Devido ao O(E) da execução da Busca em

Largura (implementada com listas de

adjacência), o pior caso do algoritmo é O

(V*E²), mas, geralmente, o algoritmo roda

num tempo muito melhor.

(18)

Problemas Relacionados

Como reconhecer problemas de fluxo máximo?

Muitas vezes eles são difíceis de detectar.

Geralmente, precisamos prestar muita atenção nas restrições quando achamos que temos uma solução baseada em fluxo máximo - que deve, pelo menos, sugerir uma solução O(N³).

Se o número de vértices é grande, um outro

algoritmo (como a programação dinâmica ou o

guloso), pode ser mais adequado.

(19)

Problemas Relacionados

Problema 1:

A descrição do problema poder sugerir múltiplos sources e/ou múltiplos sinks.

(20)

Problemas Relacionados

Problema 1:

A descrição do problema poder sugerir múltiplos sources e/ou múltiplos sinks.

(21)

Problemas Relacionados

Problema 2:

E se também fosse dado o número máximo de caminhões que podem passar através de cada uma das cidades do país (exceto as cidades onde a fábrica e o centro de distribuição estão localizados)? Em outras palavras, se tivermos de lidar com a capacidade dos vértices também.

(22)

Problemas Relacionados

Problema 2:

E se também fosse dado o número máximo de caminhões que podem passar através de cada uma das cidades do país (exceto as cidades onde a fábrica e o centro de distribuição estão localizados)? Em outras palavras, se tivermos de lidar com a capacidade dos vértices também.

(23)

Problemas Relacionados

Problema 3:

E se, além das capacidades nas cidades, as estradas se tornarem não-direcionadas?

(24)

Problemas Relacionados

Problema 3:

E se, além das capacidades nas cidades, as estradas se tornarem não-direcionadas?

(25)

Emparelhamento Máximo em Grafos Bipartidos

Esta é uma das mais importantes aplicações

de fluxo máximo, e muitos problemas podem

ser reduzidos a ela. O emparelhamento em

um grafo bipartido é um conjunto de arestas

tal que nenhum vértice é tocado por mais de

uma aresta. Obviamente, um

emparelhamento com máxima cardinalidade é

um emparelhamento máximo. Para um grafo

geral, este é um problema bem mais difícil de

resolver.

(26)

Emparelhamento Máximo em Grafos Bipartidos

A redução para fluxo máximo é bem simples, vamos a um exemplo:

Seja o grafo bipartido: o primeiro conjunto de vértices de empregados, enquanto o segundo contém um conjunto de trabalhos a ser feito.

Existe uma aresta de um empregado para cada um dos trabalhos que podem ser atribuídos a ele.

(27)

Emparelhamento Máximo em Grafos Bipartidos

Ao ver o grafo, percebemos que este

problema é semelhante a encontrar o fluxo

máximo num grafo de múltiplos sources e

multiplos sinks, que já resolvemos.

(28)

Algoritmo de Hopcroft-Karp

Agora descreveremos um algoritmo mais rápido.

A sua complexidade é .

Dado um grafo bipartido não-direcionado G(X,Y), seja M um emparelhamento em G. Dizemos que um caminho simples P em G é um caminho de aumento com respeito a M se ele começa em um vértice não emparelhado em X, termina em um vértice não emparelhado em Y e suas arestas pertencem alternadamente a M e a M.

(29)

Algoritmo de Hopcroft-Karp

Aqui está ele:

(30)

Algoritmo de Hopcroft-Karp

Problema 1:

Precisamos de um algoritmo O(E) para

encontrar um conjunto máximo de caminhos disjuntos de aumento, P1, P2, P3,...

Problema 2:

Mostrar que o número máximo de iterações do algoritmo é 2 . E concluir que o tempo de execução total do Hopcroft-karp é

(31)

Referências

Cormen, Thomas H.; Leiserson, Charles E.;

Rivest, Ronald L.; Stein, Clifford (2001).

Introduction to Algorithms, second edition, MIT Press and McGraw-Hill.

www.wikipedia.com

www.topcoder.com/tc

Referências

Documentos relacionados

Considerando a importância dos tratores agrícolas e características dos seus rodados pneumáticos em desenvolver força de tração e flutuação no solo, o presente trabalho

A simple experimental arrangement consisting of a mechanical system of colliding balls and an electrical circuit containing a crystal oscillator and an electronic counter is used

Apresento, em seguida, o lócus da pesquisa, apontando não somente justificativas e objetivos do programa Reinventando o Ensino Médio, mas também dados da escola, da turma pesquisada

Sendo assim, o presente estudo teve como objetivo avaliar o processamento temporal de cantores populares que tocam e não tocam instrumento musical, tendo como objetivos

Uma adequada avaliação da deglutição a fim de identificar precocemente a disfagia é fundamental para o melhor prognóstico, uma vez que a fonoterapia em

nesta nossa modesta obra O sonho e os sonhos analisa- mos o sono e sua importância para o corpo e sobretudo para a alma que, nas horas de repouso da matéria, liberta-se parcialmente

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

Neste estudo foram estipulados os seguintes objec- tivos: (a) identifi car as dimensões do desenvolvimento vocacional (convicção vocacional, cooperação vocacio- nal,