My first Magazine pemrograman-kompetitif-dasar | Page 138

11 Algoritma Graf Dengan demikian, dapat dirumuskan DP berikut:  f (i, j, k) = w[i][ j], k = 0 min( f (i, j, k − 1), f (i, k, k − 1) + f (k, j, k − 1)), k > 0 Shortest path dari node s ke node t dinyatakan pada f (s,t,V ). Implementasi Seperti DP umumnya, kita dapat menggunakan top-down atau bottom-up . Implementasi yang biasa digunakan adalah versi bottom-up menggunakan optimisasi flying table , karena pendek dan mudah ditulis. Optimisasi flying table dapat dilakukan sebab perhitungan DP f (_, _, k) hanya membutuhkan informasi f (_, _, k − 1). Representasi graf yang mudah digunakan adalah adjacency matrix . Algoritma Algoritma 67 menunjukkan implementasinya. Algoritma 67 Implementasi algoritma Floyd—Warshall dengan DP bottom-up . 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: function F LOYD -W ARSHALL () dist ← new integer[V + 1][V + 1] FILL A RRAY (dist, ∞) for i ← 1, V do for j ← 1, V do dist[i][ j] ← w[i][ j] end for end for . Base case for k ← 1, V do . Pengisian tabel for i ← 1, V do for j ← 1, V do dist[i][ j] ← min(dist[i][ j], dist[i][k] + dist[k][ j]) end for end for end for . Kini dist[i][ j] berisi shortest path dari i ke j return dist . Kembalikan tabel DP end function Terlihat jelas bahwa kompleksitas waktunya adalah O(V 3 ). Meskipun lebih lambat daripada menggunakan algoritma Dijkstra atau Bellman—Ford satu per satu, Floyd—Warshall memiliki kelebihan dalam kemudahan implementasinya. Cukup dengan tiga lapis for ... loop, shortest path antar setiap node ditemukan. Algoritma ini cocok digunakan apabila hanya terdapat sedikit node , dan Anda hendak menghemat waktu pengetikan kode. 11.2 Minimum Spanning Tree Persoalan lainnya yang cukup klasik pada permasalahan graf adalah mencari Minimum Spanning Tree pada graf berbobot tidak berarah. Spanning Tree dari suatu graf adalah subgraf yang mana seluruh node pada graf tersebut terhubung dan membentuk tree . 128