• Tidak ada hasil yang ditemukan

Algoritma-algoritma Shortest Path Lain

N/A
N/A
Protected

Academic year: 2023

Membagikan "Algoritma-algoritma Shortest Path Lain"

Copied!
20
0
0

Teks penuh

(1)

Algoritma-algoritma Shortest

Path Lain

(2)

Algoritma Bellman-Ford

• Memecahkan masalah Single Source SP untuk kasus bobot negatif

• Ide:

– Inisialisasi tabel shortest path dari source ke semua verteks lain ∞kecuali dari source ke source 0.

– relaksasi tabel shortest path dalam n-1 iterasi setiap pasangan verteks u dan v jika sisi (u,v) ada

• Syarat: tidak ada siklus negatif krn tidak ada solusi

• Kompleksitas O(NM) untuk N jumlah verteks dan M jumlah sisi

(3)

Relaksasi

• Update tabel jarak minimum ke verteks u (yaitu d[v]) yang diketahui hingga saat itu atas dasar informasi jarak minimum ke

verteks v (yaitu d[u]) dan bobot sisi antar u dan v (yaitu w[u][v])

relax(u,v,w) {

if (d[v] > d[u] + w[u][v])

d[v] = d[u] + w[u][v]

}

(4)

Algoritma

Inisialisasi tabel jarak d[ ] Iterate in n-1 times:

For each vertex pair of u & v where edge is (u,v) in in E[G]

do relax(u,v,weight)

// periksa jika terdapat siklus negatif

For each vertex pair of u & v where edge (u,v) is in in E[G]

do

If (d[v] > d[u] + weight[u][v]) then return false return true // tidak terdapat siklus negatif

(5)

u

x y

v

z

6

7

8

5 -2

2 9

7 -3

-4

0

Inisialisasi: hanya d[z] = 0, lainnya

(6)

u

x y

v

z

6

7

8

5 -2

2 9

7 -3

-4

6

7

0

iterasi pertama: Dari semua pasangan hanya d[u] dan d[x] yang terupdate saat relaksasi

(7)

u

x y

v

z

6

7

8

5 -2

2 9

7 -3

-4

6 4

2 7

0

iterasi kedua: Dari semua pasangan hanya d[v] dan d[y] yang terupdate saat relaksasi

(8)

u

x y

v

z

6

7

8

5 -2

2 9

7 -3

-4

2 4

2 7

0

iterasi ketiga: Dari semua pasangan hanya d[u] yang terupdate saat relaksasi (d[u] terupdate yang kedua kalinya)

(9)

u

x y

v

z

6

7

8

6 -2

2 9

7 -3

-4

2 4

-2 7

0

iterasi keempat: Dari semua pasangan hanya d[y] yang terupdate saat relaksasi (d[y] terupdate yang kedua kalinya)

(10)

Konstruksi Path

• Untuk konstruksi path diperlukan array

predesesor yang mencatat melalui verteks v mana harga d[u] diperoleh saat

relaksasi.

– Dari verteks tujuan, mundur ke predesesor, kemudian mundur lagi, dst… hingga sampai di verteks source

(11)

Improvement Relaksasi dari Yen

• Sebelum pass pertama urutan linear v1,v2, …, vn

• Partisi E ke dalam Ef dan Eb:

Ef: {(vi,vj) dl E: I < j}, definisikan Gf = (V, Ef) Eb: {(vi,vj) dl E: I > j}, definisikan Gb = (V, Eb)

Gf adalah graf assiklik dengan urutan topological

<v1,v2,…vn> dan Gb graf asiklik dengan urutan topological <vn, vn-1, …,v1>

• Modifikasi algoritma Bellman-Ford

– Visit setiap verteks dg urutan <v1,v2,…vn>, relakasi sisi-sisi dl Ef

– Visit setiap verteks dg urutan <vn,vn-1,…v1>, relakasi sisi-sisi dl Eb

(12)

Algoritma Floyd-Warshall

• All-pair Shortest path problem

– Menemukan shortest path dari setiap pasangan verteks dalam graf

• Berdasarkan formulasi rekursif Dynamic Programming

– Periksa path antara vi-vj apakah bisa lebih pendek melalui path vi-vk dan vk-vj ?

• Kompleksitas O(N

3

)

(13)

Ide Forumulasi Rekursif (DP)

• Verteks-verteks antara dalam shortest path

• jika V = {1,2,3,…,N}

Untuk k=0,…, n, maka d

ij(k) =

wij, untuk k=0

• Min(dij(k-1), dik(k-1)+dkj(k-1)), untuk k > 0

• Solusi adalah d

ij(n)

merupakan matriks

shortest path dari verteks i ke verteks j.

(14)

• Formulasi tsb dpt di visualisasi dengan mudah sbb

• Pada iterasi ke k, elemen d(i,j)

dibandingkan

dengan d(i,k)+d(k,j)

d(k, j)

(15)

1

5 4

2

-4 3

-5

6 2

4

1

3 7

0 6

∞ 0

-5

∞ 2

∞ 0

4

7 1

∞ 0

-4

∞ 8

3 0

8

(16)

0 6

-2 0

-5 5

2

∞ 0

4

7 1

∞ 0

-4

∞ 8

3 0

0 6

-2 0

-5 5

2

11 5

0 4

7 1

∞ 0

-4 4

8 3

0

-2 0

-5 -1

2

11 5

0 4

7 1

∞ 0

-4 4

8 3

0

-2 0

-5 -1

2

3 5

0 4

7

-1 1

-4 0

3

-4 4

-1 3

0

(17)

0 6

1 5

8

-2 0

-5 -1

2

3 5

0 4

7

-1 1

-4 0

3

-4 2

-3 1

0

(18)

Konstruksi Path

• Gunakan matriks predesesor

• Saat inisialisasi diisi dengan i jika sisi (i, j) ada dalam E

• Saat iterasi, jika elemen jarak(i, j) terupdate

pada iterasi ke k, maka elemen predesesor (i, j) diupdate dengan harga k

• Setelah semua iterasi maka elemen predesesor menunjukan verteks k antara yang dilalui path dari i ke j dan diperiksa lagi secara rekursif

untuk mendapatkan verteks antara dari i ke k dan dari k ke j.

(19)

- 5

4 3

4

1 -

4 3

4

1 2

- 3

4

1 2

4 0

4

1 5

4 3

-

Contoh

• eg yang diperoleh dari contoh sebelumnya:

• Dari 3 ke 5, melalui 1

• Dari 3 ke 1, melalui 4

• Dari 3 ke 4, melalui 2

• Dari 3 ke 2, langsung

• Dari 2 ke 4, langsung

• Dari 4 ke 1, langsung

• Dari 1 ke 5, langsung

(20)

• Matriks predesesor setiap iterasi bisa

dilihat di buku Cormen (Edisi 1) hal 561.

Referensi

Dokumen terkait

evsjv‡`‡ki bvixi mvgvwRK wbivcËv RwbZ mgm¨vi aviYv I KviY e¨vL¨v Ki‡Z cvi‡e| 5.. evsjv‡`‡ki bvixi mvgvwRK wbivcËv RwbZ mgm¨vi cÖfve we‡kølY Ki‡Z cvi‡e|