A. TUJUAN PEMBELAJARAN PRAKTIKUM 31 GRAPH ALGORITMA TRAVERSAL GRAPH 1. Memahami konsep dari Algoritma Traversal Graph yaitu algoritma Breadth First Search (BFS) dan Depth First Search (DFS). 2. Memahami cara mengimplementasikan algoritma traversal Graph yaitu BFS dan DFS ke dalam bahasa pemrograman Java. B. DASAR TEORI AlGORITMA TRAVERSAL GRAPH Terdapat beberapa perbedaan Tree dan Graph dijelaskan pada tabel 31.1. Tabel 31.1 Perbedaan Tree dan Graph Tree Graph Mempunyai root Terdapat path unik dari root menuju ke vertex tertentu Tidak mempunyai root, proses traversal dapat dilakukan pada sembarang vertex. Graph memungkinkan memiliki cycle yang menghasilkan multiple visit ke sebuah vertex Terdapat dua metode Algoritma Traversal Graph yaitu : 1. Pencarian Melebar Pertama (Breadth-First Search) Pada metode Breadth-First Search, semua vertex pada level n akan dikunjungi terlebih dahulu sebelum mengunjungi vertex-vertex pada level n+1. Pencarian dimulai dari vertex awal terus ke level ke-1 dari kiri ke kanan, kemudian berpindah ke level berikutnya demikian pula dari kiri ke kanan sampai ditemukannya solusi. o Algoritma BFS 1. Tandai semua Vertex yang terdapat pada Graph dengan warna WHITE 241
2. Tentukan Vertex Awal. 3. Buat sebuah Queue, masukkan vertex awal ke Queue, tandai dengan warna GRAY 4. Ambil vertex dari Queue (sebut Vertex P), tandai dengan BLACK, langsung tulis 5. jika Vertex P GOAL, diganti dengan NEIGHBORS/tetangganya (pilih Vertex yang masih berwarna WHITE), masukkan dalam QUEUE, tandai Vertex-vertex tersebut dengan warna GRAY. Lakukan pengulangan langkah 5. 6. Bila vertex P = GOAL, selesai Sebagai contoh, kita lakukan algoritma traversal pada graph pada gambar 1. Gambar 31.1. Contoh Graph Langkah-langkah algoritma traversal Graph menggunakan BFS. Terdapat dua QUEUE yaitu visitqueue untuk menyimpan Vertex-Vertex yang sedang dikunjungi dan visitlist untuk Vertex-Vertex yang sudah dikunjungi. Warnai semua Vertex dengan WHITE dan masukan Vertex Awal yaitu A ke visitqueue, warna Vertex A dengan GRAY visitlist visitqueue A Gambar 31.2 Langkah 1 Algoritma Traversal Graph : BFS 242
Ambil A dari visitqueue, warnai dengan BLACK dan masukkan dalam visitlist. Cari tetangga dari Vertex A yang masih berwarna WHITE yaitu B, C dan G, masukkan dalam visitqueue. Warnai Vertex B,C,G dengan GRAY. visitlist A visitqueue B C G Gambar 31.3 Langkah 2 Algoritma Traversal Graph : BFS Ambil B dari visitqueue, warnai dengan BLACK dan masukkan dalam visitlist. Cari tetangga dari Vertex B yang masih berwarna WHITE yaitu D, masukkan dalam visitqueue. Warnai Vertex D dengan GRAY. visitlist A B visitqueue C G D Gambar 31.4 Langkah 3 Algoritma Traversal Graph : BFS Ambil C dari visitqueue, warnai dengan BLACK dan masukkan dalam visitlist. Cari tetangga dari Vertex C yang masih berwarna WHITE. Tetangga dari Vertex C adalah G tapi berwarna GRAY, sehingga tidak ada Vertex yang dapat dimasukkan dalam visitqueue. visitlist A B C visitqueue G D Gambar 31.5 Langkah 4 Algoritma Traversal Graph : BFS Ambil G dari visitqueue, warnai dengan BLACK dan masukkan dalam visitlist. Vertex G tidak memiliki tetangga sehingga tidak ada Vertex yang dapat dimasukkan dalam visitqueue. 243
visitlist A B C G visitqueue D Gambar 31.6 Langkah 5 Algoritma Traversal Graph : BFS Ambil D dari visitqueue, warnai dengan BLACK dan masukkan dalam visitlist. Cari tetangga dari Vertex D yang masih berwarna WHITE yaitu E dan F, masukkan dalam visitqueue. Warnai Vertex E dan F dengan GRAY. visitlist A B C G D visitqueue E F Gambar 31.7 Langkah 6 Algoritma Traversal Graph : BFS Ambil E dari visitqueue, warnai dengan BLACK dan masukkan dalam visitlist. Vertex E tidak memiliki tetangga sehingga tidak ada Vertex yang dapat dimasukkan dalam visitqueue. visitlist A B C G D E visitqueue F Gambar 31.8 Langkah 7 Algoritma Traversal Graph : BFS Ambil F dari visitqueue, warnai dengan BLACK dan masukkan dalam visitlist. Vertex F tidak memiliki tetangga sehingga tidak ada Vertex yang dapat dimasukkan dalam visitqueue. visitlist A B C G D E F visitqueue Gambar 31.9 Langkah 8 Algoritma Traversal Graph : BFS 244
Karena Queue kosong maka proses traversal selesai 2. Pencarian Mendalam Pertama (Depth-First Search) Pada Depth First Search, proses pencarian akan dilaksanakan pada semua anaknya sebelum dilakukan pencarian ke node-node yang selevel. Pencarian dimulai dari node akar ke level yang lebih tinggi. Proses ini diulangi terus hingga ditemukaannya solusi. Algoritma DFS 1. Tandai semua Vertex yang terdapat pada Graph dengan warna WHITE 2. Tentukan Vertex Awal. 3. Buat sebuah Stack, masukkan vertex awal ke Stack, tandai dengan warna GRAY 4. Ambil vertex dari Stack (sebut Vertex P), tandai dengan BLACK, langsung tulis 5. jika Vertex P GOAL, diganti dengan NEIGHBORS/tetangganya (pilih Vertex yang masih berwarna WHITE), masukkan dalam Stack, tandai Vertex-vertex tersebut dengan warna GRAY. Lakukan pengulangan langkah 5. 6. Bila vertex P = GOAL, selesai Sebagai contoh, kita lakukan algoritma traversal pada graph pada gambar 31.1. Langkah-langkah algoritma traversal Graph menggunakan DFS. Terdapat Stack yaitu visitstack untuk menyimpan Vertex-Vertex yang sedang dikunjungi dan Queue untuk visitlist untuk Vertex-Vertex yang sudah dikunjungi. Warnai semua Vertex dengan WHITE dan masukan Vertex Awal yaitu A ke visitstack, ubah warna Vertex A menjadi GRAY visitlist visitstack A Gambar 31.10 Langkah 1 Algoritma Traversal Graph : DFS 245
Ambil A dari visitstack, warnai dengan BLACK dan masukkan dalam visitlist. Cari tetangga dari Vertex A yang masih berwarna WHITE yaitu B, C dan G, masukkan dalam visitstack. Warnai Vertex B,C,G dengan GRAY. visitlist A visitstack G C B Gambar 31.11 Langkah 2 Algoritma Traversal Graph : DFS Ambil B dari visitstack, warnai dengan BLACK dan masukkan dalam visitlist. Cari tetangga dari Vertex B yang masih berwarna WHITE yaitu D, masukkan dalam visitstack. Warnai Vertex D dengan GRAY. visitlist A B visitstack G C D Gambar 31.12 Langkah 3 Algoritma Traversal Graph : DFS Ambil D dari visitstack, warnai dengan BLACK dan masukkan dalam visitlist. Cari tetangga dari Vertex D yang masih berwarna WHITE yaitu E dan F. visitlist A B D visitstack G C F E Gambar 31.13 Langkah 4 Algoritma Traversal Graph : DFS Ambil E dari visitstack, warnai dengan BLACK dan masukkan dalam visitlist. Vertex E tidak memiliki tetangga sehingga tidak ada Vertex yang dapat dimasukkan dalam visitstack. 246
visitlist A B D E visitstack G C F Gambar 31.14 Langkah 5 Algoritma Traversal Graph : DFS Ambil F dari visitstack, warnai dengan BLACK dan masukkan dalam visitlist. Cari tetangga dari Vertex F yang masih berwarna WHITE. Karena tetangga dari E dan G tidak berwarna WHITE maka tidak ada yang dimasukkan ke visitstack. visitlist A B D E F visitstack G C Gambar 31.15 Langkah 6 Algoritma Traversal Graph : DFS Ambil C dari visitstack, warnai dengan BLACK dan masukkan dalam visitlist. Cari tetangga dari Vertex C yang masih berwarna WHITE. Karena tetangga dari C adalah G tidak berwarna WHITE maka tidak ada yang dimasukkan ke visitstack. visitlist A B D E F C visitstack G Gambar 31.16 Langkah 7 Algoritma Traversal Graph : DFS Ambil G dari visitstack, warnai dengan BLACK dan masukkan dalam visitlist. Vertex G tidak memiliki tetangga sehingga tidak ada Vertex yang dapat dimasukkan dalam visitstack. 247
visitlist A B D E F C G visitstack Gambar 31.17 Langkah 8 Algoritma Traversal Graph : DFS Karena Stack kosong maka proses traversal selesai C. TUGAS PENDAHULUAN Buatlah review mengenai : Konsep dari Algoritma BFS dan DFS Berikan 1 contoh Graph selesaikan dengan algoritma traversal BFS dan DFS. D. PERCOBAAN Pada praktikum algoritma traversal Graph menggunakan algoritma BFS dan DFS ini tambahkan pada class DiGraph. Tabel 31.1 Method-method yang ditambahkan pada class DiGraph untuk mengimplementasikan algoritma BFS dan DFS Method public void colorwhite() public VertexColor getcolor(t v) public VertexColor setcolor(t v, VertexColor c) public static <T> LinkedList<T> bfs( DiGraph<T> g, T svertex) public static <T> LinkedList<T> bfs( DiGraph<T> g, T svertex) Kegunaan Memberikan warna pada setiap Vertex dengan warna WHITE Mengembalikan warna dari Vertex Memberikan warna dari Vertex v dan mengembalikan warna sebelumnya dari Vertex tersebut. Algoritma BFS, mengembalikan list vertex yang dikunjungi dengan algoritma BFS Algoritma DFS, mengembalikan list vertex yang dikunjungi dengan algoritma DFS 248
Percobaan 1 : Method colorwhite() untuk memberikan warna pada setiap Vertex dengan warna WHITE public void colorwhite() { Iterator it = vinfo.iterator(); while (it.hasnext()) { VertexInfo<T> v = (VertexInfo<T>) it.next(); v.color = VertexColor.WHITE; } } Percobaan 2 : Method getcolor() untuk mengembalikan warna dari Vertex public VertexColor getcolor(t v) { int index = getvinfoindex(v); return vinfo.get(index).color; } Percobaan 3 : Method setcolor() untuk memberikan warna dari Vertex v dan mengembalikan warna sebelumnya dari Vertex tersebut. public VertexColor setcolor(t v, VertexColor c) { int index = getvinfoindex(v); VertexColor temp = vinfo.get(index).color; vinfo.get(index).color = c; return temp; } E. LATIHAN 1. Implementasikan algoritma traversal Graph yaitu BFS. public static <T> LinkedList<T> bfs( DiGraph<T> g, T svertex) 2. Implementasikan algoritma traversal Graph yaitu DFS. public static <T> LinkedList<T> dfs( DiGraph<T> g, T svertex) F. LAPORAN RESMI Kerjakan hasil percobaan(d) dan latihan(e) di atas dan tambahkan analisa. 249