Dijkstra ed ottimalità sottocammini

Messaggioda anonymous_f3d38a » 09/12/2020, 12:43

Buongiorno a tutti! Ho una domanda che riguarda l'algoritmo di Dijkstra.

Si consideri un grafo connesso $G$ con $n$ archi ed $m$ nodi.
In entrambi i grafi viene definito un nodo sorgente $s$ ed un noto termine (destinazione) $t$.
Viene applicato l'algoritmo di Dijkstra per trovare il cammino minimo da $s$ a $t$.

---------------------------------------------------------------------------------

DOMANDA


Per quali nodi del grafo $G$, al termine dell’algoritmo di Dijkstra, è stato determinato un cammino ottimo?

$a)$ per tutti i nodi che appartengono al cammino minimo da $s$ a $t$
$b)$ per tutti i nodi che sono stati selezionati
$c)$ per tutti i nodi a cui è stata assegnata un'etichetta
$d)$ per tutti i nodi

Motivare la risposta.
Nota: le risposte corrette possono essere più di una.

---------------------------------------------------------------------------------

Allora, per il teorema di ottimalità dei sottocammini, la $a$ è sicuramente vera. Io risponderei la $a$ e basta.
Voi che ne pensate? Chiedo perché non saprei come dimostrare che la $b$ e la $c$ sono false.
anonymous_f3d38a
Average Member
Average Member
 
Messaggio: 355 di 902
Iscritto il: 05/09/2019, 14:46

Re: Dijkstra ed ottimalità sottocammini

Messaggioda vict85 » 09/12/2020, 18:30

Dijkstra riceve un grafo \(G\) e ne estrae un sottografo orientato \(A\) che possiede la proprietà di essere un albero1, usando quest'ultimo produce il cammino ottimo richiesto.

Siccome ci si ferma quando si trova il cammino ottimo tra \(s\) e \(t\), non è detto che si visitino tutti i nodi, quindi (d) è senz'altro sbagliato.

Ogni cammino positivo2 di \(A\) è un cammino ottimo anche in \(G\). Se il grafo non è orientato, allora lo stesso vale per la direzione negativa (da figli a padri).

Rimangono (b) e (c). Non sono sicuro cosa voglia dire selezionato e etichettato nella terminologia del tuo libro/professore quindi do una risposta un po' più generica. Indico con \(a\rightarrow b\) il cammino ottimo tra \(a\) e \(b\) (per semplicità suppongo sia unico). Nota che \(b\rightarrow a\) non è altro che \(a\rightarrow b\) percorso in direzione opposta (\(G\) non è orientato). Per ogni nodo di \(A\), \(s\rightarrow a\) appartiene a \(A\). Supponiamo quindi che sia abbia \(\ell(s\rightarrow a) < \ell(s\rightarrow b)\). Vogliamo sapere sotto che condizioni \(a\rightarrow b\) appartiene ad \(A\). La risposta è se e solo se \(s\rightarrow b = s\rightarrow a\rightarrow b\). Infatti se fossero diversi allora \(s\rightarrow a\rightarrow b\rightarrow s\) sarebbe un ciclo.

Note

  1. Un grafo è un albero se è connesso e aciclico. Aggiungo qui la proprietà di essere orientato dalla radice alle foglie perché è sia più simile al significato usuale in informatica che più corretto per l'algoritmo specifico.
  2. Chiamo cammino positivo un cammino in cui si va sempre da un padre al figlio e non il viceversa
vict85
Moderatore
Moderatore
 
Messaggio: 10259 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: Dijkstra ed ottimalità sottocammini

Messaggioda anonymous_f3d38a » 09/12/2020, 21:34

Innanzitutto ti ringrazio per la risposta.
Mi sono dimenticato di precisare che il grafo in questione è orientato.
anonymous_f3d38a
Average Member
Average Member
 
Messaggio: 357 di 902
Iscritto il: 05/09/2019, 14:46

Re: Dijkstra ed ottimalità sottocammini

Messaggioda vict85 » 10/12/2020, 12:08

Allora sono tutti falsi. Pensa al caso di una strada a senso unico e un percorso dall'inizio della strada alla sua fine. È evidente che neanche \(t\rightarrow s\) è incluso nella ricerca.
vict85
Moderatore
Moderatore
 
Messaggio: 10260 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: Dijkstra ed ottimalità sottocammini

Messaggioda anonymous_b7df6f » 10/12/2020, 21:42

L'etichettatura o "selezionatura" è una peculiarità dell'algoritmo di Dijkstra, si trova in molti libri, articoli, siti web.

anonymous_f3d38a ha scritto:Per quali nodi del grafo $G$, al termine dell’algoritmo di Dijkstra, è stato determinato un cammino ottimo?

$a)$ per tutti i nodi che appartengono al cammino minimo da $s$ a $t$
$b)$ per tutti i nodi che sono stati selezionati
$c)$ per tutti i nodi a cui è stata assegnata un'etichetta
$d)$ per tutti i nodi

Motivare la risposta.
Nota: le risposte corrette possono essere più di una.


Rispondendo a @anonymous_f3d38a, riporto quello che è scritto su un libro in mio possesso.
Definisco $R$ l'insieme dei nodi a cui è stata assegnata un'etichetta definitiva.
Dato un grafo $G$ pesato con costi $c$ non negativi, a ciascuna iterazione dell'algoritmo di Dijkstra, l'etichetta definitiva assegnata a ciascun nodo $v in R$ rappresenta il costo di un cammino minimo da $s$ a tale nodo, mentre l'etichetta temporanea di ogni nodo $v$ non appartenente ad $R$ rappresenta il minimo costo di un cammino da $s$ a tale nodo in cui i nodi intermedi sono tutti in $R$.

Quindi la risposta corretta è la ($b$), si può selezionare anche la ($c$) precisando che tale cammino minimo non è "assoluto", ma è quello che si trova scegliendo tra i nodi appartenenti all'insieme $R$.
anonymous_b7df6f
Junior Member
Junior Member
 
Messaggio: 190 di 490
Iscritto il: 30/12/2019, 22:29

Re: Dijkstra ed ottimalità sottocammini

Messaggioda vict85 » 11/12/2020, 00:37

Mi sembrava di essere stato chiaro, comunque, i problemi sono i seguenti:
1) I cammini ottimi trovati sono solo quelli che partono da \(s\) e i suoi sotto-cammini,
2) Se il grafo è orientato, i cammini minimi per i percorsi inversi non appartengono mai all'albero di ricerca.
Se lo scopo è quello di trovare tutti i percorsi minimi allora si devono usare altri algoritmi.

Se per esempio hai due strade principali parallele, gli archi tra di loro non verranno inclusi facilmente nell'albero di ricerca anche se sono il cammino ottimale per andare da un nodo di una in un nodo dell'altra.
vict85
Moderatore
Moderatore
 
Messaggio: 10263 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: Dijkstra ed ottimalità sottocammini

Messaggioda anonymous_f3d38a » 11/12/2020, 00:49

Grazie mille a entrambi, molto chiari.

P.s. grafo orientato non significa semplicemente che tutti gli archi hanno un orientamento?
anonymous_f3d38a
Average Member
Average Member
 
Messaggio: 358 di 902
Iscritto il: 05/09/2019, 14:46

Re: Dijkstra ed ottimalità sottocammini

Messaggioda vict85 » 11/12/2020, 14:25

Sì, anche se esistono delle piccole varianti nelle definizioni. Insomma, un grafo pesato normale può essere visto come un particolare grafo pesato orientato (in cui gli archi hanno sempre inverso e i pesi sono gli stessi in entrambe le direzioni) o come qualcosa definito in modo leggermente diverso.
Comunque sono forse stato un po' impreciso. Quello che volevo dire è che l'albero di ricerca è un grado in cui la relazione definita dagli archi è asimmetrica, quindi contiene i percorsi minimi in una certa direzione e mai nella direzione opposta. Però, se la relazione definita dagli archi del grafo è simmetrica e se i costi non dipendono dall'orientamento dell'arco (ovvero se il grafo è non orientato) allora un cammino ottimo è ottimo anche se percorso nella direzione opposta.
vict85
Moderatore
Moderatore
 
Messaggio: 10264 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin


Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite