Download as pdf or txt
Download as pdf or txt
You are on page 1of 19

GRAFET

Problemi i Rrjedhës Maksimum


Programi i studimit: Bachelor Informatikë 2

Lektor: Eva Noka

2022-2023
Kuptimi i Rrjedhës
Një problem praktik: Shefi i një kompanie do të vendoset në një zyrë të re, ku do të ketë dhe një
kompjuter të ri. Ai do të përdorë rrjetin e brendshëm për të transferuar arkivën e tij nga kompjuteri i
vjetër ! në kompjuterin e ri ". Rjeti është paraqitur me digrafin e mëposhtëm, ku kulmet përfaqësojnë
kompjuterat me anë të të cilëve do të kryhet transferimi i informacionit, ndërsa harqet përfaqësojnë
transferimet e mundshme nga njëri kompjuter tek tjetri. Përbri çdo harku është dhënë sasia
maksimale e informacionit që ai mund të transferojë në një sekondë (në Mb/s).
6 Problemi: Cila është sasia maksimale e informacionit që
1 3 10
8
3 mund të transferohet në një sekondë nga kompjuteri ! në
s kompjuterin " ?
2 6 t
1 Për zgjidhjen e problemit duhet të kemi parasysh këto
7 4 kushte:
2 4
4
• Sasia e informacionit që kalon nëpër çdo hark (për
6, 6 sekondë) nuk mund të tejkalojë kapacitetin e harkut.
8, 6+2 1 3 10, 6
3 • Kulmi ! është burimi i informacionit dhe gjithë sasia e
s 2, 2 6 t informacionit që niset nga ! duhet të përfundojë në ".
1 • Pra, kulmet 1, 2, 3, 4 shërbejnë vetëm për të transferuar
7 4, 2
2 4, 2
4 informacionin, as nuk mbajnë, as nuk japin informacion.
Kuptimi i Rrjedhës
6, 6 Formalizojmë problemin:
8, 8
1 3 10, 6 Jepet digrafi ( = (+, ,) dhe kapacitetet .!" , për çdo hark (/, 0) ∈
3
,, me anë të funksionit .: , → 4#.
s 2, 2 6 t Funksioni 5: 6 → 7, me vlera 5$% për çdo hark (8, 9), quhet
1
7 4, 2 rrjedhë në digrafin :.
2 4, 2
4 Në qoftë se në digrafin ( është përcaktuar rrjedha 5, atëherë për
çdo kulm 8 ∈ ;:
6, 6
1 3
8, 8
3
10, 6+1 < / = = >!" − = >"!
(!, ")∈*(!) (",!)∈+(!)
s 2, 2 6 t
1, 1 quhet divergjencë në kulmin /.
7, 3
2 4
4, 2+2 < / > 0 ⇒ / quhet kulm burim;
4, 2+2 < / = 0 ⇒ / quhet kulm tranzit;
< / < 0 ⇒ / quhet kulm derdhje.
(6, 6)
(8, 8) 1 3 (10, 7) Në të gjitha problemet e rrjedhave supozohet se: ∑!∈, < / = 0.
Për shembullin konkret, kemi të dhënë digrafin, funksionin E të
s (2, 2) ) (3
,0 (6, 0) t kapaciteteve, kulmin burim ! dhe kulmin derdhje ". Kulmet e
,1 )
(1 tjerë janë tranzit.
(7, 3)
2 4 (4, 4) Na duhet të përcaktojmë një rrjedhë 5 që plotëson kushtet e
(4, 4)
dhëna dhe të ketë vlerë maksimum.
Problemi i Rrjedhës Maksimum
Në digrafin : = (;, 6) me burim !, derdhje " dhe kapacitete E: 6 → 7#, një rrjedhë 5 është e
lejueshme, në qoftë se plotëson kushtet:
0 ≤ >!" ≤ .!" ∀ (/, 0) ∈ , (kushti i kufizueshmërisë)

U≥0 /=W
= >!" − = >"! = T 0 / ≠ W, Y (kushti i balancimit të rrjedhës)
(!, ")∈*(!) ",! ∈+ ! −U /=Y
a = b(!) do të quhet vlerë e rrjedhës 5.

Problemi i rrjedhës maksimum:


max U
me kushte:
0 ≤ >!" ≤ .!" ∀ (/, 0) ∈ ,

U≥0 /=W
= >!" − = >"! = T 0 / ≠ W, Y
(!, ")∈*(!) ",! ∈+ ! −U /=Y
Problemi i Rrjedhës Maksimum
(6, 6)
(8, 8) 1 3 (10, 7) Në shembullin në shqyrtim, kemi përcaktuar një rrjedhë të
lejueshme:
s (2, 2) ) (3
,0 (6, 0) t 1. Për çdo hark plotësohet kushti i kufizueshmërisë.
,1 )
(1
(7, 3) 2. Divergjencat e kulmeve:
2 4 (4, 4)
(4, 4) < W = 8 + 3 − 0 = 11
< Y = 0 − 7 + 4 = −11
< 1 = 2+0+6 −8=0
< 2 = 4 + 1 − (3 + 2) = 0
< 3 = 7 − (6 + 1 + 0) = 0
< 4 = 4 + 0 − (4 + 0) = 0
Vlera e rrjedhës është a = b ! = 11.
A është kjo një rrjedhë maksimum?
!-" prerja dhe kapaciteti i saj
(6, 6) Kemi digrafin ( = (+, ,) me burim ! dhe derdhje " dhe
1 3 (10, 7)
(8, 8) funksionin e kapaciteteve .: , → 4#.
s (2, 2) ) (3
,0 (6, 0) t Le të jetë h ⊂ + (e përpiktë) ku W ∈ h dhe Y ∉ h. Shënojmë k = +\S.
,1 )
(1 Bashkësia e harqeve që kanë njërin skaj në h dhe skajin tjetër në k,
(7, 3)
2 (4, 4)
4 (4, 4) shënohet n = [h, k] dhe quhet !-" prerje në (.
n# = /, 0 : / ∈ h, 0 ∈ k
h = W, 2, 4 k = Y, 1, 3 n- = { /, 0 : / ∈ k, 0 ∈ h
n# = W, 1 , 2, 3 , 4, 3 , (4, Y) Nëse > është një rrjedhë e lejueshme në (, rrjedhë përmes një
n- = 1, 2 , 1, 4 !-" prerjeje t është:
> n = 8+1+0+4 − 2+0 =
> n = = >!" − = >!"
= 11 = U > .
(!,")∈.! (!,")∈."
. n = 8 + 1 + 6 + 4 = 19 Ka vend barazimi: 5 t = a(5), për çdo W − Y prerje n.
Kapacitet i një !-" prerjeje t quhet:

. n = = .!"
(!,")∈.!
Problemi: Gjetja e prerjes me kapacitet minimum.
Teorema rrjedhë maksimum-prerje minimum
Pohim 5.1. (Dualiteti i dobët) Për çdo rrjedhë të lejueshme > dhe çdo W-Y prerje n, ka vend mosbarazimi:
U > ≤ .(n)
Vërtetim. Le të jetë > një rrjedhë e lejueshme dhe n një W-Y prerje në (.

U > => n = = >!" − = >!" ≤ = >!" ≤ = .!" = .(n)


(!,")∈.! !," ∈." !," ∈.! !," ∈.!
Rrjedhim 5.1. Në qoftë se për një rrjedhë të lejueshme > ∗ dhe një W-Y prerje n∗ kemi: U > ∗ = .(n∗),
atëherë > ∗ është rrjedhë maksimum dhe n∗ është prerje me kapacitet minimum.
!-" shtegu rritës: Le të jetë u, një W-Y shteg në digrafin ( dhe > një rrejdhë e lejueshme. Shënojmë:
v# - bashkësinë e harqeve të v që kanë orientimin sipas përparimit të shtegut (harqet e drejtë).
v- - bashkësinë e harqeve të v që kanë orientim të kundërt me përparimin e shtegut (harqet e kundërt).
u është një !-" shteg rritës në lidhje me rrjedhën 5, në qoftë se:
për çdo hark (8, 9) ∈ u#, kemi w$% = E$% − 5$% > x dhe
për çdo hark (8, 9) ∈ u-, kemi w$% = 5$% > x.
(6, 2) (5, 5) (8, 5) (9, 0) (6, 4) (7, 4)
s u v z i j t
4 5 3 9 4 3
Teorema rrjedhë maksimum-prerje minimum
Lemë 5.1. Në qoftë se në digrafin ( ka një W-Y shteg rritës v në lidhje me rrjedhë të lejueshme >, atëherë
ekziston një rrjedhë e lejueshme >′, e tillë që U > 0 > U(>).
Vërtetim. Le të jetë v një W-Y shteg rritës në lidhje me rrjedhën e lejueshme >. Shënojmë
z = min z!" : (/, 0) ∈ v . Meqë z!" > 0, ∀ /, 0 ∈ v ⇒ z > 0. Përcaktojmë një rrjedhë >′ të tillë që:
>!" + z për (/, 0) ∈ v#
0
>!" = {>!" − z për (/, 0) ∈ v-
>!" për (/, 0) ∉ v
Tregojmë së pari që > 0 është rrjedhë e lejueshme.
0
1. Për çdo hark (/, 0) ∈ v# kemi 0 ≤ >!" = >!" + z ≤ >!" + z!" = >!" + .!" − >!" = .!" .
0
Për çdo hark (/, 0) ∈ v- kemi .!" ≥ >!" = >!" − z ≥ >!" − z!" = >!" − >!" = 0.
0
Për çdo hark (/, 0) ∉ v kemi 0 ≤ >!" = >!" ≤ .!" .
2. Kushti i balancimit të rrjedhës mjafton të verifikohet në kulmet e shtegut v, pasi për kulmet e tjera
vlerat e rrjedhës si në harqet dalës, edhe në harqet hyrës nuk kanë ndryshuar.
(6, 2) (5, 5) (8, 5) (9, 0) (6, 4) (7, 4)
s u v z i j t
4 5 3 9 4 3
Teorema rrjedhë maksimum-prerje minimum
Për çdo kulm të ndërmjetëm U në shtegun v, kanë ndryshuar vlerat e rrjedhës vetëm në dy harqe me
njërin skaj në U. Dallojmë këto raste:
a) b) c) d)
vlera e rrjedhës: +" +" +" −" −" +" −" −"
v v v v
divergjenca: (−) (+) (−) (−) (+) (+) (+) (−)
rezultati: −" + " = 0 −" + " = 0 −" + " = 0 −" + " = 0

Për kulmet ! dhe ", vlera e rrjedhës ka ndryshuar vetëm në një hark me skaj në ! ose ". Kemi dy raste
për secilin:
a) b) a) b)
vlera e rrjedhës: +" −" +" −"
s s t t
divergjenca: (+) (−) (−) (+)
rezultati: ( ! ) = (()) + " ( ! ) = (()) + " (! * = ( * − " (! * = ( * − "

Pra, # 0 është rrjedhë e lejueshme, vlera e së cilës është $ # 0 = & 0 ! = & ! + ( = $ # + (. ∎


44 kulme
105 harqe
Teorema rrjedhë maksimum-prerje minimum
Teoremë 5.1. (Ford-Fulkerson) Në çdo digraf *, vlera e rrjedhës maksimum është e barabartë me
kapacitetin e prerjes minimum.
Vërtetim. Le të jetë # një rrjedhë maksimum. Nga Lema 5.1, nuk ka një !-" shteg rritës në lidhje me #,
sepse përndryshe do të ekzistonte një rrjedhë # 0 me vlerë $ # 0 > $(#)(?!).
Shënojmë . ⊂ 0 që përmban burimin ! dhe të gjithë kulmet e arritshëm prej ! me shtigje rritës. 1 = 0\S.
Është e qartë që " ∉ .. Do tregojmë që !-" prerja 5 = ., 1 ka kapacitet 7 5 = $(#).
+ , • ∀ 9, : ∈ 5#, kemi 7!" = #!" . Nëse 7!" > #!" ⇒ kulmi : do
i !#$ = ##$ të ishte i arritshëm prej ! me shteg rritës ⇒ : ∈ . (?!).
• ∀ 7, $ ∈ 5-, kemi #12 = 0. Nëse #12 > 0 ⇒ kulmi 7 do
s j t të ishte i arritshëm prej ! me shteg rritës ⇒ 7 ∈ . (?!).
v
#%& = 0
Duke ditur që $ # = #(5), marrim:
u $ # =# 5 = > #!" − > #!"
(!,")∈.! !," ∈."
Në shumën e parë, për çdo term kemi #!" = 7!" , ndërsa në shumën e dytë, për çdo term kemi #!" = 0,
prej nga rrjedh:
$ # =# 5 = > 7!" = 7 5 .
(!,")∈.!
Nga rrjedhimi 5.1 kemi që prerja 5 është me kapacitet minimum. ∎
Algoritmi Ford-Fulkerson
Algoritmi Ford-Fulkerson gjen rrjedhën maksimum dhe prerjen me kapacitet minimum.
• Niset nga një rrjedhë fillestare e lejueshme. Nëse nuk ka një të tillë, atëherë rrjedha # = 0 shërben si
rrjedhë fillestare.
• Në çdo iteracion gjen një !-" shteg rritës në lidhje me rrjedhën korrente.
Identifikimi i një !-" shtegu rritës kryhet paralelisht me llogaritjen e ( sipas një procesi tabelimesh.
Çdo kulm 9 që vizitohet merr dy atribute:
+ nëse 9 është arritur me hark të drejtë
- BCDE 9 (paraardhësi i kulmi 9) i shoqëruar me indeks
− nëse 9 është arritur me hark të kundërt
- (! jep vlerën korrente të (; (3 = ∞; (4 jep vlerën e saktë të (.
• Niset me tabelimin e kulmit !: − ∞
Supozojmë se nga kulmi 9 vizitojmë direkt kulmin ::
- Nëse ecim me harkun 9, : ⇒ BCDE : = 9 #, (" = min (! , 7!" − #!" tabela e :: ." "#

- Nëse ecim me harkun :, 9 ⇒ BCDE : = 9 -, (" = min (! , #"! tabela e :: . $ "#


• Procesi i tabelimeve ndalon në dy raste:
- Kur tabelohet derdhja "; në këtë rast, duke u nisur nga ", ndiqen paraardhësit dhe identifikohet !-"
shtegu rritës. ε = (4 . Rinovohet rrjedha sipas Lemës 5.1.
- Kur nuk arrihet të tabelohet derdhja "; në këtë rast, rrjedha korrente është maksimum dhe preja 5 e
përcaktuar sipas Teoremës 5.1. është prerja me kapacitet minimum.
Algoritmi Ford-Fulkerson
Algoritëm Ford-Fulkerson
Input: Një digraf / = 0, 2 , një kulm burim ) ∈ 0, një kulm derdhje * ∈ 0,
një funksion 4: 2 → 7 " dhe një rrjedhë e lejueshme 8.
Output: Një rrjedhë 8 dhe një nënbashkësi kulmesh +.

RRJEDHË_MAKSIMUM(9, :, ;, <, =)
1. në qoftë se nuk kemi të dhënë një rrjedhë 8
2. për çdo hark (., >) ∈ 2
3. 8%# = 0
4. përsërit
5. )-* SHTEG_RRITËS(/, ), *, 4, 8)
6. në qoftë se Output ()-* SHTEG_RRITËS(/, ), *, 4, 8))
7. është (?, "& )
8. për çdo hark (., >) ∈ ?
9. në qoftë se ., > ∈ ?"
10. 8%# = 8%# + "&
11. në qoftë se ., > ∈ ?$
12. 8%# = 8%# − "&
13. përndryshe
14. Output (8-rrjedhë maksimum, +)
Algoritmi Ford-Fulkerson
:-! SHTEG_RRITËS(%, ', (, ), *)
1. për çdo kulm $ ∈ &\{)} 20. përndryshe
2. +,-.($) = 0122 21. për çdo kulm K ∈ L(8) dhe K ∉ 5
3. 3& = 0122 22. në qoftë se >#$ < @#$
4. +,-.()) = 0122 23. +,-. K = 8 +
5. 3' = ∞ 24. 3$ = min 3# , @#$ − >#$
6. 2 = {)} 25. 2=2∪ K
7. 5 = {)} 26. 5=5∪ K
8. sa herë 2 ≠ ∅ 27. për çdo kulm K ∈ R(8) dhe K ∉ 5
9. 8 = 95:;(2) 28. në qoftë se >$# > 0
10. në qoftë se < ∈ =(8) dhe >#( < @#( 29. +,-. K = 8 −
11. +,-. < = 8 + 30. 3$ = min 3# , >$#
12. 3( = min 3# , @#( − >#( 31. 2=2∪ K
13. duke ndjekur tabelat gjej G: +-, shteg rritës 32. 5=5∪ K
14. Output (G, 3( ) 33. Output (5)
15. në qoftë se < ∈ H(8) dhe >(# > 0
16. +,-. < = 8 −
17. 3( = min 3# , >(#
18. duke ndjekur tabelat gjej G: +-, shteg rritës
19. Output (G, 3( )
Zbatim i Algoritmit Ford-Fulkerson
Është dhënë digrafi * = (0, ^) i paraqitur në figurë,
(11, 2) (8, 8) (12, 2)
s 1 4 6 me burim ! e derdhje ".
(3, 3) (6, 6) Për çdo hark (9, :) ∈ ^ janë dhënë (7!" , #!" ),
(15, 2)
(6, 3) (2, 0) (4, 2) (6, 2) përkatësisht kapaciteti dhe rrjedha në harkun (9, :).
(2, 2)
(8, 6) Të zbatohet Algoritmi Ford-Fulkerson për gjetjen e
2 3 5 t rrjedhës maksimum dhe prerjes me kapacitet
(6, 1) (10, 10) (6, 4)
minimum.

Verifikojmë nëse rrjedha e dhënë është e lejueshme:


1. Kushti i kufizueshmërisë plotësohet për çdo hark, sepse për çdo çift (7!" , #!" ) kemi 0 ≤ #!" ≤ 7!" .
2. Divergjencat e kulmeve:
& ! = 2+3+3 −2=6 & 4 = 6 + 2 + 2 − (8 + 2) = 0
& " = 0 − 4 + 2 = −6 & 5 = 6 + 2 + 4 − (10 + 2) = 0
& 1 = 0 + 8 − (2 + 6) = 0 & 6 =2−2=0
& 2 = 2+1 −3=0 Rrjedha e dhënë është e lejueshme me vlerë:
& 3 = 10 − (1 + 3 + 0 + 6) = 0 $ # =6
Zbatim i Algoritmit Ford-Fulkerson
− ∞ +) 9 − ∞ +) 7 5) 2 4) 2
(11, 2) (8, 8) (11, 4) (8, 8) (12, 2)
s 1 4
(12, 2)
6 s 1 4 6
(6, 6) (3, 3) (6, 4)
(3, 3)
(15, 2) (6, 3) (2, 0) (4, 2) (6, 2) (15, 2)
(6, 3) (2, 0) (4, 2) (6, 2)
(2, 2) (2, 2)
(8, 6) (8, 6)
2 3 5 t 2 3 5 t
(6, 1) (10, 10) (6, 4) (6, 1) (10, 10) (6, 6)
1* 6 5) 3 1* 4 6) 3

Hapi 1. _: !, 1, 5, "; ε = 2 Hapi 2. _: !, 1, 5, 4, 6, "; ε = 2

− ∞ +) 5 5* 2 4) 2 − ∞ +) 3 3* 2 4) 2
(11, 6) (8, 8) (12, 4) (11, 8) (8, 8) (12, 6)
s 1 4 6 s 1 4 6
(3, 3) (6, 2) (3, 3) (6, 0)
(2, 0) (6, 2) (15, 4) (2, 0) (6, 0) (15, 6)
(6, 3) (4, 4) (6, 3) (4, 4)
(2, 2) (2, 2)
(8, 6) (8, 6)
2 3 5 t 2 3 5 t
(6, 1) (10, 10) (6, 6) (6, 1) (10, 10) (6, 6)
1* 2 6) 3 1) 2 6) 3

Hapi 3. _: !, 1, 5, 4, 6, "; ε = 2 Hapi 4. _: !, 1, 3, 4, 6, "; ε = 2


Zbatim i Algoritmit Ford-Fulkerson
− ∞ +) 1 3* 3 4) 3 − ∞ +) 1 3* 1 4) 1
(11, 10) (8, 8) (12, 8) (11, 10) (8, 8) (12, 11)
s 1 4 6 s 1 4 6
(3, 3) (6, 0) (3, 3) (6, 0)
(6, 3) (2, 2) (4, 4) (6, 0) (15, 8) (6, 6) (2, 2) (4, 4) (6, 0) (15, 11)
(2, 2) (2, 2)
(8, 4) (8, 1)
2 3 5 t 2 3 5 t
(6, 1) (10, 10) (6, 6) (6, 4) (10, 10) (6, 6)
+) 3 2) 3 6) 8 +* 2 2) 2 6) 9

Hapi 5. _: !, 2, 3, 4, 6, "; ε = 3 Hapi 6. _: !, 2, 3, 4, 6, "; ε = 1

− ∞ +) 1
(11, 10) (8, 8) (12, 12)
s 1 4 6
(3, 3) (6, 0) Rrjedha është maksimum me vlerë $ # ∗ = 18.
(15, 12)
(6, 6) (2, 2) (4, 4) (6, 0) Përcaktojmë prerjen minimum:
(2, 1)
(8, 0) . = !, 1, 2, 3 1 = 4, 5, 6, "
2 3 5 t
(6, 5) (10, 10) (6, 6)
+* 1 2) 1

Hapi 7. Nuk ka !-" shteg rritës


Analiza e Algoritmit Ford-Fulkerson
Teoremë. Në qoftë se kapacitetet e harqeve janë numra të plotë, atëherë ekziston një rrjedhë maksimum
# ∗ me vlera të plota për çdo hark.
• Zbatojmë Algoritmin Ford-Fulkerson nisur nga # = 0.
• Vlerat e rrjedhës për çdo hark ndryshojnë me vlera të plota ((4 ).
• Rrjedha maksimum që përftohet është me vlera të plota për çdo hark.
Pohim: Në qoftë se kapacitetet e harqeve janë numra të plotë, atëherë algoritmi Ford-Fulkerson kryen të
shumtën (b − 1)c iteracione (c = max {7!" , (9, :) ∈ ^}).
• Në çdo iteracion vlera e rrjedhës rritet me të paktën 1. ((4 ≥ 1)
• h i∗ ≤ j k∗ ≤ (l − m)n (vlera maksimale e mundshme e kapacitetit të prerjes [!, 0 − !])
• Numri i iteracioneve do të jetë < ln.

Numri i veprimeve për gjetjen e një !-" shtegu rritës është r s .

Kompleksiteti: r(lsn) (për vlera të plota të kapaciteteve).


Kohë jo polinomiale, sepse varet nga c.
Analiza e Algoritmit Ford-Fulkerson
Shembull me rastin më të keq.

It. 0 1 100 It. 2 (100, 1) 1 (100, 0) (100, 2) 1 (100, 0)


100

s 1 t s (1, 1) t s (1, 1) t
100 100 (100, 0) (100, 1) (100, 0) (100, 2)
2 2 2

It. 1 1 (100, 1) 1 (100, 1) • • • • • •


100 100

s 1 t s (1, 0) t 1
(100, 100) (100, 100)
100 100 (100, 1) (100, 1)
2 2 s (1, 0) t
It. 3
(100, 1) 1 (100, 0) (100, 1) 1 (100, 0) (100, 100) 2 (100, 100)

s (1, 1) t s (1, 0) t
(100, 0) (100, 1) (100, 0) (100, 1)
200 iteracione !
2 2

You might also like