Grafos Msc. Cintia Carvalho Oliveira Doutoranda em Computação – UFU Mestre em Computação - UFU Bacharel em Computação - UFJF
Ordenação Topológica
Ordenação Topológica Consideremos grafos dirigidos acíclicos Um digrafo é acíclico se não tem ciclos. Digrafos acíclicos também são conhecidos como DAGs (= directed acyclic graphs)
Digrafo Acíclico Dígrafos que não tem ciclos, como: Hierarquia de herança entre classes em orientação a objetos Pré-requisitos entre disciplinas Restrições de cronograma entre tarefas de um projeto Toda árvore direcionada é um dígrafo acíclico Todo caminho num dígrafo acíclico é simples, não tem repetição de vértices Como saber se um dígrafo é acíclico?
Ordenação Topológica Grafos direcionados acíclicos podem ser usados para indicar precedência de eventos O evento 1 só pode ocorrer após o evento 0 O evento 4 pode ocorrer antes do evento 0 1 4 3 2 5
Ordenação Topológica É uma ordenação nos vértices de forma que todas as arestas vão da esquerda para a direita. Com a ordenação Topológica: Verificar se um grafo é bicolorível Detecção de ciclos Caminhos Mínimos Conectividade
Ordenação Topológica
Ordenação Topológica Uma aresta direcionada (u, v) indica que a atividade u tem que ocorrer antes da atividade v.
Algoritmos de ordenação topológica Ao receber um Dígrafo G, um algoritmo de ordenação topológica deve devolver: Uma ordenação topológica de G, ou Um ciclo de G.
Algoritmo de ordenação Topológica : eliminação de fontes Algoritmo de Kahn Encontra os vértices “fonte” (com grau de entrada zero) e os insere em um conjunto S (uma fila) Ao menos um vértice desses deve existir se o grafo é acíclico Partindo do princípio que, se os vértices fonte e seus arcos de saída forem removidos, o grafo remanescente é dígrafo acíclico Remove da fila sucessivamente os vértices fontes Rotula-os em ordem de remoção e remove seus arcos
Algoritmo de Kahn L ← Lista vazia que irá conter os elementos ordenados S ← Conjunto de todos os nós sem arestas de entrada enquanto S é não-vazio faça remova um nodo n de S insira n em L para cada nodo m com uma aresta de n até m faça remova a aresta do grafo se m não tem mais arestas de entrada então insira m em S se o grafo tem arestas então escrever mensagem de erro (grafo tem pelo menos um ciclo) senão escrever mensagem (ordenação topológica proposta: L)
Algoritmo de Tarjan Se uma aresta de retorno é encontrada na BFS então o grafo possui um ciclo. Um grafo é acíclico sse na BFS não for encontrada nenhuma aresta de retorno. Busca em profundidade é utilizada para determinar se o grafo orientado é acíclico e então determinar uma ordenação topológica
Ordenação Topológica Um grafo orientado é acíclico se, e somente se, não são encontradas arestas de retorno durante uma busca em profundidade 4 1 5 2 6 3 7
Algoritmo de Tarjan Iniciando a visita em v, visite todos os seus adjacentes (v, w) chamando a função DFS recursivamente para w. Após finalizar a lista de adjacências de cada vértice v sendo processado, adicione-o na ordem topológica.
Ordenação Topológica Algoritmo Calcular o tempo de término de cada vértice utilizando a busca em profundidade A medida que é calculado seu tempo de término, insere-se o vértice no inicio de uma lista Os vértices ordenados topologicamente aparecem em ordem inversa aos seus tempos de término
Algoritmo de Tarjan
Ordenação Topológica Cada vértice é rotulado em ordem inversa à ordem em que eles são marcados completamente explorados. Existe uma aresta de x para y se a tarefa x depende da tarefa y (a tarefa y deve ser concluída antes da tarefa x poder ser iniciada)
Caminhos Hamiltonianos Se numa ordenação todos os pares de vértices consecutivos forem conectados por arestas, essas formam um caminho hamiltoniano dirigido. Se existe um caminho Hamiltoniano a ordenação topológica é única. Caso contrário dois vértices podem ser trocados (se não conectados por arestas) formando outras ordenações topológicas. É possível testar em tempo polinomial se existe uma ordenação única e portanto um caminho hamiltoniano em um digrafo.
Exercícios Os dois dígrafos representados são DAGs? Escreva uma função que recebe um digrafo e diga se ele é ou não um DAG Sejam s e t dois vértices de um DAG. Suponha que existe um caminho de s a t. Mostre que não existe caminho t a s.
Exercícios Dê quatro ordenações topológicas diferentes do dígrafo cujos arcos são: Dê um ordenação topológica do grafo
Vértice de Articulação (vértice de corte)
Vértices de Articulação É um vértice de um grafo conexo cuja remoção torna o grafo desconexo. Qualquer grafo que contenha um vértice de articulação é frágil. A conectividade de um grafo é a quantidade de vértices necessários para desconectar o grafo. Conectividade é uma importante medida de robustez no projeto de rede.
Vértice de Articulação
Grafo biconexo Um grafo com três ou mais vértices é biconexo se for conexo, sem articulações e tiver três ou mais vértices Um grafo com três ou mais vértices é biconexo sse cada par de seus vértices estiver ligados por dois caminhos internamente disjuntos (sem vértices em comum). Explica o nome “biconexo”
Exercício É verdade que todo grafo sem articulações não tem ponte? É verdade que todo grafo sem pontes não tem articulação? O grafo 3 por 3 do bispo tem dois componentes. Mostre que apenas um é biconexo. Exiba um grafo dotado da seguinte propriedade: quaisquer 2 vértices do grafo pertencem a um mesmo circuito mas há 3 vértices que não pertencem a um mesmo circuito.
Bibliografia http://wiki.icmc.usp.br/images/9/93/Alg2_05.Grafos_ordenacaotopologica.pdf http://pt.wikipedia.org/wiki/Ordena%C3%A7%C3%A3o_topol%C3%B3gica