Skip to content

Commit

Permalink
vault backup: 2025-03-09 13:00:45
Browse files Browse the repository at this point in the history
  • Loading branch information
AglaiaNorza committed Mar 9, 2025
1 parent 7880ae1 commit d86f190
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -314,9 +314,9 @@ def compFC(G):
```

Al *caso pessimo*, la complessità sarà $O(n^3)$.
Consideriamo il caso di un grafo diretto $G$ avente un arco $(u,v)$ per ogni $u\leq v$ (ovvero una "catena")

Infatti:
Consideriamo il caso di un grafo diretto $G$ avente un arco $(u,v)$ per ogni $u\leq v$.
- facciamo $n$ visite, di cui ognuna costa $O(n+m)$
- ma gli archi sono $\frac{n (n-1)}{2}=O(n^2)$, quindi:
- $O(n)\times O(n^2)=O(n^3)$

Esistono algoritmi che lavorano in tempo $O(n+m)$, come l'algoritmo di Tarjan e quello di Kosaraju (non trattati) (li aggiungerò comunque ma non fanno parte del programma).
17 changes: 13 additions & 4 deletions progettazione di algoritmi/3 - sort topologico.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
## sort topologico
è una permutazione dei nodi tale che tutte le frecce vanno in una direzione
Un **ordinamento topologico** è una permutazione dei nodi di un grafo tale che, se $(u,v)\in E$, allora $u$ compare prima di $v$ nell'ordinamento (ovvero tutte le frecce puntano in una sola direzione).

- non è sempre possibile trovarne uno

Un grafo ha il massimo numero di ordinamenti topologici quando non ha archi.
> Un grafo diretto può avere da $0$ a $n!$ ordinamenti topologici <small>(ha il massimo numero di ordinamenti topologici quando non ha archi - tendenzialmente, più archi ci sono, meno sono gli ordinamenti topologici)</small>
>[!tip] esiste un sort topologico $\iff$ il grafo è un DAG (grafo diretto aciclico)
Un DAG ha infatti sempre un **nodo sorgente**, ovvero un nodo in cui non entrano archi. Questa proprietà ci permette di costruire un ordinamento topologico in questo modo:
- inizio la sequenza dei nodi con una sorgente
- cancello dal DAG quel nodo sorgente e gli archi che partono da esso - otterrò un nuovo DAG
- ripeto fino ad aver sistemato in ordine lineare tutti i nodi

> <small>fatto anche [[19 - il meccanismo di lock, lock binario#lock binario|qui]] (basi di dati 1, serializzabilità)<small>

esiste un sort topologico $\iff$ il grafo è un DAG (grafo diretto aciclico)

- A[i] = numero di archi che entrano in i
- trovo sorgente in $O(n)$
Expand Down
3 changes: 2 additions & 1 deletion progettazione di algoritmi/progettazione di algoritmi.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
>[!info] index
>- [[0 - introduzione]]
>- [[1 - introduzione ai grafi]]
>- [[2 - visita DFS, colorabilità, componenti connesse]] (non finiti)
>- [[2 - visita DFS, colorabilità, componenti connesse]]
>- [[3 - sort topologico]]

0 comments on commit d86f190

Please sign in to comment.