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

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

Grafos - 1 Problemas de fluxo numa rede Modelar fluxos conservativos entre dois pontos através de canais com capacidade limitada 1Fluxo num arco não pode.

Apresentações semelhantes


Apresentação em tema: "Grafos - 1 Problemas de fluxo numa rede Modelar fluxos conservativos entre dois pontos através de canais com capacidade limitada 1Fluxo num arco não pode."— Transcrição da apresentação:

1 Grafos - 1 Problemas de fluxo numa rede Modelar fluxos conservativos entre dois pontos através de canais com capacidade limitada 1Fluxo num arco não pode ultrapassar a capacidade 2Soma das entradas num nó igual à soma das saídas 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 ab dc s t ab dc s t

2 Grafos - 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 Grafos - 3 Exemplo: estado inicial ab dc s t ab dc s t ab dc s t GGfGf GrGr

4 Grafos - 4 Exemplo: 1ª iteração ab dc s t ab dc s t ab dc s t GGfGf GrGr

5 Grafos - 5 Exemplo: 2ª iteração ab dc s t ab dc s t ab dc s t GGfGf GrGr

6 Grafos - 6 Exemplo: 3ª iteração ab dc s t ab dc s t ab dc s t GGfGf GrGr

7 Grafos - 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 ab dc s t ab dc s t ab dc s t

8 Grafos - 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) 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) - fluxo máximo em O(|E| log capMax) (capMax = capacidade máxima de um arco) - cada cálculo de um aumento em O(|E| log |V|) (Dijkstra) - global: O(|E|^2 log |V| log capMax)

9 Grafos - 9 Solução óptima - 1ª iteração ab dc s t ab dc s t ab dc s t GGfGf GrGr 3 3 unidades de fluxo no caminho sadt

10 Grafos - 10 Solução óptima - 2ª iteração ab dc s t ab dc s t ab dc s t GGfGf GrGr unidades de fluxo no caminho s,b,d,a,c, t

11 Grafos - 11 Caso difícil s a b t s a b t s a b t s a b t s a b t se se escolher passar sempre por a e por b… … temos de iterações, em vez de 2!

12 Grafos - 12 Árvores de expansão mínimas Á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

13 Grafos - 13 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

14 Grafos - 14 Evolução do algoritmo de Prim vknowndistpath última tabela

15 Grafos - 15 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) 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

16 Grafos - 16 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); } }}

17 Grafos - 17 Evolução do algoritmo de Kruskal

18 Grafos - 18 Evolução do algoritmo de Kruskal


Carregar ppt "Grafos - 1 Problemas de fluxo numa rede Modelar fluxos conservativos entre dois pontos através de canais com capacidade limitada 1Fluxo num arco não pode."

Apresentações semelhantes


Anúncios Google