BFS dan DFS. Bahan Kuliah IF2151 Strategi Algoritmik. Oleh: Rinaldi Munir

dokumen-dokumen yang mirip
Algoritma Traversal di dalam Graf

Penerapan DFS dan BFS dalam Pencarian Solusi Game Japanese River IQ Test

Penerapan Algoritma Greedy dan Algoritma BFS untuk AI pada Permainan Greedy Spiders

Penerapan Algoritma DFS dan BFS untuk Permainan Wordsearch Puzzle

Aplikasi Graf Breadth-First Search Pada Solver Rubik s Cube

PENERAPAN ALGORITMA BFS DFS DAN KNUTH-MORRIS-PRATT PADA PENCARIAN BERKAS DALAM KOMPUTER

Penerapan Algoritma BFS, DFS, DLS dan IDS dalam Pencarian Solusi Water Jug Problem

Penyelesaian Permasalahan Knight s Tour Menggunakan Algoritma Breadth First Search (BFS)

PENERAPANAN ALGORITMA BFS, DFS, DAN UCS UNTUK MENCARI SOLUSI PADA MASALAH ROMANIA

Perbandingan BFS, DFS dan Greedy pada Permainan Logika Crossing Bridge

PENERAPAN ALGORITMA BFS PADA CHINESE SLIDE BLOCK PUZZLE (KLOTSKI)

Implementasi Algoritma DFS pada permainan Monument Valley

Implementasi Algoritma BFS dan DFS dalam Penyelesaian Token Flip Puzzle

Penerapan Algoritma DFS pada Permainan Sudoku dengan Backtracking

Implementasi Algoritma DFS pada Pewarnaan Gambar Sederhana Menggunakan Bucket tool

ALGORITMA PENCARIAN SIMPUL SOLUSI DALAM GRAF

Pencarian Solusi Permainan Flow Free Menggunakan Brute Force dan Pruning

PENGUNAAN DUA VERSI ALGORITMA BACKTRACK DALAM MENCARI SOLUSI PERMAINAN SUDOKU

Penggunaan Algoritma DFS dalam Pencarian Strategi Permainan Catur

PENERAPAN ALGORITMA RUNUT-BALIK DALAM PENCARIAN SOLUSI TEKA-TEKI BATTLESHIP

TOPOLOGICAL SORT dengan DFS dan METODE LAIN

Kode MK/ Pemrograman Terstruktur 2

Aplikasi Branch and Bound Pada Pencarian Jalan Pada Software Navigasi

Breadth/Depth First Search (BFS/DFS) Bahan Kuliah IF2211 Strategi Algoritmik Oleh: Rinaldi Munir Update: Nur Ulfa Maulidevi 2 Maret 2015

IMPLEMENTASI ALGORITMA BFS (BREADTH-FIRST SEARCH) PADA APLIKASI WEB CRAWLER

Aplikasi Algoritma Traversal Dalam Binary Space Partitioning

Penerapan Algoritma BFS dan DFS dalam Mencari Solusi Permainan Rolling Block

Penerapan Algoritma BFS dan DFS dalam Permainan Ular Tangga

Penerapan strategi BFS untuk menyelesaikan permainan Unblock Me beserta perbandingannya dengan DFS dan Branch and Bound

MAKALAH STRATEGI ALGORITMIK (IF 2251) ALGORITMA RUNUT BALIK DALAM GAME LABIRIN

Penerapan Algoritma Branch and Bound untuk Penentuan Jalur Wisata

Implementasi Intuitif Penyelesaian Labirin dengan Algoritma Depth-First Search

Penerapan Algoritma Backtracking. Blind Search untuk Menentukan Penjadwalan Mengajar.

Breadth/Depth First Search. Bahan Kuliah IF2211 Strategi Algoritmik Oleh: Rinaldi Munir Update: Masayu Leylia Khodra 22 September 2013

Pelacakan dan Penentuan Jarak Terpendek terhadap Objek dengan BFS (Breadth First Search) dan Branch and Bound

Penggunaan Algoritma DFS dan BFS pada Permainan Three Piles of Stones

MODUL PRAKTIKUM STRUKTUR DATA Modul ke-1, Pertemuan ke-1 Nama file : P01-XXX (XXX adalah 3 digit terakhir NIM) Deskripsi: Senarai, Traversal

Perbandingan Algoritma Brute Force dan Breadth First Search dalam Permainan Onet

Analisis Penerapan Algoritma Backtracking Pada Pencarian Jalan Keluar di Dalam Labirin

Design and Analysis Algorithm. Ahmad Afif Supianto, S.Si., M.Kom. Pertemuan 08

SOLUSI ALGORITMA BACKTRACKING DALAM PERMAINAN KSATRIA MENYEBRANG KASTIL

Pemanfaatan Algoritma BFS pada Graf Tak Berbobot untuk Mencari Jalur Terpendek

Algoritma Brute Force (Bagian 1) Oleh: Rinaldi Munir

Mendeteksi Blob dengan Menggunakan Algoritma BFS

Algoritma Runut-balik (Backtracking) Bahan Kuliah IF2251 Strategi Algoritmik Oleh: Rinaldi Munir

Algoritma Runut-balik (Backtracking)

ANALISIS PENERAPAN ALGORITMA RUNUT-BALIK DALAM PENCARIAN SOLUSI PERSOALAN LOMPATAN KUDA

Analisis Pengimplementasian Algoritma Greedy untuk Memilih Rute Angkutan Umum

Pencarian Pohon Solusi Permainan Alchemy Menggunakan Algoritma BFS dan DFS

Studi Algoritma Optimasi dalam Graf Berbobot

Pencarian Solusi Permainan Fig-Jig Menggunakan Algoritma Runut-Balik

AlgoritmaBrute Force. Desain dan Analisis Algoritma (CS3024)

Penerapan Algoritma Runut-Balik (Backtracking) pada Permainan Nurikabe

Penerapan Algoritma Transversal pada Graf dan Algoritma Pencocokan String dalam Sistem Jual-Beli Tiket Bioskop

Aplikasi Algoritma Runut Balik dalam Pembangkitan Elemen Awal Permainan Sudoku

Penerapan BFS dan DFS pada Pencarian Solusi

METODE BRANCH AND BOUND UNTUK MENEMUKAN SHORTEST PATH

Perbandingan Algoritma Brute Force dan Backtracking dalam Permainan Word Search Puzzle

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT

Aplikasi Algoritma Teori Graf Pada Robot Pemecah Labirin Cerdas

PENERAPAN ALGORITMA RUNUT-BALIK (BACKTRACKING) DALAM PENYELESAIAN PERMAINAN SUDOKU

IMPLEMENTASI ALGORITMA BREADTH FIRST SEARCH DAN STRING MATCHING PADA SISTEM PAKAR

Perbandingan Algoritma Depth-First Search dan Algoritma Hunt-and-Kill dalam Pembuatan Labirin

Penerapan Algoritma Runut-balik pada Permainan Math Maze

PENGGUNAAN ALGORITMA BRANCH AND BOUND UNTUK MENYELESAIKAN PERSOALAN PENCARIAN JALAN (PATH-FINDING)

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

PENERAPAN ALGORITMA BACKTRACKING PADA PERMAINAN WORD SEARCH PUZZLE

PENCARIAN BARANG DALAM BASIS DATA ONLINE SHOP MENGGUNAKAN ALGORITMA BFS, DFS, DAN KMP

Analisis Perbandingan Algoritma Rekursif dan Non-Rekursif secara DFS (Depth First Search) dengan Memanfaatkan Graf

Penerapan Algoritma Backtracking untuk Menyelesaikan Permainan Hashiwokakero

Penerapan Algoritma DFS dalam Menyelesaikan Permainan Buttons & Scissors

Algoritma Brute Force

Penggunaan Metode Depth First Search (DFS) dan Breadth First Search (BFS) pada Strategi Game Kamen Rider Decade Versi 0.3

PERBANDINGAN ALGORITMA BFS DAN DFS DALAM PEMBUATAN RUTE PERJALANAN OBJEK PERMAINAN 2 DIMENSI

Pemanfaatan Algoritma Runut-Balik dalam Menyelesaikan Puzzle NeurOn dalam Permainan Logical Cell

1, 2, 3

Algoritma String Matching pada Mesin Pencarian

Implementasi Algoritma Backtracking untuk Memecahkan Puzzle The Tile Trial pada Permainan Final Fantasy XIII-2

PENCARIAN BERUNTUN (SEQUENTIAL SEARCHING)

Penggunaan Algoritma Greedy dalam Membangun Pohon Merentang Minimum

PENGGUNAAN ALGORITMA GREEDY PADA MESIN PENCARI

PENERAPAN ALGORITMA BRANCH AND BOUND DALAM MENENTUKAN RUTE TERPENDEK UNTUK PERJALANAN ANTARKOTA DI JAWA BARAT

PEMBANGKIT TEKA-TEKI SILANG DENGAN ALGORITMA BACKTRACKING SERTA APLIKASI PERMAINANNYA YANG BERBASIS WEB

Algoritma Puzzle Pencarian Kata

Penerapan BFS dan DFS pada Pencarian Solusi

Pohon. Bahan Kuliah IF2120 Matematika Diskrit. Program Studi Teknik Informatika ITB. Rinaldi M/IF2120 Matdis 1

Pembangkit Teka-Teki Silang dengan Algoritma Backtracking serta Aplikasi Permainannya yang Berbasis Web

Algoritma Branch & Bound untuk Optimasi Pengiriman Surat antar Himpunan di ITB

Algoritma Pencarian String dalam Pemilihan Anggota Sebuah Organisasi

Penerapan Algoritma Backtracking pada Pewarnaan Graf

Analisis Beberapa Algoritma dalam Menyelesaikan Pencarian Jalan Terpendek

Penyelesaian Permasalahan Nonogram dengan Algoritma Runut Balik

Penerapan Algoritma Greedy dalam Optimasi Keuntungan Perusahaan Pengiriman Barang

Perbandingan BFS dan DFS pada Pembuatan Solusi Penyelesaian Permainan Logika

Penerapan BFS dan DFS dalam Garbage Collection

Aplikasi Graf pada Persoalan Lintasan Terpendek dengan Algoritma Dijkstra

Penerapan Algoritma Greedy untuk Memecahkan Masalah Pohon Merentang Minimum

Pembentukan pohon pencarian solusi dan perbandingan masingmasing algoritma pembentuknya dalam simulasi N-Puzzle

Penggunaan BFS dan DFS untuk Pixel Traversing

Penyelesaian Permainan 3 missionaries and 3 cannibals Dengan Algoritma Runut-Balik

Transkripsi:

BFS dan DFS Bahan Kuliah IF2151 Strategi Algoritmik Oleh: Rinaldi Munir

Traversal di dalam graf berarti mengunjungi simpul-simpul dengan cara yang sistematik. Algoritma traversal di dalam graf: 1. BFS: Pencarian Melebar (Breadth First Search), 2. DFS: Pencarian Mendalam (Depth First Search).

Algoritma Pencarian Melebar (BFS) Traversal dimulai dari simpul v. Algoritma: 1. Kunjungi simpul v, 2. Kunjungi semua simpul yang bertetangga dengan simpul v terlebih dahulu. 3. Kunjungi simpul yang belum dikunjungi dan bertetangga dengan simpul-simpul yang tadi dikunjungi, demikian seterusnya.

Jika graf berbentuk pohor berakar, maka semua simpul pada aras d dikunjungi lebih dahulu sebelum mengunjungi simpul-simpul pada aras d + 1.

Contoh 1: (misalkan traversal dimulai dari simpul 1) 1 1 1 2 3 2 3 2 3 4 4 5 6 7 4 5 6 7 5 6 7 1 1 8 9 (a) (b) (c) Gambar (a) BFS(1): 1, 2, 3, 4, 5, 6, 7, 8. Gambar (b) BFS(1): 1, 2, 3, 4, 5, 6, 7, 8 Gambar (c) BFS(1): 1, 2, 3, 4, 5, 6, 7, 8, 9

Pseudo-code algoritma: Diperlukan: 1. Matriks ketetanggaan A = [a ij ] yang berukuran n n, a ij = 1, jika simpul i dan simpul j bertetangga, a ij = 0, jika simpul i dan simpul j tidak bertetangga. 2. Antrian q untuk menyimpan simpul yang telah dikunjungi.

3. Tabel boolean yang bernama dikunjungi dikunjungi : array[l..n] of boolean dikunjungi[i] = true jika simpul i sudah dikunjungi dikunjungi[i] = false jika simpul i belum dikunjungi Inisialisasi tabel: for i l to n do dikunjungi[i] false endfor

procedure BFS(input v:integer) { Traversal graf dengan algoritma pencarian BFS. Masukan: v adalah simpul awal kunjungan Keluaran: semua simpul yang dikunjungi dicetak ke layar } Deklarasi w : integer q : antrian; procedure BuatAntrian(input/output q : antrian) { membuat antrian kosong, kepala(q) diisi 0 } procedure MasukAntrian(input/output q:antrian, input v:integer) { memasukkan v ke dalam antrian q pada posisi belakang } procedure HapusAntrian(input/output q:antrian,output v:integer) { menghapus v dari kepala antrian q } function AntrianKosong(input q:antrian) boolean { true jika antrian q kosong, false jika sebaliknya } Algoritma: BuatAntrian(q) { buat antrian kosong } write(v) { cetak simpul awal yang dikunjungi } dikunjungi[v] true { simpul v telah dikunjungi, tandai dengan true} MasukAntrian(q,v) { masukkan simpul awal kunjungan ke dalam antrian} { kunjungi semua simpul graf selama antrian belum kosong } while not AntrianKosong(q) do HapusAntrian(q,v) { simpul v telah dikunjungi, hapus dari antrian } for tiap simpul w yang bertetangga dengan simpul v do if not dikunjungi[w] then write(w) {cetak simpul yang dikunjungi} MasukAntrian(q,w) dikunjungi[w] true endif endfor endwhile { AntrianKosong(q) }

procedure BFS(input v:integer) { Traversal graf dengan algoritma pencarian BFS. Masukan: v adalah simpul awal kunjungan Keluaran: semua simpul yang dikunjungi dicetak ke layar } Deklarasi w : integer q : antrian; procedure BuatAntrian(input/output q : antrian) { membuat antrian kosong, kepala(q) diisi 0 } procedure MasukAntrian(input/output q:antrian, input v:integer) { memasukkan v ke dalam antrian q pada posisi belakang } procedure HapusAntrian(input/output q:antrian,output v:integer) { menghapus v dari kepala antrian q } function AntrianKosong(input q:antrian) boolean { true jika antrian q kosong, false jika sebaliknya } Algoritma: BuatAntrian(q) { buat antrian kosong } write(v) { cetak simpul awal yang dikunjungi } dikunjungi[v] true { simpul v telah dikunjungi, tandai dengan true} MasukAntrian(q,v) { masukkan simpul awal kunjungan ke dalam antrian} { kunjungi semua simpul graf selama antrian belum kosong } while not AntrianKosong(q) do HapusAntrian(q,v) { simpul v telah dikunjungi, hapus dari antrian } for w l to n do if A[v,w] = 1 then { v dan w bertetangga } if not dikunjungi[w] then write(w) {cetak simpul yang dikunjungi} MasukAntrian(q,w) dikunjungi[w] true endif endif endfor endwhile { AntrianKosong(q) }

Metode Pencarian Mendalam (DFS) Traversal dimulai dari simpul v. Algoritma: 1. Kunjungi simpul v, 2. Kunjungi simpul w yang bertetangga dengan simpul v. 3. Ulangi DFS mulai dari simpul w.

4. Ketika mencapai simpul u sedemikian sehingga semua simpul yang bertetangga dengannya telah dikunjungi, pencarian dirunut-balik (backtrack) ke simpul terakhir yang dikunjungi sebelumnya dan mempunyai simpul w yang belum dikunjungi. 5. Pencarian berakhir bila tidak ada lagi simpul yang belum dikunjungi yang dapat dicapai dari simpul yang telah dikunjungi.

Contoh 2: (misalkan traversal dimulai dari simpul 1) 1 1 1 2 3 2 3 2 3 4 4 5 6 7 4 5 6 7 5 6 7 1 1 8 9 (a) (b) (c) Gambar (a) DFS(1): 1, 2, 4, 8, 5, 6, 3, 7 Gambar (b) DFS(1): 1, 2, 3, 6, 8, 4, 5, 7 Gambar (c) DFS(1): 1, 2, 5, 8, 9, 6, 3, 7, 4

procedure DFS(input v:integer) {Mengunjungi seluruh simpul graf dengan algoritma pencarian DFS Masukan: v adalah simpul awal kunjungan Keluaran: semua simpulyang dikunjungi ditulis ke layar } Deklarasi w : integer Algoritma: write(v) dikunjungi[v] true for tiap simpul w yang bertetangga dengan simpul v do if not dikunjungi[w] then DFS(w) endif endfor

Algoritma DFS selengkapnya adalah: procedure DFS(input v:integer) {Mengunjungi seluruh simpul graf dengan algoritma pencarian DFS Masukan: v adalah simpul awal kunjungan Keluaran: semua simpulyang dikunjungi ditulis ke layar } Deklarasi w : integer Algoritma: write(v) dikunjungi[v] true for w l to n do if A[v,w]=l then {simpul v dan simpul w bertetangga } if not dikunjungi[w] then DFS(w) endif endif endfor

Latihan: Gunakan algoritma BFS dan DFS untuk menemukan pohon merentang (spanning tree) dari graf G di bawah ini jika traversalnya dimulai dari simpul e. Dalam menjawab soal ini, perlihatkan traversal BFS/DFS sebagai pohon berakar dengan e sebagai akarnya. a b c l d e f g h i j m k

Aplikasi DFS dan BFS 1. Search Engine (google, yahoo, altavista) Komponen search engine: 1. Web Spider : program penjelajah web (web surfer) 2. Index: basisdata yang menyimpan kata-kata penting pada setiap halaman web 3. Query: pencarian berdasarkan string yang dimasukkan oleh pengguna (end- user) Secara periodik (setiap jam atau setiap hari), spider menjejalahi internet untuk mengunjungi halaman-halaman web, mengambil kata-kata penting di dalam web, dan menyimpannya di dalam index. Query dilakukan terhadap index, bukan terhadap website yang aktual.

Bagaimana spider menjelajahi (surfing) web? Halaman web dimodelkan sebagai graf berarah Simpul menyatakan halaman web (web page) Sisi menyatakan link ke halaman web Bagaimana teknik menjelajahi web? Secara DFS atau BFS Dimulai dari web page awal, lalu setiap link ditelusuri secara DFS sampai setiap web page tidak mengandung link. Pada setiap halaman web, informasi di dalamnya dianalisis dan disimpan di dalam basisdata index.

2. Referensi pada Makalah/Jurnal Pada setiap makalah, ada acuan ke literatur yang digunakan. Pada literatur tsb, ada acuan ke makalah/literatur yang lain? Bagaimana menelusuri acuan-acuan pada makalah? Secara DFS atau BFS?