Prerequisiti
Esami, corsi o attività che richiedono risultati precedenti.
Algoritmi · Grafi orientati
Se un arco u→v significa “u deve venire prima di v”, un ordinamento topologico dispone tutti i vertici in una sequenza che rispetta ogni dipendenza.
Definizione. Dato un grafo orientato G = (V, E), un ordinamento topologico è una permutazione dei vertici tale che, per ogni arco (u, v) ∈ E, u compare prima di v.
A→C→D→F
L’ordine descrive i vincoli, non necessariamente una cronologia unica. Se A e B non sono collegati da alcun cammino, possono spesso scambiarsi senza invalidare il risultato.
Esami, corsi o attività che richiedono risultati precedenti.
Compilare una dipendenza prima del modulo che la importa.
Trovare un ordine ammissibile; le durate richiedono poi ulteriori tecniche.
Un DAG è un grafo orientato aciclico. Se esiste il ciclo A→B→C→A, ogni vertice dovrebbe precedere sé stesso: il vincolo è impossibile. Viceversa, ogni DAG contiene almeno un vertice con grado entrante zero.
Avanza un’operazione alla volta: i badge sui nodi mostrano il grado entrante residuo, gli archi tratteggiati sono già stati rimossi.
—
Un vertice di grado entrante 0 non ha predecessori ancora da collocare: può essere il prossimo elemento dell’ordine.
La sequenza prodotta rispetta tutti gli archi già rimossi; i gradi memorizzati corrispondono esattamente al grafo residuo.
Se la coda si svuota ma rimangono vertici, ciascuno ha un predecessore residuo. Seguendoli, in un insieme finito, prima o poi si ripete un vertice: esiste un ciclo.
| Operazione | Costo | Motivo |
|---|---|---|
| Calcolo dei gradi | Θ(|V| + |E|) | Inizializzazione dei vertici e una scansione degli archi. |
| Coda e rimozioni | Θ(|V| + |E|) | Ogni vertice entra una volta; ogni arco causa un decremento. |
| Tempo totale | Θ(|V| + |E|) | Con liste di adiacenza. |
| Spazio ausiliario | Θ(|V|) | Gradi, coda e risultato; il grafo occupa Θ(|V| + |E|). |
Una DFS può colorare i vertici bianco, grigio e nero: un arco verso un vertice grigio rivela un ciclo; se non ne trova, l’ordine inverso dei tempi di fine è topologico. Ha lo stesso costo Θ(|V| + |E|), ma Kahn rende più espliciti prerequisiti disponibili e parallelismo.
Prima di avviare il diamante, elenca tutti gli ordinamenti validi.
Aggiungi F>B alle dipendenze iniziali: in quale momento Kahn riconosce il ciclo?
Come cambieresti la coda per ottenere sempre l’ordine lessicograficamente minimo?