Algoritmos para Grafos, via Sedgewick | Índice remissivo
[Esta página corresponde aproximadamente às seções 19.5 (DAGs) e 19.6 (Topological Sorting) do capítulo 19 (Digraphs and DAGs), p.178-193, do livro de Sedgewick.]
Um digrafo é acíclico se não tem ciclos. Digrafos acíclicos também são conhecidos como DAGs (= directed acyclic graphs).
Toda arborescência, por exemplo, é um DAG. Mas a classe dos DAGs é muito mais rica: ela contém muito digrafos interessantes que não são arborescências. Por outro lado, digrafos simétricos não são DAGs. Em particular, florestas não são DAGs.
Uma propriedade óbvia mas útil de DAGs: todo caminho num DAG é simples, ou seja, não tem vértices repetidos.
Um problema importante: Dado um digrafo, decidir se ele é ou não um DAG. Para justificar uma resposta negativa, basta exibir um ciclo. E para justificar uma resposta afirmativa? O que poderíamos exibir?
0-6 1-3 1-6 2-0 2-4 2-6 4-6 5-0 5-1 5-3 5-6
0-6 1-3 1-6 0-2 2-4 2-6 4-6 5-0 5-1 5-3 6-5
Uma ordenação topológica ou enumeração topológica (= topological sorting) de um digrafo é uma permutação v0 v1 … vn−1 dos seus vértices tal que se há um arco de vi para vj então
i < j .
O vértice v0 é necessariamente uma fonte e o vértice vn−1 é necessariamente um sorvedouro. (É claro que n é o número de vértices do digrafo.) Uma ordenação topológica v0 v1 … vn−1 pode ser representada por um vetor de vértices, digamos ts[0 .. n−1], definido assim:
ts[i] = vi
para cada i. Às vezes é mais conveniente trabalhar com o inverso de ts. Esse inverso, digamos tsi, é um vetor de números inteiros indexado pelos vértices do digrafo e definido pela identidade
ts[tsi[v]] = v
para cada vértice v. É claro que para cada vértice v existe um e um só número inteiro i entre 0 e n−1 tal que tsi[i] = v. É claro também que tsi representa uma ordenação topológica se e somente se
tsi[v] < tsi[w] para cada arco v–w.
Alguns exemplos de ordenação topológica:
É verdade que todo digrafo tem uma odenação topológica? Qual a relação entre DAGs e ordenação topológica?
É evidente que ciclos são incompatíveis com ordenação topológica. Portanto, digrafos que não são DAGs não têm ordenação topológica. É menos evidente que todo DAG admite ordenação topológica. A próxima página prova esse fato ao sugerir um algoritmo que recebe um digrafo arbitrário e devolve (1) um ciclo ou (2) uma ordenação topológica.
Resposta: Nããão! Isso distorce o significado usual do adjetivo "cíclico".