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

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

P3 - Fluxo máximo numa rede de transporte

Apresentações semelhantes


Apresentação em tema: "P3 - Fluxo máximo numa rede de transporte"— Transcrição da apresentação:

1 P3 - Fluxo máximo numa rede de transporte
Modelar fluxos conservativos entre dois pontos através de canais com capacidade limitada s s Fluxo num arco não pode ultrapassar a capacidade Soma das entradas num nó igual à soma das saídas 3 2 3 2 1 a b a b 4 1 Exemplos abastecimento de líquido ponto a ponto tráfego entre dois pontos - s: fonte; t: poço - distribuição de fluxo pelos arcos arbitrária, desde que respeite as setas 3 2 2 2 c d c d Fim aula 11/4/2003 2 3 2 3 t t

2 Fluxo máximo: 1ª abordagem
algoritmo simples de aproximações sucessivas baseado em G  grafo base de capacidades Gf  grafo auxiliar de fluxos - inicialmente fluxos iguais a 0 - no fim, fluxo máximo Gr  grafo residual (auxiliar) - capacidade disponível em cada arco (= capacidade - fluxo) - capacidade disponível = 0 — eliminar arco saturado método de calcular o fluxo máximo entre s e t em cada iteração, selecciona-se um caminho em Gr entre s e t (de acréscimo) —algoritmo não determinístico valor mínimo nos arcos desse caminho = quantidade a aumentar a cada um dos arcos respectivos em Gf recalcular Gr termina quando não houver caminho de s para t

3 Exemplo: estado inicial
3 2 3 2 1 1 a b a b a b 4 4 3 2 3 2 c d c d c d 2 3 2 3 t t t G Gf Gr

4 Exemplo: 1ª iteração s s s a b a b a b c d c d c d t t t G Gf Gr 2 3 2
2 3 1 1 a b a b a b 4 4 3 2 2 3 c d c d c d 2 3 2 2 1 t t t G Gf Gr

5 Exemplo: 2ª iteração s s s a b a b a b c d c d c d t t t G Gf Gr 3 2 2
1 1 1 a b a b a b 4 4 3 2 2 2 1 c d c d c d 2 3 2 2 1 t t t G Gf Gr

6 Exemplo: 3ª iteração s s s a b a b a b c d c d c d t t t G Gf Gr 3 2 3
1 1 a b a b a b 4 1 3 3 2 2 2 1 c d c d c d 2 3 2 3 t t t G Gf Gr

7 Algoritmo não garante fluxo óptimo
critério ganancioso de selecção do caminho: escolher o que dê maior fluxo - caminho s, a, d, t (3 unidades de fluxo)  algoritmo termina sem obter o máximo - exemplo de algoritmo ganancioso que falha s s s 3 2 3 2 1 1 a b a b a b 4 3 1 3 2 3 2 c d c d c d 2 3 3 2 t t t

8 Algoritmo determinístico
permitir que o algoritmo mude de ideias para cada arco (v,w) com fluxo f(v,w) no grafo de fluxos acrescenta-se um arco (w,v) em sentido inverso no grafo residual com capacidade f(v,w) - corresponde a deixar devolver fluxo para trás (nunca fica globalmente negativo, contra o arco) - podem existir arcos em sentidos opostos; podem existir ciclos se as capacidades forem números racionais, o algoritmo termina com máximo se as capacidades forem inteiros e o fluxo máximo f - bastam f estádios (fluxo aumenta pelo menos 1 por estádio) - tempo de execução ( caminho mais curto não pesado ) é O(f. |E| ) ä mau evitar o problema escolher caminho que dá maior aumento de fluxo semelhante ao problema do caminho pesado mais curto (pequena alteração a Dijkstra) cada cálculo de um aumento em O(|E| log |V|) (Dijkstra) fluxo máximo em O(|E| log capMax) (capMax = capacidade máxima de um arco) global: O(|E|^2 log |V| log capMax)

9 Solução óptima - 1ª iteração
3 2 3 3 2 1 1 a b a b a b 4 3 1 3 2 3 2 3 c d c d c d 2 3 3 2 3 t t t 2 G Gf Gr 3 unidades de fluxo no caminho sadt

10 Solução óptima - 2ª iteração
3 2 3 2 3 2 1 1 a b a b a b 4 1 3 3 2 2 2 2 1 2 1 c d c d c d 2 3 2 3 2 3 t t t G Gf Gr 2 unidades de fluxo no caminho s,b,d,a,c, t

11 P4 - Árvore de expansão mínima (minimum spanning tree)
Árvore que liga todos os vértices do grafo usando arestas com um custo total mínimo caso do grafo não dirigido grafo tem que ser conexo árvore Þ acíclico número de arestas = |V| - 1 exemplo de aplicação: cablamento de uma casa - vértices são as tomadas - arestas são os comprimentos dos troços

12 Algoritmo de Prim expandir a árvore por adição sucessiva de arestas e respectivos vértices critério de selecção: escolher a aresta (u,v) de menor custo tal que u já pertence à árvore e v não (ganancioso) início: um vértice qualquer idêntico ao algoritmo de Dijkstra para o caminho mais curto informação para cada vértice - dist(v) é o custo mínimo das arestas que ligam a um vértice já na árvore - path(v) é o último vértice a alterar dist(v) - known(v) indica se o vértice já foi processado (isto é, se já pertence à árvore) diferença na regra de actualização: após a selecção do vértice v, para cada w não processado, adjacente a v, dist(w) = min{ dist(w), cost(w,v) } tempo de execução - O( |V|2 ) sem fila de prioridade - O( |E| log |V| ) com fila de prioridade

13 Evolução do algoritmo de Prim
última tabela known dist path 1 0 0 1 2 1 1 2 4 1 1 1 1 6 7 1 1 7 1 4 4 2 1 2 4 10 1 3 3 2 7 4 5 8 4 5 6 6 1 7 2 1 1 1 2 2 1 2 1 1 1 4 4 3 2 4 2 2 2 1 2 1 2 1 2 1 1 1 3 2 4 3 2 4 3 2 4 5 4 4 4 6 7 6 1 7 6 1 7

14 Algoritmo de Kruskal analisar as arestas por ordem crescente de peso e aceitar as que não provocarem ciclos (ganancioso) método manter uma floresta, inicialmente com um vértice em cada árvore (há |V|) adicionar uma aresta é fundir duas árvores quando o algoritmo termina há só uma árvore (de expansão mínima) aceitação de arestas — algoritmo de Busca/União em conjuntos representados como árvores se dois vértices pertencem à mesma árvore/conjunto, mais uma aresta entre eles provoca um ciclo (2 Buscas) se são de conjuntos disjuntos, aceitar a aresta é aplicar-lhes uma União selecção de arestas: ordenar por peso ou, melhor, construir fila de prioridade em tempo linear e usar Apaga_Min tempo no pior caso O( |E| log |E| ), dominado pelas operações na fila

15 Pseudocódigo (Kruskal)
void kruskal() { DisjSet s; PriorityQueue h; Vertex u, v; SetType uset, vset; Edge e, int edgesAccepted = 0; h = readGraphIntoHeapArray(); h.buildHeap(); s = new DisjSet(NUM_VERTICES); while(edgesAccepted < NUM_VERTICES -1 ) e = h.deleteMin(); // e = (u,v) uset = s.find(u); vset = s.find(v); if (uset != vset) edgesAccepted++; S.union(uset, vset); } }}

16 Evolução do algoritmo de Kruskal
1 2 3 4 5 6 7 10 8 1 2 3 4 5 6 7 1 2 1 2 1 1 3 5 3 4 5 4 6 1 6 7 7

17 Evolução do algoritmo de Kruskal
1 2 3 4 5 6 7 10 8 2 1 2 1 3 4 5 6 1 7 2 2 1 2 1 2 1 1 5 3 2 4 5 3 2 4 4 6 1 7 6 1 2 7 1 2 1 3 2 4 5 4 6 6 1 7


Carregar ppt "P3 - Fluxo máximo numa rede de transporte"

Apresentações semelhantes


Anúncios Google