Matematika Diskrit Matematika Diskrit (1) Matematika Diskrit (1)
BAB 8
MODEL-MODEL JARINGAN DAN JARINGAN-JARINGAN PETRI
8.1 MODEL-MODEL JARINGAN
Perhatikan graf terarah pada Gambar 1 yang mewakili sebuah jaringan pipa minyak.
Minyak dilepaskan di dok
verteks
dan
dan dipompa sepanjang jaringan menuju kilang minyak . verteks-
mewakili stasiun pompa lanjutan. Rusuk-rusuk terarah mewakili bagian-
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).
Gambar 8.1.1. Sebuah jaringan transfor
Definisi 8.1.1
Sebuah jaringan transpor (atau cukup jaringan) adalah graf terarah berbobot sederhana yang
memenuhi
a. Verteks bertanda, yang merupakan sumber, tidak mempunyai rusuk yang masuk
b. Verteks bertanda, yang merupakan tujuan , tidak mempunnyai rusuk yang keluar.
c. Bobot cij dari rusuk terarah
tak negatif.
disebut kapasitas dari
merupakan sebuah bilangan
Contoh 8.1.2
Graf pada Gambar 8.1.1. Merupakan sebuah jaringan transpor. Sumbernya adalah verteks
tujuannya adalah verteks . kapasitas rusuk
,
dan
adalah 3 dan kapasitas dari rusuk
□
adalah 2.
Dalam bab ini , jika
dengan
merupakan sebuah jaringan, kita akan menyatakan sumbernya
dan tujuannya dengan .
Aliran ( flow) dalam sebuah jaringan menempatkan sebuah aliran dalam setiap rusuk
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
.
definisi berikut membuat gagasan ini tepat.
Definisi 8.1.3
Misalkan
sebuah jaringan transpor. Misalkan
sebuah aliran
di
menyatakan kapasitas rusuk terarah
menempatkan bilangan tak negatif
pada setiap rusuk terarah
Sehingga:
a.
b. Untuk setiap verteks , yang bukan merupakan sumber atau pun tujuan.
∑
∑
(8.1.1)
[Dalam penjumlahan sepert (8.1.1), asalkan tidak dispesifikasikan, penjumlahan itu
dilakukan untuk semua verteks . Juga, jika
bukan merupakan rusuk, kita tetapkan
.]
Kita sebut
aliran dalam rusuk
aliran ke dalam j dan kita sebut
aliran keluar dari
untuk sembarang verteks , 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 .
sama dengan aliran keluar dari 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
Notasi ini akan digunakan dalam bab ini.
Perhatikan dalam Contoh 8.1.4, aliran keluar dari sumber .
sama dengan aliran ke dalam tujuan .
keduannya nilai 5. Teorema berikut menunjukkan aliran keluar dari sumber selalu sama
dengan aliran ke dalam tujuan.
Gambar 8.1.2. Aliran dalam sebuah jaringan
.
rusuk
-
rusuk
dilabeli
mengindikasikan kapasitas
untuk
dan aliran
.
Teorema 8.1.5
Jika diketahui sebuah aliran
dalam sebuah jaringan , aliran keluar dari sumber
aliran ke dalam tujuan , yakni
∑
∑
Pembuktian. Misalkan
adalah himpunan verteks . Kita mempunyai
∑ (∑
)
∑ (∑
)
karena masing-masing penjumlahan ganda adalah
∑
dengan
merupakan himpunan rusuk. Kini
∑ ∑
∑
∑
∑
∑
∑
sama dengan
∑ ∑
∑
karena
untuk semua
∑
∑
∑
∑
, dan (Definisi 8.1.3b)
jika
.
Dengan keterangan dari teorema 5, kita dapat menyatakan definisi berikut
Definisi 8.1.6
Misalkan F adalah sebuah aliran dalam sebuah jaringan . Nilai
∑
∑
disebut nilai aliran
Contoh 8.1.7.
Nilai aliran dan jaringan pada gambar 8.1.7 adalah 5.
Masalah untuk jaringan transpor
aliran maksimal di
sehingga nilai
dapat dinyatakan sebagai berikut: Carilah sebuah
, yakni diantara semua aliran yang mungkin di
, carilah sebuah aliran
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
. Kapasitas sistem lanjutan ini ditunjukkan pada rusuk-rusuknya.
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
mewakili stasiun pemompaan lanjutan.Buatlah model sistem ini
sebagai sebuah jaringan transpor.
Untuk memperoleh sumber dan tujuan yang ditandai, kita dapat memperoleh sebuah
jaringan transpor ekuivalen dengan menyatukan bersama sumber – sumber tersebut ke dalam
sumber raya (supersource) dan menyatukan bersama tujuan – tujuan menjadi sebuah tujuan
raya (supersink) (lihat gambar 8.1.4). Pada Gambar 8.1.4, mewakili sebuah kapasitas tak
terbatas.
Gambar 8.1.4 jaringan pada gambar 8.1.3 dengan sebuah sumber dan tujuan yang ditandai.
Contoh 8.1.9 Sebuah Jaringan Lalu Lintas
Ada kemungkinan untuk pergidari kota A ke kota B secara langsung atau dengan melalui kota B.
Selama periode 6:00 hingga 7:00 malam, waktu perjalanan rata – rata adalah
A ke B
(15 menit)
B ke C
(30 menit)
A ke C
(30 menit)
Kapasitas maksimum dari rute – rute tersebut adalah
A ke B
(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
kapasitas tak terbatas menghubungkan
,t1 ke
,t2 dan
sembarang jumlah mobil dapat menunggu di kota
,t1 ke B,t2 untuk menyatakan bahwa
atau kota . Akhirnya, kita memperkenalkan
sebuah sumber raya dan tujuan raya.
Gambar 8.1.5 Sebuah jaringan yang mewakili aliran lalu lintas dari kota
ke kota
selama
periode 6:00 hingga 7:00 malam.
Varian dari aliran jaringan telah digunakan dalam rancangan jaringan komputer yang
efisien (lihat [Jones; Kleinrock]). Dalam pemodelan sebuah jaringan komputer, sebuah verteks
merupakan pesan atau pusat pengatur, sebuah rusuk mewakili kanal yang di sini data dapat
ditransmisikan di antara verteks – verteks, sebuah aliran merupakan jumlah bit rata – rata per
detik yang ditransmisikan pada sebuah kanal,
dan kapasitas sebuah rusuk merupakan
kapasitaskanal yang bersesuaian.
8.2 ALGORITMA ALIRAN MAKSIMAL
Jika
sebuah jaringan transpor, sebuah aliran maksimal (maximal flow) di
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,
menyatakan sebuah jaringan dengan sumber
Sementara itu, perhatikan rusuk – rusuk dari
merupakan sebuah lintasan dari
ke
, tujuan
, kita katakan bahwa
mengacu pada
.
sebagai tak terarah dan misalkan
dalam graf tak terarah ini. (Semua lintasan dalam bagian
ini dengan referensi pada graf tak berarah dasar). Jika sebuah rusuk
ke
, dan kapasitas
di
diarahkan dari
terorientasi secara tepat atau properly oriented (dengan
); jika sebaliknya, kita katakan
terorientasi tak tepat atau improperly
oriented (dengan mengacu pada P) (lihat Gambar 8.2.1).
Jika kita dapat mencari sebuah lintasan
dari sumber ke tujuan dengan setiap rusuk di
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
dalam Gambar 8.2.2. Semua rusuk dalam
terorientasi dengan
tepat. Nilai aliran dalam jaringan ini dapat dinaikkan dengan 1, seperti yang ditunjukkan dalam
Gambar 8.2.3.
Gambar 8.2.2 Sebuah lintasan dari rusuk-
Gambar 8.2.3 Setelah penaikan aliran pada
rusuk yang teriorentasi dengan tepat.
Gambar 8.2.2 dengan 1.
□
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
yang insiden pada
Pada kasus (a), kedua rusuk terorientasi dengan tepat. Pada kasus ini, jika kita menaikkan aliran
dalam setiap rusuk dengan , aliran ke dalam
akan tetap sama dengan aliran keluar dari .
Pada kasus (b), jika kita menaikkan aliran di
dengan , kita harus menurunkan aliran di
dengan
sehingga aliran ke dalam
akan tetap sama dengan aliran keluar dari . Kasus (c)
serupa dengan kasus (b), kecuali kita menaikkan aliran di
dengan
dengan
dan menurunkan aliran di
. Pada kasus (d), kita menurunkan aliran di kedua rusuk 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
pada Gambar 8.2.5. Rusuk-rusuk
dan
terorientasi dengan tepat dan rusuk
terorientasi tak tepat. Kita menurunkan aliran sebesar 1
dalam rusuk terorientasi tak tepat
dan meningkatkan aliran sebesar 1 dalam rusuk-rusuk
terorientasi dengan tepat
dan
(lihat Gambar 8.2.6). nilai aliran baru adalah 1
lebih dari aliran yang asli.
Gambar 8.2.5 Sebuah lintasan dengan sebuah
rusuk terorientasi tak tepat:
.
Kita merangkum metode pada Contoh 8.2.1 dan
8.2.2 sebagai sebuah teorema.
Gambar 8.2.6 Setelah peningkatan aliran pada
Gambar 8.2.5 sebesar 1.
TEOREMA 8.2.3
Misalkan
sebuah lintasan dari
ke
dalam sebuah jaringan G yang memenuhi:
(a) Untuk setiap rusuk terorientasi dengan tepat
(b) Untuk setiap rusuk terorientasi tak tepat
di
di ,
Misalkan
dengan
terdiri dari bilangan-bilangan
di , dan
, untuk rusuk-rusuk terorientasi dengan tepat
, untuk rusuk-rusuk terorientasi tak tepat
di . Definisikan
{
Maka * merupakan sebuah aliran yang nilainya
lebih besar dari nilai .
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
sebesar , nilai * lebih besar dari nilai .
Dalam bagian selanjutnya kita akan menunjukkan jika tidak terdapat lintasan yang
memenuhi kondisi pada Teorema 8.2.3, aliran tersebut maksimal. Jadi, adalah mungkin untuk
membentuk sebuah algoritma yang berdasarkan pada Teorema 8.2.3. intinya adalah
1. Mulailah denagn sebuah aliran (yakni, aliran yang aliran dalam setiap rusuknya 0).
2. Carilah sebuah aliran yang memenuhi kondisi dari Teorema 8.2.3. Jika tidak ada lintasan
yang seperti itu, berhentilah; aliran tersebuty maksimal.
3. Naikkan aliran sepanjang lintasan dengan
,
didefinisikan seperti dalam Teorema 8.2.3,
dan kembalilah ke baris 2.
Dalam algoritma formal, kita mencari sebuah lintasan yang memenuhi kondisi Teorema
8.2.3 sementara secar bersamaan tetap menjajaki kuantitas
ALGORITMA 8.2.4 Mencari Sebuah Aliran Maksimal dalam Sebah Jaringan
Algoritma ini mencari sebuah aliran maksimal dalam sebuah jaringan. Kapasitas setiap rusuk
adalah sebuah bilangan bulat tak negatif.
Masukkan:
Sebuah jaringan dengan sumber
, dan
, tujuan , kapasitas
, verteks
Keluaran:
sebuiha aliran maksimal
procedure aliran_maks
// label
adalah (pendahulu(v), val(v))
// mulailah dengan aliran nol
1. for setiap rusuk
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
do
dengan
then
29. begin
30.
31.
min
32.
33. end
34. end
// carilah lintasan
dari
ke dimana untuk memperbaiki aliran
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
pada graf sebagai
memenuhi
dan
kita
Pada baris 1 dan 2, kita mengawali aliran pada 0
dalam setiap rusuk (lihat Gambar 8.2.7). Selanjutnya, pada baris 5-9 kita menetapkan semua
label sebagai
. Kemudian, pada baris 10 dan 11 kita melabeli verteks
baris 12 kita menetapkan
sebagai
. Pada
. Selanjutnya kita masukkan loop while (baris 13).
Gambar 8.2.7 Setelah pelabelan pertama. Varteks
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
pada baris 19. Pada baris 20 kita menguji rusuk-rusuk
maupun
tidak terlabeli. Untuk rusuk
kita mempunyai
. Kita menetapkan
dan
Pada baris 23 dan 24, kita melabeli verteks
sebagai
karena
dan
Pada baris 25, kita menambahkan
pada
. Demikian juga, kita melabeli verteks
sebagai
dan menambahkan d pada . Pada saat ini,
Selanjutnya kita kembali pada puncak loop while (baris 13). Karena
tidak berlabel dan
tidak kosong, kita bergerak ke baris 17, di sini kita memilih sebuah verteks di
memilih b. Kita memindahkan
dari
pada baris 18. Kita menetapkan sebagai
pada baris 19. Pada baris 20 kita menguji rusuk
sebagai
.andaikan kita
Pada baris 23 dan 24 kita melabeli verteks
karena
dan
Pada baris 25 kita tambahkan pada
Pada saait ini,
Selanjutnya kita kembali ada puncak loop while (baris 13). Karena
tidak berlabel dan
tidak kosong, kita bergerak ke baris 17, di sini kita memilih sebuah verteks di
memilih
Kita memindahkan
dari
ke baris 18. Kita menetapkan sebagai
pada baris 19. Pada baris 20 kita menguji rusuk
sebagai
Andaikan kita
Pada baris 25, kita menambahkan
Pada baris 23 dan 24 kita melabeli verteks
pada
Pada saat ini
Kemudian kita kembali pada puncak loop while (baris 13). Karena
sudah diberi label
kita meloncat pada baris 35. Pada baris 35-42, dengan mengikuti pendahulu dari , menemukan
lintasan
dari
ke . Pada baris 42 kita menetapkan sebagai 2. Karena setiap rusuk di
terorientasi
dengan
dengan tepat, pada baris 48 kita menaikkan aliran dalam setiap rusuk
untuk
memperoleh Gambar 8.2.8.
Gambar 8.2.8 Setelah peningkatan aliran pada lintasan
dengan 2 dari pelabelan
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
(lihat Gambar 8.2.8). pada baris 12 kita tetapkan
sebagai
Kita masuki loop while
(baris 13).
Karena
tidak berlabel dan
memilih sebuah verteks di
tidak kosong, kita bergerak ke baris 17, yang di sini kita
Andaikan kita memilih . Kita memindahkan
18. Pada baris 23 dan 24 kita melabeli verteks b sebagai
Kita menambahkan
dan
pada
dari
dan kita labeli
tidak berlabel dan
tidak kosong, kita bergerak ke baris 17, dimana kita memilih sebuh verteks
. Kita memindahkan
Karena
dari
. Andaikan kita
pada baris 18. Pada baris 20 kita menguji rusuk
, kita tidak melabeli verteks pada saat ini. Sekarang
Kemudian kita kembali pada puncak loop while (baris 13). Karena
tidak berlabel dan
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
pada baris 18 . pada baris 23 dan 24 kita melabeli
pada
sehingga
Kemudian kita kembali ke puncak loop while (baris 13). Karena
tidak dilabeli, kita
langsung ke baris 35. Pada baris 42 kita mendapatkan bahwa
Oleh karena setiap rusuk di
dalam setiap rusuk di
terorientasi dengan tepat, pada baris 48 kita meningkatkan aliran
dengan
untuk memperoleh Gambar 8.2.9.
Anda harus mengecek bahwa iterasi algoritma berikutnya menghasilkan pelabelan yang
ditunjukkan pada Gambar 8.2.9. Peningkatan aliran dengan
menghasilkan Gambar 8.2.10.
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
(lihat Gambar 8.2.8). pada baris 12 kita menetapkan
sebagai
Kita msuki loop
while (baris 13).
Gambar 8.2.9 Setelah peningkatan aliran pada lintasan
dengan 2 dan pelabelan
ketiga.
Karena
tidak berlabel dan
memilih verteks di
tidak kosong, kita bergerak ke baris 17, yang disini kita
. Andaikan kita memilih . Kita memindahkan dari
Pada baris 23 dan 24 kita melabeli verteks
Kitambahkan
dan
pada
sebagai
ke
pada baris 18.
dan kita labeli
sebagai
sehingga
Selanjutnya kita kembali pada puncak loop while (baris 13). Karena
tidak berlabel dan
U tidak kosong, kita bergerak ke baris 17, maka kita memilih sebuah verteks di . Andaikan kita
memilih
. Kita memindahkan
Karena
dari
pada baris 18. Pada baris 20 kita menguji rusuk
, tidak melabeli verteks
pada saat ini. Sekarang
Kemudian kita kembali ke puncak loop while (baris 13). Karena
tidak berlabel dan
tidak kosong, kita bergerak ke baris 17, yang disini kita memilih sebuah verteks di
kita memilih . Kita memindahkan
dan
karena
dari
pada baris 18. Pada baris 20 kita menguji rusuk
, kita melabeli verteks maupun verteks . Sekarang
Kita kembali ke puncak loop while (baris 13). Oleh karena
ke baris 15. Oleh karena
. Andaikan
tidak dilabeli, kita bergerak
kosong, algoritma berakhir. Aliran pada Gambar 8.2.10 maksimal.
Contoh kita terakhir menujukkan bagaimana memodifikasi Algoritma 8.2.4 untuk
membentuk sebuah aliran maksimal dari sebuah aliran yang diberikan.
Gambar 8.2.10 Setelah peningkatan aliran pada lintasan
pelabelan akhir. Aliran tersebut masksimal.
dengan 2 dan seterusnya dan
□
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).
Gambar 8.2.11 Setelah pelabelan.
Oleh karena
tidak dilabeli dan
verteks
di
verteks
sebagai
pada
tidak kosong, kita bergerak ke baris 17, dimana kita memilih
dan memindahkannya dari
pada baris 18. Pada baris 23 dan 24, kita melabeli
dan kita melabeli verteks
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
Andaikan kita memilih . Kita memindahkan
rusuk-rusuk
dan 31, verteks
dan
dari
Oleh karena
dilabeli
.
pada baris 18. Pada baris 20 kita menguji
, kita dapat melabeli verteks . Pada baris 30
karena
Kemudian kita kembali pada puncak loop while (baris 13). Kita segera melabeli
(lihat Gambar
8.2.11) dan pada baris 42 kita mencari lintasan
Rusuk-rusuk
dan
terorientasi dengan tepat, sehingga aliran dalam masing-
masing rusuk ditingkatkan 1. Oleh karena rusuk
terorientasi dengan tidak tepat, alirannya
berkurang 1. Kita mendapatkan aliran pada Gambar 8.2.12.
Gambar 8.2.12 Setelah peningkatan aliran
Gambar 8.2.13 Setelah peningkatan aliran
pada
pada lintasan
lintasan
dengan
Perhatikan bahwa rusuk
1.
dengan 1. Aliran
tersebut maksimal.
terorientasi
dengan tidak tepat sehingga alirannya
berkurang 1.
8.3 TEOREMA POTONG MIN, ALIRAN MAKS
Kita akan menunjukkan bahwa pada akhir Algoritma 8.2.4, aliran dalam jaringan adalah
maksimal. Kita akan mendefinisikan dan membahas pemotongan dalam jaringan-jaringan.
Misalkan
sebuah jaringan dan perhatikan aliran
verteks dilabeli dan beberapa tidak. Misalkan
̅ menyatakan himpunan verteks berlabel
(tidak berlabel). (Ingat ̅ menyatakan komplemen dari
tujuan
berada di ̅ . Himpunan
pada akhir algoritma 8.2.4. Beberapa
dari rusuk-rusuk
). Maka sumber
, dengan
berada di P dan
dan
̅ , disebut
pemotongan (cut) dan jumlah kapasitas rusuk-rusuk di S disebut kapasitas pemotongan
(capacity of the cut). Kita akan melihat pemotongan ini mempunyai kapasitas minimum dan,
karena sebuah pemotongan minimal berhubungan dengan sebuah aliran maksimal (Teorema
8.3.9), aliran
maksimal. Kita mulai dengan definisi formal pemotongan.
jaringan dengan sumber
dan tujuan
Kapasitas rusuk
adalah
merupakan sebuah
.
Definisi 8.3.1
Sebuah pemotongan
̅
komplemen ̅ dari P , dengan
di
terdiri dari sebuah himpunan
dan
̅.
dari verteks-verteks dan
Contoh 8.3.2
, maka ̅
Perhatikan jaringan G pada Gambar 8.3.1. Jika kita misalkan
̅
dan
adalah sebuah pemotongan di G. Seperti ditunjukkan, kadang-kadang kita
mengindikasikan sebuah pemotongan dengan menggambar garis putus-putus untuk membagi
verteks-verteks.
Gambar 8.3.1 Sebuah pemotongan dalam sebuah jaringan. Garis putus-putus membagi verteksverteks menjadi himpunan
̅ .
dan ̅
yang menghasilkan pemotongan
Contoh 8.3.3
Gambar 8.2.10 menunjukkan pelabelan pada akhir Algoritma 8.2.4 untuk sebuah jaringan
tertentu. Jika kita misalkan
̅ menyatakan himpunan verteks berlabel (tak berlabel), kita
dapatkan pemotongan yang ditunjukkan pada Gambar 8.3.2. Selanjutnya kita definisikan
kapasitas sebuah pemotongan.
Gambar 8.3.2 Sebuah jaringan pada akhir Algoritma 8.2.4. Pemotongan
diperoleh dengan memisalkan
̅
adalah himpunan verteks berlabel.
Definisi 8.3.4
Kapasitas pemotongan
̅
∑
Contoh 8.3.5
∑
̅
̅ adalah bilangan
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
sebuah aliran dalam
̅ lebih dari atau sama dengan nilai ; yakni,
maka kapasitas
∑
∑
̅
̅ merupakan sebuah pemotongan di
dan misalkan
(
∑∑
Pembuktian. Ingat bahwa
,
∑
(8.3.1)
)
∑∑
∑∑
Karena masing-masing sisi dari persamaan merupakan penjumlahan dari
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.
Teorema 8.3.9 Teorema Potong Min, Aliran Maks
Misalkan
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
Pembuktian. Pernyataan pertama berlaku dengan sendirinya.
Pembuktian Teorema 8.3.7 menunjukkan bahwa kesamaan berlaku dengan tepat apabila
∑
∑
dan ∑
∑
Sehingga pernyataan juga benar.
∑
∑
Contoh 8.3.10
Pada Gambar 8.3.2, nilai aliran dan kapasitas pemotongan keduanya adalah 6; oleh karena itu
□
alirannya maksimal dan pemotongan minimal.
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.
̅ adalah himpunan verteks berlabel (tak berlabel) dari
Algoritma 8.2.4. Perhatikan sebuah rusuk (i,j) dengan
pasti mempunyai
Sebaliknya, kita telah melabeli
dengan
̅
̅ . Oleh karena
pada akhir
dilabeli, kita
pada baris 23 dan 24. Sekarang perhatikan sebuah rusuk
. Oleh karena 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.
MODEL-MODEL JARINGAN DAN JARINGAN-JARINGAN PETRI
8.1 MODEL-MODEL JARINGAN
Perhatikan graf terarah pada Gambar 1 yang mewakili sebuah jaringan pipa minyak.
Minyak dilepaskan di dok
verteks
dan
dan dipompa sepanjang jaringan menuju kilang minyak . verteks-
mewakili stasiun pompa lanjutan. Rusuk-rusuk terarah mewakili bagian-
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).
Gambar 8.1.1. Sebuah jaringan transfor
Definisi 8.1.1
Sebuah jaringan transpor (atau cukup jaringan) adalah graf terarah berbobot sederhana yang
memenuhi
a. Verteks bertanda, yang merupakan sumber, tidak mempunyai rusuk yang masuk
b. Verteks bertanda, yang merupakan tujuan , tidak mempunnyai rusuk yang keluar.
c. Bobot cij dari rusuk terarah
tak negatif.
disebut kapasitas dari
merupakan sebuah bilangan
Contoh 8.1.2
Graf pada Gambar 8.1.1. Merupakan sebuah jaringan transpor. Sumbernya adalah verteks
tujuannya adalah verteks . kapasitas rusuk
,
dan
adalah 3 dan kapasitas dari rusuk
□
adalah 2.
Dalam bab ini , jika
dengan
merupakan sebuah jaringan, kita akan menyatakan sumbernya
dan tujuannya dengan .
Aliran ( flow) dalam sebuah jaringan menempatkan sebuah aliran dalam setiap rusuk
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
.
definisi berikut membuat gagasan ini tepat.
Definisi 8.1.3
Misalkan
sebuah jaringan transpor. Misalkan
sebuah aliran
di
menyatakan kapasitas rusuk terarah
menempatkan bilangan tak negatif
pada setiap rusuk terarah
Sehingga:
a.
b. Untuk setiap verteks , yang bukan merupakan sumber atau pun tujuan.
∑
∑
(8.1.1)
[Dalam penjumlahan sepert (8.1.1), asalkan tidak dispesifikasikan, penjumlahan itu
dilakukan untuk semua verteks . Juga, jika
bukan merupakan rusuk, kita tetapkan
.]
Kita sebut
aliran dalam rusuk
aliran ke dalam j dan kita sebut
aliran keluar dari
untuk sembarang verteks , 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 .
sama dengan aliran keluar dari 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
Notasi ini akan digunakan dalam bab ini.
Perhatikan dalam Contoh 8.1.4, aliran keluar dari sumber .
sama dengan aliran ke dalam tujuan .
keduannya nilai 5. Teorema berikut menunjukkan aliran keluar dari sumber selalu sama
dengan aliran ke dalam tujuan.
Gambar 8.1.2. Aliran dalam sebuah jaringan
.
rusuk
-
rusuk
dilabeli
mengindikasikan kapasitas
untuk
dan aliran
.
Teorema 8.1.5
Jika diketahui sebuah aliran
dalam sebuah jaringan , aliran keluar dari sumber
aliran ke dalam tujuan , yakni
∑
∑
Pembuktian. Misalkan
adalah himpunan verteks . Kita mempunyai
∑ (∑
)
∑ (∑
)
karena masing-masing penjumlahan ganda adalah
∑
dengan
merupakan himpunan rusuk. Kini
∑ ∑
∑
∑
∑
∑
∑
sama dengan
∑ ∑
∑
karena
untuk semua
∑
∑
∑
∑
, dan (Definisi 8.1.3b)
jika
.
Dengan keterangan dari teorema 5, kita dapat menyatakan definisi berikut
Definisi 8.1.6
Misalkan F adalah sebuah aliran dalam sebuah jaringan . Nilai
∑
∑
disebut nilai aliran
Contoh 8.1.7.
Nilai aliran dan jaringan pada gambar 8.1.7 adalah 5.
Masalah untuk jaringan transpor
aliran maksimal di
sehingga nilai
dapat dinyatakan sebagai berikut: Carilah sebuah
, yakni diantara semua aliran yang mungkin di
, carilah sebuah aliran
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
. Kapasitas sistem lanjutan ini ditunjukkan pada rusuk-rusuknya.
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
mewakili stasiun pemompaan lanjutan.Buatlah model sistem ini
sebagai sebuah jaringan transpor.
Untuk memperoleh sumber dan tujuan yang ditandai, kita dapat memperoleh sebuah
jaringan transpor ekuivalen dengan menyatukan bersama sumber – sumber tersebut ke dalam
sumber raya (supersource) dan menyatukan bersama tujuan – tujuan menjadi sebuah tujuan
raya (supersink) (lihat gambar 8.1.4). Pada Gambar 8.1.4, mewakili sebuah kapasitas tak
terbatas.
Gambar 8.1.4 jaringan pada gambar 8.1.3 dengan sebuah sumber dan tujuan yang ditandai.
Contoh 8.1.9 Sebuah Jaringan Lalu Lintas
Ada kemungkinan untuk pergidari kota A ke kota B secara langsung atau dengan melalui kota B.
Selama periode 6:00 hingga 7:00 malam, waktu perjalanan rata – rata adalah
A ke B
(15 menit)
B ke C
(30 menit)
A ke C
(30 menit)
Kapasitas maksimum dari rute – rute tersebut adalah
A ke B
(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
kapasitas tak terbatas menghubungkan
,t1 ke
,t2 dan
sembarang jumlah mobil dapat menunggu di kota
,t1 ke B,t2 untuk menyatakan bahwa
atau kota . Akhirnya, kita memperkenalkan
sebuah sumber raya dan tujuan raya.
Gambar 8.1.5 Sebuah jaringan yang mewakili aliran lalu lintas dari kota
ke kota
selama
periode 6:00 hingga 7:00 malam.
Varian dari aliran jaringan telah digunakan dalam rancangan jaringan komputer yang
efisien (lihat [Jones; Kleinrock]). Dalam pemodelan sebuah jaringan komputer, sebuah verteks
merupakan pesan atau pusat pengatur, sebuah rusuk mewakili kanal yang di sini data dapat
ditransmisikan di antara verteks – verteks, sebuah aliran merupakan jumlah bit rata – rata per
detik yang ditransmisikan pada sebuah kanal,
dan kapasitas sebuah rusuk merupakan
kapasitaskanal yang bersesuaian.
8.2 ALGORITMA ALIRAN MAKSIMAL
Jika
sebuah jaringan transpor, sebuah aliran maksimal (maximal flow) di
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,
menyatakan sebuah jaringan dengan sumber
Sementara itu, perhatikan rusuk – rusuk dari
merupakan sebuah lintasan dari
ke
, tujuan
, kita katakan bahwa
mengacu pada
.
sebagai tak terarah dan misalkan
dalam graf tak terarah ini. (Semua lintasan dalam bagian
ini dengan referensi pada graf tak berarah dasar). Jika sebuah rusuk
ke
, dan kapasitas
di
diarahkan dari
terorientasi secara tepat atau properly oriented (dengan
); jika sebaliknya, kita katakan
terorientasi tak tepat atau improperly
oriented (dengan mengacu pada P) (lihat Gambar 8.2.1).
Jika kita dapat mencari sebuah lintasan
dari sumber ke tujuan dengan setiap rusuk di
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
dalam Gambar 8.2.2. Semua rusuk dalam
terorientasi dengan
tepat. Nilai aliran dalam jaringan ini dapat dinaikkan dengan 1, seperti yang ditunjukkan dalam
Gambar 8.2.3.
Gambar 8.2.2 Sebuah lintasan dari rusuk-
Gambar 8.2.3 Setelah penaikan aliran pada
rusuk yang teriorentasi dengan tepat.
Gambar 8.2.2 dengan 1.
□
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
yang insiden pada
Pada kasus (a), kedua rusuk terorientasi dengan tepat. Pada kasus ini, jika kita menaikkan aliran
dalam setiap rusuk dengan , aliran ke dalam
akan tetap sama dengan aliran keluar dari .
Pada kasus (b), jika kita menaikkan aliran di
dengan , kita harus menurunkan aliran di
dengan
sehingga aliran ke dalam
akan tetap sama dengan aliran keluar dari . Kasus (c)
serupa dengan kasus (b), kecuali kita menaikkan aliran di
dengan
dengan
dan menurunkan aliran di
. Pada kasus (d), kita menurunkan aliran di kedua rusuk 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
pada Gambar 8.2.5. Rusuk-rusuk
dan
terorientasi dengan tepat dan rusuk
terorientasi tak tepat. Kita menurunkan aliran sebesar 1
dalam rusuk terorientasi tak tepat
dan meningkatkan aliran sebesar 1 dalam rusuk-rusuk
terorientasi dengan tepat
dan
(lihat Gambar 8.2.6). nilai aliran baru adalah 1
lebih dari aliran yang asli.
Gambar 8.2.5 Sebuah lintasan dengan sebuah
rusuk terorientasi tak tepat:
.
Kita merangkum metode pada Contoh 8.2.1 dan
8.2.2 sebagai sebuah teorema.
Gambar 8.2.6 Setelah peningkatan aliran pada
Gambar 8.2.5 sebesar 1.
TEOREMA 8.2.3
Misalkan
sebuah lintasan dari
ke
dalam sebuah jaringan G yang memenuhi:
(a) Untuk setiap rusuk terorientasi dengan tepat
(b) Untuk setiap rusuk terorientasi tak tepat
di
di ,
Misalkan
dengan
terdiri dari bilangan-bilangan
di , dan
, untuk rusuk-rusuk terorientasi dengan tepat
, untuk rusuk-rusuk terorientasi tak tepat
di . Definisikan
{
Maka * merupakan sebuah aliran yang nilainya
lebih besar dari nilai .
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
sebesar , nilai * lebih besar dari nilai .
Dalam bagian selanjutnya kita akan menunjukkan jika tidak terdapat lintasan yang
memenuhi kondisi pada Teorema 8.2.3, aliran tersebut maksimal. Jadi, adalah mungkin untuk
membentuk sebuah algoritma yang berdasarkan pada Teorema 8.2.3. intinya adalah
1. Mulailah denagn sebuah aliran (yakni, aliran yang aliran dalam setiap rusuknya 0).
2. Carilah sebuah aliran yang memenuhi kondisi dari Teorema 8.2.3. Jika tidak ada lintasan
yang seperti itu, berhentilah; aliran tersebuty maksimal.
3. Naikkan aliran sepanjang lintasan dengan
,
didefinisikan seperti dalam Teorema 8.2.3,
dan kembalilah ke baris 2.
Dalam algoritma formal, kita mencari sebuah lintasan yang memenuhi kondisi Teorema
8.2.3 sementara secar bersamaan tetap menjajaki kuantitas
ALGORITMA 8.2.4 Mencari Sebuah Aliran Maksimal dalam Sebah Jaringan
Algoritma ini mencari sebuah aliran maksimal dalam sebuah jaringan. Kapasitas setiap rusuk
adalah sebuah bilangan bulat tak negatif.
Masukkan:
Sebuah jaringan dengan sumber
, dan
, tujuan , kapasitas
, verteks
Keluaran:
sebuiha aliran maksimal
procedure aliran_maks
// label
adalah (pendahulu(v), val(v))
// mulailah dengan aliran nol
1. for setiap rusuk
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
do
dengan
then
29. begin
30.
31.
min
32.
33. end
34. end
// carilah lintasan
dari
ke dimana untuk memperbaiki aliran
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
pada graf sebagai
memenuhi
dan
kita
Pada baris 1 dan 2, kita mengawali aliran pada 0
dalam setiap rusuk (lihat Gambar 8.2.7). Selanjutnya, pada baris 5-9 kita menetapkan semua
label sebagai
. Kemudian, pada baris 10 dan 11 kita melabeli verteks
baris 12 kita menetapkan
sebagai
. Pada
. Selanjutnya kita masukkan loop while (baris 13).
Gambar 8.2.7 Setelah pelabelan pertama. Varteks
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
pada baris 19. Pada baris 20 kita menguji rusuk-rusuk
maupun
tidak terlabeli. Untuk rusuk
kita mempunyai
. Kita menetapkan
dan
Pada baris 23 dan 24, kita melabeli verteks
sebagai
karena
dan
Pada baris 25, kita menambahkan
pada
. Demikian juga, kita melabeli verteks
sebagai
dan menambahkan d pada . Pada saat ini,
Selanjutnya kita kembali pada puncak loop while (baris 13). Karena
tidak berlabel dan
tidak kosong, kita bergerak ke baris 17, di sini kita memilih sebuah verteks di
memilih b. Kita memindahkan
dari
pada baris 18. Kita menetapkan sebagai
pada baris 19. Pada baris 20 kita menguji rusuk
sebagai
.andaikan kita
Pada baris 23 dan 24 kita melabeli verteks
karena
dan
Pada baris 25 kita tambahkan pada
Pada saait ini,
Selanjutnya kita kembali ada puncak loop while (baris 13). Karena
tidak berlabel dan
tidak kosong, kita bergerak ke baris 17, di sini kita memilih sebuah verteks di
memilih
Kita memindahkan
dari
ke baris 18. Kita menetapkan sebagai
pada baris 19. Pada baris 20 kita menguji rusuk
sebagai
Andaikan kita
Pada baris 25, kita menambahkan
Pada baris 23 dan 24 kita melabeli verteks
pada
Pada saat ini
Kemudian kita kembali pada puncak loop while (baris 13). Karena
sudah diberi label
kita meloncat pada baris 35. Pada baris 35-42, dengan mengikuti pendahulu dari , menemukan
lintasan
dari
ke . Pada baris 42 kita menetapkan sebagai 2. Karena setiap rusuk di
terorientasi
dengan
dengan tepat, pada baris 48 kita menaikkan aliran dalam setiap rusuk
untuk
memperoleh Gambar 8.2.8.
Gambar 8.2.8 Setelah peningkatan aliran pada lintasan
dengan 2 dari pelabelan
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
(lihat Gambar 8.2.8). pada baris 12 kita tetapkan
sebagai
Kita masuki loop while
(baris 13).
Karena
tidak berlabel dan
memilih sebuah verteks di
tidak kosong, kita bergerak ke baris 17, yang di sini kita
Andaikan kita memilih . Kita memindahkan
18. Pada baris 23 dan 24 kita melabeli verteks b sebagai
Kita menambahkan
dan
pada
dari
dan kita labeli
tidak berlabel dan
tidak kosong, kita bergerak ke baris 17, dimana kita memilih sebuh verteks
. Kita memindahkan
Karena
dari
. Andaikan kita
pada baris 18. Pada baris 20 kita menguji rusuk
, kita tidak melabeli verteks pada saat ini. Sekarang
Kemudian kita kembali pada puncak loop while (baris 13). Karena
tidak berlabel dan
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
pada baris 18 . pada baris 23 dan 24 kita melabeli
pada
sehingga
Kemudian kita kembali ke puncak loop while (baris 13). Karena
tidak dilabeli, kita
langsung ke baris 35. Pada baris 42 kita mendapatkan bahwa
Oleh karena setiap rusuk di
dalam setiap rusuk di
terorientasi dengan tepat, pada baris 48 kita meningkatkan aliran
dengan
untuk memperoleh Gambar 8.2.9.
Anda harus mengecek bahwa iterasi algoritma berikutnya menghasilkan pelabelan yang
ditunjukkan pada Gambar 8.2.9. Peningkatan aliran dengan
menghasilkan Gambar 8.2.10.
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
(lihat Gambar 8.2.8). pada baris 12 kita menetapkan
sebagai
Kita msuki loop
while (baris 13).
Gambar 8.2.9 Setelah peningkatan aliran pada lintasan
dengan 2 dan pelabelan
ketiga.
Karena
tidak berlabel dan
memilih verteks di
tidak kosong, kita bergerak ke baris 17, yang disini kita
. Andaikan kita memilih . Kita memindahkan dari
Pada baris 23 dan 24 kita melabeli verteks
Kitambahkan
dan
pada
sebagai
ke
pada baris 18.
dan kita labeli
sebagai
sehingga
Selanjutnya kita kembali pada puncak loop while (baris 13). Karena
tidak berlabel dan
U tidak kosong, kita bergerak ke baris 17, maka kita memilih sebuah verteks di . Andaikan kita
memilih
. Kita memindahkan
Karena
dari
pada baris 18. Pada baris 20 kita menguji rusuk
, tidak melabeli verteks
pada saat ini. Sekarang
Kemudian kita kembali ke puncak loop while (baris 13). Karena
tidak berlabel dan
tidak kosong, kita bergerak ke baris 17, yang disini kita memilih sebuah verteks di
kita memilih . Kita memindahkan
dan
karena
dari
pada baris 18. Pada baris 20 kita menguji rusuk
, kita melabeli verteks maupun verteks . Sekarang
Kita kembali ke puncak loop while (baris 13). Oleh karena
ke baris 15. Oleh karena
. Andaikan
tidak dilabeli, kita bergerak
kosong, algoritma berakhir. Aliran pada Gambar 8.2.10 maksimal.
Contoh kita terakhir menujukkan bagaimana memodifikasi Algoritma 8.2.4 untuk
membentuk sebuah aliran maksimal dari sebuah aliran yang diberikan.
Gambar 8.2.10 Setelah peningkatan aliran pada lintasan
pelabelan akhir. Aliran tersebut masksimal.
dengan 2 dan seterusnya dan
□
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).
Gambar 8.2.11 Setelah pelabelan.
Oleh karena
tidak dilabeli dan
verteks
di
verteks
sebagai
pada
tidak kosong, kita bergerak ke baris 17, dimana kita memilih
dan memindahkannya dari
pada baris 18. Pada baris 23 dan 24, kita melabeli
dan kita melabeli verteks
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
Andaikan kita memilih . Kita memindahkan
rusuk-rusuk
dan 31, verteks
dan
dari
Oleh karena
dilabeli
.
pada baris 18. Pada baris 20 kita menguji
, kita dapat melabeli verteks . Pada baris 30
karena
Kemudian kita kembali pada puncak loop while (baris 13). Kita segera melabeli
(lihat Gambar
8.2.11) dan pada baris 42 kita mencari lintasan
Rusuk-rusuk
dan
terorientasi dengan tepat, sehingga aliran dalam masing-
masing rusuk ditingkatkan 1. Oleh karena rusuk
terorientasi dengan tidak tepat, alirannya
berkurang 1. Kita mendapatkan aliran pada Gambar 8.2.12.
Gambar 8.2.12 Setelah peningkatan aliran
Gambar 8.2.13 Setelah peningkatan aliran
pada
pada lintasan
lintasan
dengan
Perhatikan bahwa rusuk
1.
dengan 1. Aliran
tersebut maksimal.
terorientasi
dengan tidak tepat sehingga alirannya
berkurang 1.
8.3 TEOREMA POTONG MIN, ALIRAN MAKS
Kita akan menunjukkan bahwa pada akhir Algoritma 8.2.4, aliran dalam jaringan adalah
maksimal. Kita akan mendefinisikan dan membahas pemotongan dalam jaringan-jaringan.
Misalkan
sebuah jaringan dan perhatikan aliran
verteks dilabeli dan beberapa tidak. Misalkan
̅ menyatakan himpunan verteks berlabel
(tidak berlabel). (Ingat ̅ menyatakan komplemen dari
tujuan
berada di ̅ . Himpunan
pada akhir algoritma 8.2.4. Beberapa
dari rusuk-rusuk
). Maka sumber
, dengan
berada di P dan
dan
̅ , disebut
pemotongan (cut) dan jumlah kapasitas rusuk-rusuk di S disebut kapasitas pemotongan
(capacity of the cut). Kita akan melihat pemotongan ini mempunyai kapasitas minimum dan,
karena sebuah pemotongan minimal berhubungan dengan sebuah aliran maksimal (Teorema
8.3.9), aliran
maksimal. Kita mulai dengan definisi formal pemotongan.
jaringan dengan sumber
dan tujuan
Kapasitas rusuk
adalah
merupakan sebuah
.
Definisi 8.3.1
Sebuah pemotongan
̅
komplemen ̅ dari P , dengan
di
terdiri dari sebuah himpunan
dan
̅.
dari verteks-verteks dan
Contoh 8.3.2
, maka ̅
Perhatikan jaringan G pada Gambar 8.3.1. Jika kita misalkan
̅
dan
adalah sebuah pemotongan di G. Seperti ditunjukkan, kadang-kadang kita
mengindikasikan sebuah pemotongan dengan menggambar garis putus-putus untuk membagi
verteks-verteks.
Gambar 8.3.1 Sebuah pemotongan dalam sebuah jaringan. Garis putus-putus membagi verteksverteks menjadi himpunan
̅ .
dan ̅
yang menghasilkan pemotongan
Contoh 8.3.3
Gambar 8.2.10 menunjukkan pelabelan pada akhir Algoritma 8.2.4 untuk sebuah jaringan
tertentu. Jika kita misalkan
̅ menyatakan himpunan verteks berlabel (tak berlabel), kita
dapatkan pemotongan yang ditunjukkan pada Gambar 8.3.2. Selanjutnya kita definisikan
kapasitas sebuah pemotongan.
Gambar 8.3.2 Sebuah jaringan pada akhir Algoritma 8.2.4. Pemotongan
diperoleh dengan memisalkan
̅
adalah himpunan verteks berlabel.
Definisi 8.3.4
Kapasitas pemotongan
̅
∑
Contoh 8.3.5
∑
̅
̅ adalah bilangan
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
sebuah aliran dalam
̅ lebih dari atau sama dengan nilai ; yakni,
maka kapasitas
∑
∑
̅
̅ merupakan sebuah pemotongan di
dan misalkan
(
∑∑
Pembuktian. Ingat bahwa
,
∑
(8.3.1)
)
∑∑
∑∑
Karena masing-masing sisi dari persamaan merupakan penjumlahan dari
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.
Teorema 8.3.9 Teorema Potong Min, Aliran Maks
Misalkan
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
Pembuktian. Pernyataan pertama berlaku dengan sendirinya.
Pembuktian Teorema 8.3.7 menunjukkan bahwa kesamaan berlaku dengan tepat apabila
∑
∑
dan ∑
∑
Sehingga pernyataan juga benar.
∑
∑
Contoh 8.3.10
Pada Gambar 8.3.2, nilai aliran dan kapasitas pemotongan keduanya adalah 6; oleh karena itu
□
alirannya maksimal dan pemotongan minimal.
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.
̅ adalah himpunan verteks berlabel (tak berlabel) dari
Algoritma 8.2.4. Perhatikan sebuah rusuk (i,j) dengan
pasti mempunyai
Sebaliknya, kita telah melabeli
dengan
̅
̅ . Oleh karena
pada akhir
dilabeli, kita
pada baris 23 dan 24. Sekarang perhatikan sebuah rusuk
. Oleh karena 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.