Skip to content

Commit

Permalink
ct0371-1: Add notes
Browse files Browse the repository at this point in the history
  • Loading branch information
alek3y committed Apr 17, 2024
1 parent c893c1e commit d37a74c
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/ct0371-1/02/02/03/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ prim(G, w, r)
che è **corretto** perchè rispetta il _teorema fondamentale_ degli _MST_.
Infatti, ad ogni istante, si ha che:
$$
A = \Set{(\pi_v, v) \in E \mid u \in V \setminus Q \setminus \{r\}}
A = \Set{(\pi_v, v) \in E | u \in V \setminus Q \setminus \{r\}}
$$
e dato che $\pi_v \in V \setminus Q$, l'arco $(\pi_v, v)$ **non attraverserà mai** il _taglio_ $(V \setminus Q, Q)$, cioè il bordo tra i nodi **già visitati** e quelli **ancora da visitare**.
Inoltre, il prossimo $u$ proviene sicuramente dall'_arco leggero_ del _taglio_.
Expand Down
88 changes: 82 additions & 6 deletions src/ct0371-1/02/03/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,93 @@ digraph {
}
```

## Proprietà
## Struttura

<!-- TODO: Da spostare (con le funzioni ausiliarie, dopo le proprietà (?)) -->
Gli algoritmi principali memorizzano due campi per ogni vertice $u \in V$:
Gli algoritmi principali, come per [quello di Prim](../02/03/README.md), memorizzano due campi per ogni vertice $u \in V$:
- La **stima della distanza minima** `d[u]`, che alla fine dovrà essere uguale a $\delta(s, u)$
- Il **predecessore** `𝜋[u]`, da cui è partito l'arco verso $u$ che porta al peso finale `d[u]`

Inoltre, sia sui grafi _orientati_ che _non orientati_ valgono le proprietà:
- **Proprietà dei sottocammini minimi**
Inoltre, gli algoritmi fanno uso delle **funzioni ausiliarie**:
- **Init Single Source**

```c
init_ss(G, s)
for each u in G.V
d[u] = +infty
𝜋[u] = NIL
d[s] = 0
return d, 𝜋
```
con costo $\Theta(1)$.

- **Relax**

```c
relax(u, v, w, d, 𝜋)
if d[v] > d[u] + w(u, v)
d[v] = d[u] + w(u, v)
𝜋[v] = u
```
che diventa $O(\log n)$ per l'assegnamento a `d[v]`, se `d` è usato in una coda di priorità.

## Proprietà

Sia sui grafi _orientati_ che _non orientati_ valgono le proprietà:
- **Grafo dei predecessori**
- **Albero dei predecessori**

Il grafo $G_\pi = (V_\pi, E_\pi)$ è detto **dei predecessori** se dipende da $\pi$, ovvero se è costruito tale che:
$$
\begin{split}
V_\pi &= \Set{u \in V | \exists\pi_u} \\
E_\pi &= \Set{(\pi_u, u) \in E | u \in V_\pi \setminus \{s\}}
\end{split}
$$
ovvero un'istanza dello stato dell'algoritmo, che alla fine diventerà l'**albero dei cammini minimi**.

- **Albero dei cammini minimi**

Il sottografo $G' = (V', E')$ del grafo $G$ rappresenta i **cammini minimi** quando:
- $V' = \Set{u \in V | \delta(s, u) \neq \infty}$, ovvero l'insieme dei nodi **raggiungibili** in $G$ da $s$
- $G'$ forma un **albero** con radice $s$
- Il cammino tra $s$ e qualsiasi $u$ in $G'$ è **minimo** in $G$

- **Proprietà dei sottocammini minimi**

Ogni sottocammino del **cammino minimo** $p$ è anch'esso **minimo**, perchè altrimenti $p$ non lo sarebbe.

- **Disuguaglianza triangolare**

Dato $G = (V, E)$ ed un arco $(u, v) \in E$, allora:
$$
\delta(s, v) \leq \delta(s, u) + w(u, v)
$$

Che è dimostrato perchè nel caso di
- $\delta(s, u) = \infty$ allora $\delta(s, v) \leq \infty$
- $\delta(s, u) = -\infty$ allora è presente il _ciclo negativo_ anche tra $s$ e $v$, quindi $\delta(s, v) = -\infty$
- $\delta(s, u) \in \mathbb{R}$ allora, sia che $(u, v)$ sia il migliore o peggiore tra gli archi entranti di $v$, è verificata

- **Proprietà del limite inferiore**

Su qualsiasi algoritmo che usa `init_ss` e che modifica $d$ e $\pi$ solamente con `relax` vale che:
$$
\delta(s, v) \leq d_v,\; \forall v \in V
$$

Inoltre, se ad un certo punto $d_v = \delta(s, v)$, ulteriori chiamate a `relax` **non cambieranno più** $d$.

La dimostrazione si concentra sui principali momenti che coinvolgono $d$:
- Dopo `init_ss`, se:
- $v \neq s$, allora $\delta(s, v) \leq d_v = +\infty$
- $v = s$, allora $\delta(s, s) \leq d_s = 0$ anche in presenza di _cicli negativi_, i.e. $\delta(s, s) = -\infty$
- Dopo `relax` su $(u, v)$, supponendo _per assurdo_ che causi per la **prima volta** $d_v < \delta(s, v)$:

Siccome la `relax` dev'essere **entrata nell'`if`** perchè le ipotesi siano vere:
$$
d_u + w(u, v) = d_v
\hspace{0.4em} < \hspace{0.4em}
\delta(s, v) \leq \delta(s, u) + w(u, v)
$$
per l'ipotesi e per la _disuguaglianza triangolare_, ovvero che $d_u < \delta(s, u)$ che è assurdo perchè $v$ **non sarebbe il primo** ad aver infranto la proprietà, ma lo sarebbe $u$.

- **Proprietà della convergenza**

0 comments on commit d37a74c

Please sign in to comment.