• Tidak ada hasil yang ditemukan

Maximum Flow

N/A
N/A
Protected

Academic year: 2023

Membagikan "Maximum Flow"

Copied!
8
0
0

Teks penuh

(1)

Struktur Data & Algoritme (

Data Structures & Algorithms

)

Fakultas Ilmu Komputer Universitas Indonesia Semester Genap - 2000/2001

Version 1.0 - Internal Use Only

Suryana Setiawansetiawan@cs.ui.ac.id

Maximum Flow

Motivation

„ Banyak masalah graph dalam dunia nyata berkaitan dengan aliran material

„ Cairan: dalam suatu jaringan pipa yang mengalirkan minyak, berapa kapasitas debit (volume yang mengalir per satuan waktu) minyak melalui jaringan tersebut ?

„ Lalu lintas: dalam suatu jaringan jalan, berapa daya dukung jaringan jalan tersebut?

„ Proses: di bagian mana terjadinya bottleneck proses tersebut?

SDA/Max Flow/Sur/V1.0/3

1-Source, 1-Target Problem

„ Flow network Graph

„ Verteks pada symmetrical directed graph dihubungkan dengan sisi-sisi yang berupa saluran dengan

• c[u,v] kapasitas debit tertentu antara verteks u dan v

c[u,v] ≥0

Jika c[u,v] berarti tidak ada sisi yang menghubungkan u dan v

• f[u,v] aliran yang terjadi antara verteks u dan v

f[v,u] = -f[u,v]

f[u,v] ≤c[u,v]

• cr[u,v] kapasitas debit sisa/residual yang tidak digunakan antar verteks u dan v

cr[u,v] = c[u,v] – f[u,v]

„ Dua verteks disebut sebagai source s dan target/sink t

Ide Algoritma Ford-Fulkerson

„ Mendapatkan path residual antara s dan t, jika ada maka

„ “aliri” melalui path tersebut dengan debit sesuai dengan residu terkecil di dalam path tersebut

„ Update setiap f[u,v] untuk setiap (u,v) dalam path sesuai dengan debit tersebut

„ Hitung residual cr[u,v] = c[u,f] – f[u,v] untuk setiap (u,v) dalam path sebagai residual terbaru

„ Ulangi hingga tidak ada path residual antara s dan t

„ Graph MaxFlow adalah graph f[u,v] terakhir dengan

(2)

SDA/Max Flow/Sur/V1.0/5

Algoritma Ford-Fulkerson

„ Membuat graph c simetris, jika ada c[u,v] sementara c[v,u] tidak ada dengan membuat c[v,u] = 0

„ Inisialisasi f[u,v] = f[v,u] = 0 untuk setiap (u,v) dalam graph

„ Inisialisasi cr[u,v] = c[u,v] untuk setiap (u,v) dalam graph

„ While (path=findPathDalamcr(s,t)) {

„ Tambahdebit = minimum {cr[u,v] | untuk setiap (u,v) dalam path}

„ For setiap sisi (u,v) dalam path {

• f[u,v] += cr[u,v];

• f[v,u] = -f[u,v];

„ }

„ Update cr[u,v] = c[u,v] – f[u,v] untuk setiap (u,v) dalam path

Besarnya Aliran Maximum

„ Graph MaxFlow tidak bersifat unik (bisa beberapa solusi) tetapi besarnya debit aliran unik (maksimum)

„ Aliran maximum dalam graph diperoleh dengan menjumlahkan total flow yang keluar dari s atau total flow yang masuk ke t

SDA/Max Flow/Sur/V1.0/7

Contoh

s t

v4 v3

v2 v1

16

13

10 4 12

9

14

20

4 7

- 0 0 0 0 t 0

4 - 0 7 0 v4 0

0 14 - 0 4 v3 0

20 0 9 - 0 v2 0

0 0 10 12 - V1 0

0 0 13 0 16 S -

t v4 v3 v2 v1 s c Kapasitas

Contoh: Inisialisasi

- 0 0 0 0 T 0

0 - 0 0 0 V4 0

0 0 - 0 0 V3 0

0 0 0 - 0 v2 0

0 0 0 0 - V1 0

0 0 0 0 0 S -

t v4 v3 v2 v1 s f

- 0 0 0 0 t 0

4 - 0 7 0 v4 0

0 14 - 0 4 v3 0

20 0 9 - 0 v2 0

0 0 10 12 - V1 0

0 0 13 0 16 S -

t v4 v3 v2 v1 s cr

Aliran Kapasitas Tersisa

(3)

SDA/Max Flow/Sur/V1.0/9

s t

v4 v3

v2 v1

16

13

10 4 12

9

14

20

4 7

Misalnya diperoleh path s-v1-v2-v3-v4-t Debit: min{16,12,9,14,4} = 4

Update setiap f[u,v] += 4 dan

f[v,u] = -f[u,v], untuk setiap (u,v) dalam path

Contoh: pencarian path 1

Contoh: iterasi 1

- -4 0 0 0 T 0

4 - -4 0 0 V4 0

0 4 - -4 0 V3 0

0 0 4 - -4 v2 0

0 0 0 4 - V1 -4

0 0 0 0 4 S -

t v4 v3 v2 v1 s w

- 4 0 0 0 t 0

0 - 4 7 0 v4 0

0 10 - 4 4 v3 0

20 0 5 - 4 v2 0

0 0 10 8 - V1 4

0 0 13 0 12 S -

t v4 v3 v2 v1 s cr

Aliran Kapasitas Tersisa

SDA/Max Flow/Sur/V1.0/11

s t

v4 v3

v2 v1

12

13

10 4 8

5

10

20

7 4

4 4

4 4

Misalnya diperoleh path s-v1-v3-v4-v2-t Debit: min{12,10,10,7,20}=7

Update setiap f[u,v] += 7 dan

f[v,u] = -f[u,v], untuk setiap (u,v) dalam path

Contoh: Pencarian path 2

- -4 0 -7 0 T 0

4 - -11 7 0 V4 0

0 11 - -4 -7 V3 0

7 -7 4 - -4 v2 0

0 0 7 4 - V1 -11

0 0 0 0 11 S -

t v4 v3 v2 v1 s f

- 4 0 7 0 t 0

0 - 11 0 0 v4 0

0 3 - 4 11 v3 0

13 7 5 - 4 v2 0

0 0 3 8 - V1 11

0 0 13 0 5 S -

t v4 v3 v2 v1 s cr

Aliran Kapasitas Tersisa

Contoh: iterasi 2

(4)

SDA/Max Flow/Sur/V1.0/13

Misalnya diperoleh path s-v3-v1-v2-t Debit: min{13,11,8,13}=8

Update setiap f[u,v] += 8 dan

f[v,u] = -f[u,v], untuk setiap (u,v) dalam path

s t

v4 v3

v2 v1

5

13

3 11 8

5

3

13

7 11

4 4

11 4

7

Contoh: Pencarian path 3

- -4 0 -15 0 T 0

4 - -11 7 0 V4 0

0 11 - -4 1 V3 -8

15 -7 4 - -12 v2 0

0 0 -1 12 - V1 -11

0 0 8 0 11 S -

t v4 v3 v2 v1 s f

- 4 0 15 0 t 0

0 - 11 0 0 v4 0

0 3 - 4 3 v3 8

5 7 5 - 12 v2 0

0 0 11 0 - V1 11

0 0 5 0 5 S -

t v4 v3 v2 v1 s cr

Aliran Kapasitas Tersisa

Contoh: iterasi 3

SDA/Max Flow/Sur/V1.0/15

Tersisa path s-v3-v2-t Debit: min{5,4,5}=4

Update setiap f[u,v] += 4 dan

f[v,u] = -f[u,v], untuk setiap (u,v) dalam path

s t

v4 v3

v2 v1

5

5

11 3 5

3

5

7 11

12

4

11 4

15 8

Contoh: Pencarian path 4

Contoh: iterasi 4

- -4 0 -19 0 T 0

4 - -11 7 0 V4 0

0 11 - 0 1 V3 -12

19 -7 0 - -12 v2 0

0 0 -1 12 - V1 -11

0 0 12 0 11 S -

t v4 v3 v2 v1 S w

- 4 0 19 0 t 0

0 - 11 0 0 v4 0

0 3 - 0 3 v3 12

1 7 9 - 12 v2 0

0 0 11 0 - V1 11

0 0 1 0 5 S -

T v4 v3 v2 v1 s cr

Aliran Kapasitas Tersisa

(5)

SDA/Max Flow/Sur/V1.0/17

Tidak adalagi path dari s ke maka selesai dengan graph aliran maksimum dinyatakan dalam f[u,v] dengan mengambil harga yang positif

s t

v4 v3

v2 v1

5

1

11 3 9

3

1

7 11

12

11 4

19 12

Contoh: Pencarian path 5

s t

v2 v1

11

12

1 12

19

4 7

COntoh: maximum flow hasil

„ Aliran maksimum dari s ke t adalah 23

SDA/Max Flow/Sur/V1.0/19

Masalah Algoritma

„ Pencarian path merupakan hal yang paling kritikal dalam algoritma ini.

„ Kasus terburuk jika terjadi situasi sbb.

„ Bila path yang

ditemukan selalu melalui v2-v3 atau v3-v2 maka iterasi akan terjadi dalam jumlah yang besar

„ Setiap iterasi debit dalam path yang ditemukan hanya 1

s t

v3 v1

1

1000000

1000000 1000000

1000000

Pencarian path

„ Varian Algoritma Edmonds-Karp

„ Dengan BFS: “Shortest path” dengan arti jumlah sisi dalam path yang paling sedikit

„ Dengan DFS

(6)

SDA/Max Flow/Sur/V1.0/21

Analisis Algoritma

„ Pencarian flow path dilakukan pada maksimum E buah sisi, jadi O(E).

„ Banyak iterasi adalah sama dengan jumlah flow path yang ditemukan. Jika jumlah tsb adalah |f*| maka kompleksitas waktu adalah O(E |f*|)

Multi-source, Multi-target Problem

„ Dalam masalah yang lebih nyata source bisa berasal dari sejumlah verteks menuju ke sejumlah verteks lainnya.

„ Apakah algoritma Ford-Fulkerson bisa digunakan?

„ Contoh:

s1 t2

t1 s2

16

13

10 4 12

9

20

4 7

SDA/Max Flow/Sur/V1.0/23

„ Penambahan dummy vertex u/ verteks source dengan sisi mengarah ke setiap verteks source semula

„ Penambahan dummy vertex u/ vertex target dengan sisi mengarah dari setiap verteks target semula

„ Setiap sisi yang ditambahkan berkapasitas sangat besar (tak terhingga!)

s1 t2

v2 v1

t1 s2

16

13

10 4 12

9

14

20

4 7

s0 t0

Maximum Bipartite Matching (MBM)

„ Bipartite Graph: dalam suatu undirected graph G={V,E}, V terpartisi atas dua subset V1 dan V2 dan E’E dan setiap (u,v) E’ terpenuhi u V1 dan v V2.

„ Bipartite Matching: adalah E’’ dengan E’’E’, dimana setiap (u,v) E’’ serta untuk v’≠v dan u’≠u, tidak ada (u,v’) atau (u’,v) E’’.

„ Cardinality dari Bipartite Matching adalah |E’’|

„ Maximum Bipartite Matching adalah matching dengan cardinality terbesar

(7)

SDA/Max Flow/Sur/V1.0/25

v1 v2 v1 v2 v1 v2

Bipartite Graph, verteks terpartisi atas v1 dan v2

Bipartite Mathing, tidak

maksimal (cardinality 2) Maximal Bipartite Graph (cardinality 3)

Pencarian MBM sebagai Problem MaxFlow

„ Tambahkan verteks source dan sisi-sisi berarah yang mengarah ke setiap verteks dalam V1 dengan

kapasitas 1

„ Tambahkan verteks target dan sisi-sisi berarah yang mengarah dari setiap verteks dalam V2 dengan kapasitas 1

„ Setiap sisi dalam G adalah sisi dengan kapasitas 1 dan berarah dengan arah dari verteks di V1 ke verteks di V2

SDA/Max Flow/Sur/V1.0/27

v1 v2

Contoh

Contoh Kasus

a b

c d

0 0 0 1 s 1

t d c b a s c

a b

c d

s t

Sebagai Capacity Network Flow Graph (bobot tidak digambarkan karena berharga 1 atau 0)

Kapasitas dalam representasi matriks

(8)

SDA/Max Flow/Sur/V1.0/29

0 -1 0 0 t 0

0 0 0 0 d 0

1 0 0 -1 c 0

0 0 0 0 b 0

0 0 1 0 a -1

0 0 0 0 s 1

t d c b a s f

Jika path pertama s-a-c-t

a b

c d

s t

0 1 0 0 t 0

1 0 0 0 d 0

0 0 0 1 c 0

0 0 1 0 b 0

0 1 0 0 a 1

0 0 0 1 s 0

t d c b a s cr

-1 -1 0 0 t 0

1 0 0 -1 d 0

1 0 -1 0 c 0

0 0 1 0 b -1

0 1 0 0 a -1

0 0 0 1 s 1

t d c b a s f

Jika path kedua s-b-c-a-d-t

1 1 0 0 t 0

0 0 0 1 d 0

0 0 1 0 c 0

0 0 0 0 b 1

0 0 1 0 a 1

0 0 0 0 s 0

t d c b a s cr

a c

s t

SDA/Max Flow/Sur/V1.0/31

„ Tidak ada lagi path dalam cr dari s ke t, maka maxflow graph

„ Maka maximum matching adalah a-d dan b-c

a b

c d

s t

a b

c d

Referensi

Dokumen terkait

38/2017 Key determinants of innovation in rural areas Head of village and Government of Village Local government is key actor to boost local innovation Leaders who support