dan
bagian pipa dari sistem dan menunjukkan arah minyak dapat mengalir. Label-label pada rusuk
menunjukkan kapasitas bagian pipa. Masalahnya adalah mencari sebuah jalan untuk
memaksimalkan aliran dari dok menujukilang minyak danmenghitung nilai aliran maksimum
tersebut.gambar 1 menyediakan sebuah contoh jaringan transpor(transpor network).
Contoh 8.1.2
Graf pada Gambar 8.1.1. Merupakan sebuah jaringan transpor. Sumbernya adalah verteks
tujuannya adalah verteks . kapasitas rusuk
dan
adalah 2.
Dalam bab ini , jika
dengan
terarah yang tidak melampaui kapasitas rusuk itu. Selain itu diasumsikan bahwa aliran ke dalam
verteks
, yang bukan merupakan sumber ataupun tujuan, sama dengan aliran keluardari
sebuah aliran
di
Sehingga:
a.
b. Untuk setiap verteks , yang bukan merupakan sumber atau pun tujuan.
(8.1.1)
.]
Kita sebut
Sifat yang dinyatakan dalam persamaan (8.1.1) disebut konservasi aliran (conservation
of flow). Dalam contoh pemompaan minyak pada Gambar 8.1.1, konservasi aliran berarti
minyak tidak digunakan atau dipasok pada stasiun pemompaan
dan
Contoh 8.1.4
Penandaan
mendefinisikan sebuah aliran untuk jaringan pada gambar 8.1.1. Sebagai contoh, aliran ke dalam
verteks .
Pada gambar 8.1.2 kita telah menggambar ulang jaringan dari Gambar 8.1.1 untuk
menunjukkan aliran pada Contoh 8.1.4. Sebuah rusuk dibeli
aliran di
adalah
jika kapasitas
adalah
dan
keduannya nilai 5. Teorema berikut menunjukkan aliran keluar dari sumber selalu sama
dengan aliran ke dalam tujuan.
rusuk
rusuk
dilabeli
mengindikasikan kapasitas
untuk
dan aliran
Teorema 8.1.5
Jika diketahui sebuah aliran
Pembuktian. Misalkan
dengan
sama dengan
karena
untuk semua
jika
adalah nilai maksimum. Pada bagian selanjutnya kita akan memberikan sebuah
algoritma yang memecahkan masalah ini dengan efisien. Kita akan mengakhiri bagian ini dengan
memberikan contoh-contoh tambahan.
Contoh 8.1.8 Sebuah Jaringan Pemompaan
Gambar 8.1.3 mewakili sebuah jaringan pemompaan air untuk dua kota,
dari tiga sumur,
dan
, yang dikirim
Gambar 8. 1 .3 Sebuah jaringan pemompaan. Air untuk kota dan dikirim dari sumur w1, w2,
dan w3. Kapasitas kapasitasnya ditunjukkan pada rusuk rusuk.
Verteks verteks
dan
Gambar 8.1.4 jaringan pada gambar 8.1.3 dengan sebuah sumber dan tujuan yang ditandai.
(15 menit)
B ke C
(30 menit)
A ke C
(30 menit)
(3000 kendaraan)
B ke C
(2000 kendaraan)
A ke C
(4000 kendaraan)
Gambarkanlah aliran lalu lintas dari A ke C selama periode 6:00 hingga 7:00 malam sebagai
sebuah jaringan.
Sebuah verteks akan mewakili sebuah kota pada saat tertentu (lihat Gambar 8.1.5).
Sebuah rusuk menghubungkan , t1 ke ,t2 jika kita dapat meninggalkan kota
di kota
pada t1 sampai
pada t2. Kapasitas sebuah rusuk merupakan kapasitas dari rute. Rusuk rusuk dari
,t1 ke
,t2 dan
Gambar 8.1.5 Sebuah jaringan yang mewakili aliran lalu lintas dari kota
ke kota
selama
adalah
aliran dengan nilai maksimum. Secara umum, akan terdapat beberapa aliran yang mempunyai
nilai maksimum yang sama. Pada subbab ini kita memberikan sebuah algoritma untuk mencari
sebuah aliran maksimal. Gagasan dasarnya adalah sederhana mulai dengan suatu aliran awal dan
menaikkan secara iteratif nilai dari aliran sampai tidak ada peningkatan lagi. Aliran yang
dihasilkan selanjutnya akan merupakan sebuah aliran maksimal.
Kita dapat mengambil aliran awal sebagai salah satu aliran pada mana aliran di masing
masing rusuk adalah nol. Untuk menaikkan nilai aliran yang diketahui, kita harus mencarisebuah
lintasan dari ssumber ke tujuan dan menaikkan aliran sepanjang lintasan ini.
Pada saat ini sangat membantu untuk memperkenalkan beberapa terminologi. Sepanjang
subbab ini,
ke
, tujuan
mengacu pada
ini dengan referensi pada graf tak berarah dasar). Jika sebuah rusuk
ke
, dan kapasitas
di
diarahkan dari
terorientasi dengan tepat dan aliran dalam setiap rusuk kurang dari kapasitas rusuk, maka
mungkin untuk menaikkan nilai aliran.
Gambar 8.2.1 Rusuk rusuk terorientasi dengan tepat dan tak tepat. Rusuk (
terorientasi dengan tepat karena rusuk tersebut terorientasi dalam arah ke . Rusuk ( ,
terorientasi tidak tepat karena tidak terorientasi dalam arah ke .
)
)
Contoh 8.2.1
Perhatikan lintasan dari
ke
terorientasi dengan
tepat. Nilai aliran dalam jaringan ini dapat dinaikkan dengan 1, seperti yang ditunjukkan dalam
Gambar 8.2.3.
Mungkin juga untuk menaikkan aliran dalam lintasan-lintasan tertentu dari sumber ke tujuan
tempat kita mempunyai rusuk-rusuk yang terorientasi dengan tepat dan tak tepat. Misalkan
sebuah lintasan dari
ke
dan misalkan
sebuah verteks di
yang bukan
ataupun (lihat
Gambar 8.2.4).
Gambar 8.2.4 Empat orientasi rusuk-rusuk yang mungkin yang insiden pada
Terdapat empat kemungkinan untuk orientasi rusuk-rusuk
dan
Pada kasus (a), kedua rusuk terorientasi dengan tepat. Pada kasus ini, jika kita menaikkan aliran
dalam setiap rusuk dengan , aliran ke dalam
dengan
dengan
. Dalam setiap
kasus, perlakuan rusuk yang dihasilkan memberikan sebuah aliran. Tentu saja, untuk
menjalankan pengubahan ini, kita harus mempunyai aliran kurang dari kapasitas dalam sebuah
rusuk yang terorientasi dengan tepat dan sebuah aliran tak nol dalam sebuah rusuk yang
terorientasi tak tepat.
Contoh 8.2.2
Perhatikan lintasan dari
ke
dan
dan
ke
di
di ,
Misalkan
dengan
di , dan
di . Definisikan
Pembuktian. (lihat Gambar 8.2.2, 8.2.3, 8.2.5, dan 8.2.6.) Argumen bahwa
sebuah aliran diberikan tepat sebelum Contoh 8.2.2. Oleh karena rusuk
* merupakan
di
dinaikkan
, tujuan , kapasitas
, verteks
Keluaran:
procedure aliran_maks
// label
do
2.
3. while true do
4. begin
// pindahkan semua label
5. for
to
do
6. begin
7.
8. val (
9. end
// label a
10. pendahulu
11.
// U merupakan himpunan verteks berlabel tak teruji
12. U
// lanjutkan hingga
13. while
terlabeli
do
14. begin
15. jika U = then // aliran maksimal
16. return
17. pilih
di U
18.
19.
20. for masing-masing rusuk
21. if
then
dengan
do
22. begin
23. pendahulu
24.
min
25.
26. end
27. for setiap rusuk
28. if
dengan
do
then
29. begin
30.
31.
min
32.
33. end
34. end
// carilah lintasan
dari
35.
36.
37. While
do
38. begin
39.
40.
41. end
42.
43.
44. for i
to
do
45. begin
46.
47. if terorientasi dengan tepat di
48.
49. else
50.
51. end
then
52. end
end aliran_maks
Sebuah pembuktian bahwa Algoritma 8.2.4 berakhir diberikan sebagai latihan (Latihan
19). Jika kapasitas-kapasitas diperbolehkan sebagai bilangan rasional tak negatif, algoritma
tersebut juga berakhir, akan tetapi, jika kapasitas real tak negatif diperbolehkan dan kita
mengizinkan rusuk-rusuk pada baris 20 untuk diuji dalam sembarang urutan, algoritma tersebut
tidak akan berakhir (lihat [Ford, halaman 21-22]).
Algoritma 8.2.4 seringkali diacu sebagai prosedur pelabelan (labelling procedure).
Kita akan mengilustrasikan algoritma tersebut dengan dua contoh.
Contoh 8.2.5
Dalam pembahasan ini, jika verteks
menunjukkan label
memenuhi
dan
kita
dalam setiap rusuk (lihat Gambar 8.2.7). Selanjutnya, pada baris 5-9 kita menetapkan semua
label sebagai
sebagai
. Pada
dilabeli (
Oleh karena itu z tidak dilabeli dan Utidak kosong, kita beralih ke baris 17, disinni kita memilih
verteks a di U dan mwmindahkannya dari Upada baris 18. Pada saat ini, U
pada
karena baik
kita mempunyai
. Kita menetapkan
dan
sebagai
karena
dan
pada
sebagai
tidak kosong, kita bergerak ke baris 17, di sini kita memilih sebuah verteks di
memilih b. Kita memindahkan
dari
.andaikan kita
karena
dan
Selanjutnya kita kembali ada puncak loop while (baris 13). Karena
tidak kosong, kita bergerak ke baris 17, di sini kita memilih sebuah verteks di
memilih
Kita memindahkan
dari
Andaikan kita
Kemudian kita kembali pada puncak loop while (baris 13). Karena
kita meloncat pada baris 35. Pada baris 35-42, dengan mengikuti pendahulu dari , menemukan
lintasan
dari
terorientasi
dengan
dengan tepat, pada baris 48 kita menaikkan aliran dalam setiap rusuk
untuk
kedua.
Selanjtnya kita kembali pada puncak loop while (baris 3). Kemudian pada baris 5-9 kta
menetapkan semua label null. Kemudian pada baris 10 dan 11 kita memberi label verteks
sebagai
(baris 13).
Karena
dan
pada
dari
tidak kosong, kita bergerak ke baris 17, dimana kita memilih sebuh verteks
. Kita memindahkan
Karena
dari
. Andaikan kita
Kemudian kita kembali pada puncak loop while (baris 13). Karena
tidak kosong, kita bergerak ke baris 17, yang disini kita memilih sebuah verteks di
kita memilh . Kita memindahkan
verteks sebagai
sebagai
sehingga
Selanjutnya kita kembali pada puncak loop while (baris 13). Karena
memilih
pada baris
dari
Kita tambahkan
. Andaikan
sehingga
dengan
Anda harus mengecek bahwa iterasi algoritma berikutnya menghasilkan pelabelan yang
ditunjukkan pada Gambar 8.2.9. Peningkatan aliran dengan
Selanjutnya kita kembali pada puncak loop while (baris 3). Kemudian pada baris 5-9 kita
menetapkan semua label sebagai null. Kemudian pada baris 10 dan 11 kita melabeli verteks
sebagai
ketiga.
Karena
memilih verteks di
dan
pada
sebagai
ke
sebagai
sehingga
Selanjutnya kita kembali pada puncak loop while (baris 13). Karena
U tidak kosong, kita bergerak ke baris 17, maka kita memilih sebuah verteks di . Andaikan kita
memilih
. Kita memindahkan
Karena
dari
tidak kosong, kita bergerak ke baris 17, yang disini kita memilih sebuah verteks di
kita memilih . Kita memindahkan
dan
karena
dari
. Andaikan
Contoh 8.2.6
Gantilah aliran nol ada baris 1 dan 2 dari Algoritma 8.2.4 dengan aliran pada Gambar 8.2.11
kemudian carilah sebuah aliran maksimal.
Setelan menginisialisasi aliran yang diberikan, kita bergerak ke baris 5-9, disini kita
menetapkan semua label sebagai null. Kemudian, pada baris 10 dan 11 kita melabeli verteks a
sebagai (-, ) (lihat Gambar 8.2.11). pada baris 12 kita menetapkan U={a}. Selanjutnya kita
memasuki loop while (baris 13).
verteks
di
verteks
sebagai
pada
sebagai
Kita menambahkan
sehingga
Selanjutnya kita kembali pada puncak loop while (baris 13).oleh karena
dan
dan
tidak dilabeli
tidak kosong, kita bergerak ke baris 17, dimana kita memilih sebuah verteks di
dan
dari
Oleh karena
dilabeli
karena
Kemudian kita kembali pada puncak loop while (baris 13). Kita segera melabeli
(lihat Gambar
Rusuk-rusuk
dan
pada
pada lintasan
lintasan
dengan
1.
dengan 1. Aliran
tersebut maksimal.
terorientasi
berada di . Himpunan
dari rusuk-rusuk
). Maka sumber
, dengan
berada di P dan
dan
, disebut
dan tujuan
Kapasitas rusuk
adalah
merupakan sebuah
Definisi 8.3.1
Sebuah pemotongan
di
Contoh 8.3.2
, maka
dan
Gambar 8.3.1 Sebuah pemotongan dalam sebuah jaringan. Garis putus-putus membagi verteksverteks menjadi himpunan
dan
.
Contoh 8.3.3
Gambar 8.2.10 menunjukkan pelabelan pada akhir Algoritma 8.2.4 untuk sebuah jaringan
tertentu. Jika kita misalkan
dapatkan pemotongan yang ditunjukkan pada Gambar 8.3.2. Selanjutnya kita definisikan
kapasitas sebuah pemotongan.
Definisi 8.3.4
adalah bilangan
Kapasitas pemotongan
Contoh 8.3.5
Kapasitas pemotongan pada gambar 8.3.1 adalah
Contoh 8.3.6
Kapasitas pemotongan pada gambar 8.3.2 adalah
Teorema berikut menunjukkan kapasitas sembarang pemotongan selalulebih dari atau sama
dengan nilai alirannya.
Teorema 8.3.7
Misalkan
maka kapasitas
dan misalkan
(8.3.1)
terhadap
semua
Sehingga
Contoh 8.3.8
Pada Gambar 8.3.1, nilai aliran 5 kurang dari kapasitas pemotongan 8.
Pemotongan minimal (minimal cut) adalah pemotongan yang mempunyai kapasitas minimum.
sebuah aliran di
sebuah pemotongan di
dan misalkan
. Jika kesamaan
berlaku dalam (8.3.1), maka aliran maksimal dan pemotongan minimal. Lagipula, kesamaan
berlaku dalam (8.3.1) jika dan hanya jika
(a)
untuk
(b)
untuk
dan
Kita dapat menggunakan Teorema 8.3.9 untuk menunjukkan bahwa Algoritma 8.3.4
menghasilkan sebuah aliran maksimal.
TEOREMA 8.3.11
Pada akhirnya, Algoritma 8.2.4 menghasilkan sebuah aliran maksimal. Lagi pula, jika
(demikian juga merupakan himpunan verteks berlabel (demikian juga, tak berlabel) pada
akhir Algoritma 8.2.4, pemotongan
Pembuktian. Misalkan
minimal.
. Oleh karena
pada akhir
dilabeli, kita
pasti mempunyai
Sebaliknya, kita telah melabeli pada baris 30 dan 31. Menurut teorema 8.3.9, aliran pada akhir
Algoritma 8.2.4 maksimal dan pemotongan
minimal.