Sunteți pe pagina 1din 26

ALGORITMUL LUI

FLOYD
l. Dr. Ing. erban Radu
Departamentul de Calculatoare
Facultatea de Automatic i Calculatoare

Problema drumului de lungime


minim din orice vrf
Problema se refer la aflarea costului
minim din orice vrf ctre oricare alt vrf,
folosind muchii multiple
Aceasta se numete problema drumului de
lungime minim din orice vrf (all-pairs
shortest path problem)

Algoritmul lui Floyd


Algoritmul lui Warshall reprezint o
modalitate rapid de a crea un tabel care
indic vrfurile n care se poate ajunge
dintr-un anumit vrf, ntr-unul sau mai muli
pai
O abordare similar pentru grafuri
ponderate este folosit de algoritmul lui
Floyd, descoperit de Robert Floyd n 1962

Observaii
Matricea de adiacen indic costurile
tuturor cilor cu o singur muchie
Se dorete extinderea acestei matrici
pentru a indica costurile tuturor cilor,
indiferent de lungimea lor
De exemplu, se poate ajunge de la B la C
cu un cost de 30 (10 de la B la D i 20 de
la D la C)

Observaii
Similar algoritmului lui Warshall, se modific
matricea de adiacen
Se examineaz fiecare celul de pe fiecare
rnd
Dac exist o pondere pozitiv, de exemplu
30 la intersecia liniei C cu coloana A, atunci
se analizeaz coloana C, deoarece C
reprezint linia unde se afl 30

Observaii
Dac se gsete o celul n coloana C, de
exemplu 40 la linia D, atunci exist o cale
de la C la A cu o pondere de 30 i o cale
de la D la C cu o pondere de 40
Se poate deduce c exist o cale cu dou
muchii de la D la A, cu o pondere de 70

Observaii
Linia A este vid
Pe linia B este 70 n coloana A i 10 n
coloana D, dar coloana B este vid, deci
muchiile care ncep din B nu pot fi
combinate cu nicio muchie care se termin
n B

Observaii
n linia C se afl 30 pe coloana A
n coloana C se afl 20 pe linia D
Muchia de la C la A are o pondere de 30
Muchia de la D la C are o pondere de 20
Se obine calea de la D la A cu ponderea
de 50

Observaii
Linia D arat o situaie interesant se
poate micora un cost existent deja
Pe linia D exist 50 n coloana A
Pe linia B exist 10 n coloana D
Exist o cale de la B la A cu costul 60
Cu toate acestea, exist deja costul 70 pe
linia B, n coloana A

Observaii
Deoarece 60 e mai mic dect 70, se
nlocuiete 70 cu 60
n cazul cilor multiple de la un vrf la altul,
tabelul indic calea de cost minim

Observaii
Implementarea algoritmului lui Floyd este
similar algoritmului lui Warshall
n locul inserrii valorii 1 n tabel, cum se
procedeaz n algoritmul lui Warshall,
cnd se gsete o cale cu dou muchii, se
adaug costul cii cu dou muchii i se
insereaz suma costurilor celor dou
muchii n tabel

Observaii
Algoritmul lui Floyd se bazeaz pe
utilizarea unei matrice A a distanelor
minime, ale crei valori sunt calculate n
mai multe etape
Iniial:
A[i,j] = cost[i,j], pentru orice ij
A[i,j] = 0, pentru i=j
A[i,j] = , dac nu exist arcul (i,j)

Observaii
Calculul distanelor minime se face n n
iteraii
La iteraia k, A[i,j] va avea ca valoare cea
mai mic distan ntre i i j, pe ci care
nu conin vrfuri numerotate peste k
(exceptnd capetele i i j)
Se utilizeaz formula:
Ak[i,j] = min ( Ak-1[i,j], Ak-1[i,k] + Ak-1[k,j] )

Observaii
Deoarece
Ak[i,k] = Ak-1[i,k] i
Ak[k,j] = Ak-1[k,j]
nicio intrare cu unul din indici egal cu k nu
se modific la iteraia k
Se poate realiza calculul cu o singur
copie a matricei A

AlgoritmFloyd()
{
Pseudocod
algoritmul
lui
pentru toate liniile i execut
pentru toate coloanele j execut
A[i,j] cost[i,j]
pentru toate liniile i execut
A[i,i] 0
pentru k de la 1 la n execut
pentru toate liniile i execut
pentru toate coloanele j execut
dac A[i,k] + A[k,j] < A[i,j] atunci
A[i,j] A[i,k] + A[k,j]
}

Floyd

Observaii
Pentru a pstra cile minime, se utilizeaz
un tablou adiional P, unde P[i,j]
reprezint acel vrf k, care a condus la
distana minim A[i,j]
Dac P[i,j] = 0, atunci arcul (i,j) este calea
minim ntre i i j

Observaii
Pentru a afia vrfurile intermediare aflate
pe calea cea mai scurt ntre i i j, se
poate utiliza algoritmul:
Cale(i,j) {
k P[i,j]
dac (k != 0) atunci {
Cale(i,k)
Scrie nodul k
Cale(k,j) }
}

Concluzii
ntr-un graf ponderat, fiecare muchie are
asociat un numr, numit pondere
Ponderile pot reprezenta distane, costuri,
timpi sau alte mrimi
Arborele minim de acoperire, ntr-un graf
ponderat, minimizeaz ponderile muchiilor
necesare pentru a conecta toate vrfurile

Concluzii
Pentru determinarea arborelui minim de
acoperire al unui graf, putem utiliza o
coad cu prioriti
Problema drumului minim ntr-un graf
neponderat presupune determinarea
numrului minim de muchii dintre dou
vrfuri

Concluzii
Rezolvarea problemei drumului minim, n
cazul grafurilor ponderate, se poate face
utiliznd algoritmul lui Dijkstra
Rezolvarea problemei drumului de lungime
minim din orice vrf nseamn gsirea
costurilor totale ale muchiilor ntre toate
perechile de vrfuri ale unui graf; aceast
problem se rezolv folosind algoritmul lui
Floyd

S-ar putea să vă placă și