bfs dan dfsinformatika.stei.itb.ac.id/~rinaldi.munir/stmik/2006-2007...• pada setiap halaman web,...

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

Upload: truongnga

Post on 21-Mar-2019

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

BFS dan DFS

Bahan Kuliah IF2151 Strategi AlgoritmikOleh: Rinaldi Munir

Page 2: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

• 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).

Page 3: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

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 tadidikunjungi, demikian seterusnya.

Page 4: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

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

Page 5: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

1

2 3

4 5 6 7

1

1

2 3

4 5 6 7

1

1

2 3 4

5 6 7

8 9

Contoh 1: (misalkan traversal dimulai dari simpul 1)

Gambar (a) BFS(1): 1, 2, 3, 4, 5, 6, 7, 8.

(a) (b) (c)

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

Page 6: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

• Pseudo-code algoritma:• Diperlukan:

1. Matriks ketetanggaan A = [aij] yangberukuran n × n,

aij = 1, jika simpul i dan simpul jbertetangga,

aij = 0, jika simpul i dan simpul j tidakbertetangga.

2. Antrian q untuk menyimpan simpul yangtelah dikunjungi.

Page 7: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

3. Tabel boolean yang bernama dikunjungi

dikunjungi : array[l..n] of boolean

dikunjungi[i] = true jika simpul i sudah dikunjungidikunjungi[i] = false jika simpul i belum dikunjungi

Inisialisasi tabel: for i←l to n do

dikunjungi[i]← falseendfor

Page 8: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

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) }

Page 9: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

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) }

Page 10: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

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.

Page 11: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

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 simpulyang belum dikunjungi yang dapat dicapai dari simpul yang telah dikunjungi.

Page 12: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

1

2 3

4 5 6 7

1

1

2 3

4 5 6 7

1

1

2 3 4

5 6 7

8 9

Contoh 2: (misalkan traversal dimulai dari simpul 1)

Gambar (a) DFS(1): 1, 2, 4, 8, 5, 6, 3, 7

(a) (b) (c)

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

Page 13: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

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

Page 14: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

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

Page 15: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

Latihan: Gunakan algoritma BFS dan DFS untuk menemukan pohon merentang (spanning tree) dari graf Gdi 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

de f g

l

hi

j

km

Page 16: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

Aplikasi DFS dan BFS1. 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 web3. Query: pencarian berdasarkan string yang dimasukkan

oleh pengguna (end- user)

Secara periodik (setiap jam atau setiap hari), spider menjejalahi internetuntuk 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.

Page 17: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi
Page 18: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi
Page 19: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

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.

Page 20: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi

2. Referensi pada Makalah/Jurnal

• Pada setiap makalah, ada acuan ke literaturyang digunakan.

• Pada literatur tsb, ada acuan ke makalah/literatur yang lain?

• Bagaimana menelusuri acuan-acuan pada makalah? Secara DFS atau BFS?

Page 21: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi
Page 22: BFS dan DFSinformatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2006-2007...• Pada setiap halaman web, informasi didalamnya dianalisis dan disimpan di dalam basisdata index. 2. Referensi