Bab 5_algoritma Graf

12
BAB 5 ALGORITMA-ALGORITMA PADA GRAF BREADTH FIRST SEARCH (BFS) Start dari suatu titik simpul sumber (source vertex, misal : s ), eksplorasi sisi-sisi dari G dan mengunjungi vertex-vertex dengan urutan tertentu. Input : G(V,E)← direpresentasi oleh adjacency list Color[u] π[u] → predecessor (nenek moyang) dari u d[u] → distance of u from s BFS(G,s) for each vertex uV[G]-{s} do color[u]← white d[u] ← ∞ π[u] ← nil color[s] ← red d[s] ← 0 π[s] ← nil Q ← {s} while Q do u ← head[Q]

description

Mata kuliah Desain Analisis Algoritma

Transcript of Bab 5_algoritma Graf

BAB 5ALGORITMA-ALGORITMA PADA GRAFBREADTH FIRST SEARCH (BFS) Start dari suatu titik simpul sumber (source vertex, misal : s ), eksplorasi sisi-sisi dari G dan mengunjungi vertex-vertex dengan urutan tertentu. Input : G(V,E) direpresentasi oleh adjacency listColor[u][u] predecessor (nenek moyang) dari u d[u] distance of u from s BFS(G,s)for each vertex uV[G]-{s} do color[u] whited[u] [u] nilcolor[s] redd[s] 0[s] nilQ {s}while Q dou head[Q]for each v Adj[u] doif color[v]= whitethen color[v] redd[v] d[u]+1[v] uENQUEUE(Q,v)DEQUEUE(Q)Color[u] blue Lihat gambar berikut ini:

Initially s = merah, vertex lainnya putih. Tempatkan s pada head dari Q dan set d[s] = 0. Jika u ada pada head dari Q, maka untuk setiap v yg merupakan vertex yang adjacent dengan u dan v = white, set edge (u,v), set [v] u, warnai v = merah dan set d[v] = d[u] + 1, warnai u = biru dan remove u dari Q.Running time inisialisasi O(v) Setiap vertex ada di Q sekali saja = O(v) Setiap edge pada adjacency list discan sekali saja = O(E ) Running timenya = O(v+E) d[u] = (s,u) yaitu shortest path / jumlah edge pada path BFS-tree terbentuk dari relasi :

DEPTH FIRST SEARCH (DFS) Pada DFS, edges diexplore ( vertex-vertex dikunjungi ) berdasarkan vertex yang terbaru ( v ) yang ditemukan, dan masih mempunyai unexplored edges. Jika semua edges dari v sudah di explore, backtrack ke vertex sebelum v, search dilanjutkan. 2 time stamp untuk setiap vertex u : d[u] = waktu saat u ditemukan. f[u] = waktu saat semua tetangga dari u sudah ditemukan ( semua edgenya sudah di explore )

DFS (G)for each vertex u V(G) docolor[u] white[u] niltime 0for each vertex uV(G) doif color[u] = white then DFS-VISIT(u)

DFS-VISIT(u)color[u] redd[u] time ; ctt: time time + 1for each vAdj(u) doif color[v]=whitethen (v)uDFS-VISIT(v)color[u]bluef[u]time; timetime+1

Perhatikan Gambar berikut ini: ( start di vertex s )

C

Keterangan :T : Tree edges , yaitu edges pada DFS forestB : Dari descendant ke ancestor ( Back edge )F : Dari ancestor ke descendant C : yang lainnya Jadi dengan algoritma DFS ada 4 jenis edge. Tugas : a) Dari direct graf berikut, dengan algoritma DFS, untuk setiap vertex, isi : d[vertex]; f[vertex] sekaligus pewarnaannya dan untuk tiap sisi, tentukan nama sisinya ( T, B, F atau C ), dengan start pada vertex a.b) Dengan algoritma BFS, carilah BFS tree dari direct graf berikut ini ( start dari vertex a )

Teorema : Jika G undirect graph, maka setiap edge adalah tree edge (T) atau back edge (B).

CONTOH:dcba

gfe

h

Dengan algoritma DFS, maka pengisian nilai-nilai : d[u], f[u], pewarnaan vertex dan penamaan sisi/edgenya sebagai berikut: ( Catatan : start di vertex f )

B