Spanning tree minimo vs percorso più breve


45

Qual è la differenza tra l'algoritmo di spanning tree minimo e un algoritmo di percorso più breve?

Nella mia classe di strutture di dati abbiamo coperto due algoritmi di spanning tree minimi (di Prim e Kruskal) e un algoritmo di percorso più breve (Dijkstra).

Lo spanning tree minimo è un albero in un grafico che abbraccia tutti i vertici e il peso totale di un albero è minimo. Il percorso più breve è abbastanza ovvio, è un percorso più breve da un vertice all'altro.

Quello che non capisco è che il minimo spanning tree ha un peso totale minimo, i percorsi dell'albero non sarebbero i percorsi più brevi? Qualcuno può spiegare cosa mi sto perdendo?

Qualsiasi aiuto è apprezzato.


Ecco il mio esempio di una domanda simile che dimostra che l'albero di spanning minimo non è lo stesso con un percorso più breve. cs.stackexchange.com/a/43327/34363
atayenel

Inoltre, questo potrebbe essere interessante. L'albero di spanning massimo ha percorsi tra i nodi in cui ogni percorso è un percorso di collo di bottiglia, ovvero anziché ridurre al minimo la somma per massimizzare il peso minimo. Forse esiste una relazione simile tra lo spanning tree minimo.
Eugene,

Risposte:


38

Considera il grafico a triangolo con pesi unitari: ha tre vertici e tutti e tre i bordi { x , y } , { x , z } , { y , z } hanno peso 1 . Il percorso più breve tra due vertici è il percorso diretto, ma se li si uniscono tutti si ottiene un triangolo anziché un albero. Ogni raccolta di due bordi forma un albero di spanning minimo in questo grafico, ma se (ad esempio) scegli { x , y } , { y ,x,y,z{x,y},{x,z},{y,z}1 , quindi perdi il percorso più breve { x , z } .{x,y},{y,z}{x,z}

In conclusione, se metti insieme tutti i percorsi più brevi, non ottieni necessariamente un albero.


32

Hai ragione nel dire che i due algoritmi di Dijkstra (percorsi più brevi da un singolo nodo iniziale) e Prim (albero di spanning minimo a partire da un dato nodo) hanno una struttura molto simile. Sono entrambi avidi (prendono il bordo migliore dal punto di vista attuale) e costruiscono un albero che attraversa il grafico.

Il valore che minimizzano tuttavia è diverso. Dijkstra seleziona come bordo successivo quello che conduce dall'albero a un nodo non ancora scelto più vicino al nodo iniziale. (Quindi con questa scelta, le distanze vengono ricalcolate.) Prim sceglie come bordo il più corto che porta fuori dall'albero costruito finora. Quindi, entrambi gli algoritmi hanno scelto un "limite minimo". La differenza principale è il valore scelto per essere minimo. Per Dijkstra è la lunghezza del percorso completo dal nodo iniziale al nodo candidato, per Prim è solo il peso di quel singolo bordo.

x,y,z{x,y}{x,z}{y,z}x{x,y}{x,z}{x,y}{y,z}

alberi: Dijkstra vs Kruskal

Per quanto riguarda Kruskal , è leggermente diverso. Risolve l'albero di spanning minimo, ma durante l'esecuzione sceglie il bordo che potrebbe non formare un albero, ma evita semplicemente i cicli. Quindi le soluzioni parziali possono essere disconnesse. Alla fine ottieni un albero.


12

Sebbene il calcolo degli algoritmi Minimum Spanning Tree e Shortest Path sia simile, si concentrano su 2 requisiti diversi.

In MST, il requisito è di raggiungere ogni vertice una volta (creare un albero grafico) e il costo totale (collettivo) per raggiungere ciascun vertice deve essere minimo tra tutte le possibili combinazioni.

Nel Percorso più breve, il requisito è raggiungere il vertice di destinazione dal vertice di origine con il minor costo possibile (peso più breve). Quindi qui non ci preoccupiamo di raggiungere ogni vertice, invece ci concentriamo solo sui vertici di origine e di destinazione ed è qui che sta la differenza.

Ecco l'esempio per chiarire perché MST non fornisce necessariamente il percorso più breve tra 2 vertici.

(A)----5---(B)----5---(C)
 |                     |
 |----------7----------| 

Nel caso MST, bordi AB. BC sarà su MST con un peso totale di 10. Quindi il costo per raggiungere da A a C in MST è 10.

Ma nel caso del Percorso più breve, il percorso più breve tra A e C è AC che è 7. AC non è mai stato su MST.


4

La differenza sta nell'obiettivo finale di questo algoritmo:

Dijkstra - Qui l'obiettivo è raggiungere dall'inizio alla fine. Ti preoccupi solo di questi 2 punti e ottimizzi il tuo percorso di conseguenza.

Krusal's - Qui puoi iniziare da qualsiasi punto e visitare tutti gli altri punti nel grafico. Pertanto, potresti non scegliere sempre il percorso più breve per due punti. Invece l'obiettivo è scegliere il percorso che ti porterà a un percorso più breve per tutti gli altri punti.


1

Penso che un esempio lo chiarirà ..

inserisci qui la descrizione dell'immagine

L'albero di spanning appare come sotto. Questo perché se sommiamo i bordi in questa configurazione, otteniamo il minor costo totale possibile : 2 + 5 + 14 + 4 = 25.

(1)   (4)
  \   /
   (2)
  /   \
(3)   (5)

Osservando l'albero di spanning potresti pensare erroneamente che ti dia i percorsi più brevi, ma in pratica non lo fa. Ad esempio, se volessimo passare da un nodo (1)all'altro (4)ci costerebbe 7. Tuttavia, se usassimo l'algoritmo di Dijkstra sul grafico originale, scopriremmo che possiamo passare direttamente dal nodo (1)a (4)un costo di 5.


-1

Esempio pratico per mostrare la differenza>

Supponi di arrivare in treno in una città e di voler raggiungere il tuo hotel.

Opzione 1: prendere un taxi: il taxi prenderà il percorso più breve per raggiungere l'hotel dalla stazione. Se il conducente deve seguire un percorso lungo il percorso più breve, centrato sulla stazione.

Opzione 2: prendere un autobus. La compagnia di autobus vuole soddisfare persone, non solo te. Il percorso ideale dovrebbe comprendere tutti i punti chiave della città. Quindi seguirà (*) un percorso lungo l'albero di spanning minimo. Ecco perché l'autobus è più lento, ma poiché i costi sono condivisi è più economico.

(*) In realtà le persone si lamenterebbero se fosse utilizzato l'albero di spanning minimo (il viaggio in autobus sarebbe troppo lungo). Quindi, in pratica, sarebbe una soluzione mista e userebbe un Alpha-Tree (a metà strada tra un minimo spanning tree e un albero percorso più breve).


1
Benvenuti nel sito. Non credo che la tua analogia sia buona, dato che il percorso preso da un autobus non sembra avere molto a che fare con lo spanning degli alberi. In particolare, non si estende (non visita tutti i punti della città) e non è un albero. Piuttosto, è una specie di percorso (o ciclo) che visita o passa vicino a quanti punti significativi è ragionevole, quindi il percorso è ragionevolmente utile per un numero ragionevolmente elevato di persone.
David Richerby,

-1

Si basano su due proprietà diverse. Lo spanning tree minimo si basa sulla proprietà di taglio, mentre il percorso più breve si basa sulla proprietà rilassante del bordo.

Un taglio divide un grafico in due componenti. Può coinvolgere più spigoli. In MST, selezioniamo il bordo con il minor peso.

La distensione del bordo dice che, dato che conosco la distanza tra A e B: dist (a, b) e dist tra A e C: dist (a, c), se dist (a, b) + edge (b, c) è inferiore a dist (a, c), quindi posso rilassare il bordo (ac). Dopo aver rilassato tutti i bordi, otteniamo il percorso più breve.

Consiglio vivamente di guardare il video sugli algoritmi grafici del professor Robert Sedgewick.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.