4.4 Algoritma Preflow-Push
Algoritma Preflow-Push dapat mencari nilai aliran maksimum dengan aliran-semu pseudo-flow f pada jaringan. Misalkan, jaringan
= , dengan titik dan
busur, sebuah aliran-semu pseudo-flow f merupakan sebuah pengaitan bilangan real non negatif pada busur-busur di
yang memenuhi ,
, ∀ , .
Sebuah aliran-semu pseudo-flow f dikatakan sebuah preflow, jika memenuhi
, −
, ∀ ≠ ,
,
dengan ,
adalah ,
,
, dan ,
adalah ,
,
. Dengan
=
, −
, merupakan excess pada titik . Jelas sebuah preflow f
adalah aliran jika = 0 untuk setiap ≠ , Thulasiraman Swamy, 1992:
411. Misalkan
= , dengan preflow f. Maka = ,
dikatakan jaringan sisa terhadap preflow jika setiap busur
, membangun sebuah
busur ,
jika , , , dan membangun sebuah busur ,
jika , 0. Busur-busur pada jaringan sisa disebut busur sisa. Pada
kasus ini ,
dinamakan busur maju, dan sebaliknya
,
dinamakan
busur balik. dikatakan kapasitas busur sisa
jika, =
− ,
jika busur maju , jika busur balik.
Suatu pelabelan valid pada = , adalah pemetaan bilangan bulat
non negatif ke suatu titik di sedemikian sehingga
= , = 0 dan
+ 1 untuk setiap busur sisa , . Sebuah titik disebut titik aktif jika
≠ , , dan 0 Thulasiraman, 1992: 412. Algoritma Preflow-Push dimulai dengan preflow f yang nilainya sama
dengan kapasitas busur untuk setiap busur yang meninggalkan titik sumber dan bernilai nol untuk yang lainnya. Selanjutnya inisialisasi label dengan pelabelan
valid = , = 0, dan
+ 1 untuk setiap busur sisa , . Algoritma Preflow-Push secara berulang-ulang menggunakan dua operasi dasar,
yaitu Push dan Relabel yang bekerja sebagai berikut.
Push ,
Applicability. is active, ,
and = + 1.
Action. Set =
{ , , } and do the following. 1.
Increase , by if ,
is a forward edge, otherwise decrease , by .
2. Decrease by and increase by .
Note: 0 because both and , are positive.
Relabel
Applicability. is active, and for every ,
, .
Action. Set =
,
{ + 1} Thulasiraman, 1992: 412.
Misalkan titik bukan titik sumber maupun titik tujuan yang aktif 0, maka pilih titik tersebut dan lakukan push dan relabel secara berulang
sebagai berikut. Langkah 1: jika ada busur
, yang admissible
= + 1 , maka lakukan push
= min{ , , }
1 tingkatkan aliran , sebesar jika , busur maju, dan
penurunan aliran , sebesar jika , busur balik,
2 turunkan sebesar dan tingkatkan sebesar , dengan
0.
Langkah 2: jika tidak ada busur ,
yang admissible , maka
lakukan relabel, dengan mengganti dengan label jarak sebesar
= min{ + 1}. Lakukan push dan relabel secara berulang sehingga tidak ada lagi titik yang aktif.
Pendorongan preflow f dari ke meningkatkan aliran ,
dan dengan peningkatan sebesar
= min{ , , }, dan penurunan , dan
dengan nilai yang sama. Setelah dilakukan pendorongan preflow f dari ke , jika
,
= 0
dikatakan jenuh f saturated, selainnya dikatakan tak jenuh
f
unsaturated. Algoritma Preflow-Push akan berhenti ketika tidak ada lagi titik aktif.
4.5 Algoritma Preflow-Push dengan Software GIDEN