Algoritma BFS dan DFS Kustanto 5252021 1 Algoritma
Algoritma BFS dan DFS Kustanto 5/25/2021 1
Algoritma Graph Algoritma traversal di dalam graf adalah mengunjungi simpul-simpul dengan cara yang sistematik. 1. Pencarian Melebar (Breadth First Search atau BFS), 2. Pencarian Mendalam (Depth First Search atau DFS). 5/25/2021 2
Breadth-first search (BFS) • Mengunjungi vertex-vertex grafik dengan berpindah ke semua vertex tetangga dari vertex yang terakhir dikunjungi. • BFS menggunakan queue • Mirip dengan level ke level dari pohon merentang • “Redraws” atau gambar ulang grafik dalam bentuk seperti pohon (dengan edges pohon dan back edges untuk grafik tak berarah/undirected graph) 5/25/2021 3
Pseudo-code algoritma: 5/25/2021 4
5/25/2021 5
Example of BFS traversal of undirected graph a b c d e f g h BFS tree: BFS traversal queue: a bef efg fg g ch hd d 5/25/2021 6 1 2 6 8 a b c d e f g h 3 4 5 7 Red edges are tree edges and black edges are cross edges.
Pseudo code BFS 5/25/2021 7
Notes on BFS • Asumsi: setiap simpul dapat membangkitkan b buah simpul baru. • Misalkan solusi ditemukan pada aras/level ke-d • Jumlah maksimum seluruh simpul: 1+b+b 2 +b 3 +. . . +bd =(bd+1 – 1)/(b– 1) T(n) = O(bd) Kompleksitas ruang algoritma BFS = sama dengan kompleksitas waktunya, karena semua simpul daun dari pohon harus disimpan di dalam memori selama proses pencarian. 5/25/2021 8
Breadth First Search (grafik berarah) 2 s 4 5 7 3 5/25/2021 8 6 9 9
Breadth First Search Shortest path from s 021 0 1 2 s 4 5 7 3 6 Undiscovered Discovered Queue: s Top of queue Finished 8 10 9
Breadth First Search 1 2 0 s 4 5 7 3 6 1 Undiscovered Discovered Queue: s 2 Top of queue 5/25/2021 Finished 8 11 9
Breadth First Search 1 2 0 4 5 s 8 7 1 3 6 1 Undiscovered Discovered Queue: s 2 3 Top of queue 5/25/2021 Finished 12 9
Breadth First Search 1 2 0 4 s 5 8 7 1 3 6 1 Undiscovered Discovered Queue: s 2 3 5 Top of queue 5/25/2021 Finished 13 9
Breadth First Search 1 2 2 0 4 s 5 8 7 1 3 6 1 Undiscovered Discovered Queue: 2 3 5 Top of queue 5/25/2021 Finished 14 9
Breadth First Search 1 2 2 0 4 s 8 5 already discovered: 7 don't enqueue 5 1 3 6 1 Undiscovered Discovered Queue: 2 3 5 4 Top of queue 5/25/2021 Finished 15 9
Breadth First Search 1 2 2 0 4 s 5 8 7 1 3 6 1 Undiscovered Discovered Queue: 2 3 5 4 Top of queue 5/25/2021 Finished 16 9
Breadth First Search 1 2 2 0 4 s 5 8 7 1 3 6 1 Undiscovered Discovered Queue: 3 5 4 Top of queue 5/25/2021 Finished 17 9
Breadth First Search 1 2 2 0 4 s 5 8 7 1 6 3 1 2 Undiscovered Discovered Queue: 3 5 4 Top of queue 5/25/2021 Finished 18 9
Breadth First Search 1 2 2 0 4 s 5 8 7 1 3 1 6 2 Undiscovered Discovered Queue: 3 5 4 6 Top of queue 5/25/2021 Finished 19 9
Breadth First Search 1 2 2 0 4 s 5 8 7 1 3 1 6 2 Undiscovered Discovered Queue: 5 4 6 Top of queue 5/25/2021 Finished 20 9
Breadth First Search 1 2 2 0 4 s 5 8 7 1 3 1 6 2 Undiscovered Discovered Queue: 5 4 6 Top of queue 5/25/2021 Finished 21 9
Breadth First Search 1 2 2 0 4 s 5 8 7 1 3 1 6 2 Undiscovered Discovered Queue: 4 6 Top of queue Finished 22 9
Breadth First Search 1 2 2 0 4 s 5 3 8 7 1 3 1 6 2 Undiscovered Discovered Queue: 4 6 Top of queue 5/25/2021 Finished 23 9
Breadth First Search 1 2 2 0 4 s 5 3 8 7 1 3 1 6 2 Undiscovered Discovered Queue: 4 6 8 Top of queue Finished 24 9
Breadth First Search 1 2 2 0 4 s 7 1 3 3 6 2 Undiscovered Discovered Queue: 6 8 Top of queue 5/25/2021 8 5 1 Finished 3 25 9
Breadth First Search 1 2 2 0 4 s 7 1 3 3 6 2 Undiscovered Discovered Queue: 6 8 7 Top of queue 5/25/2021 8 5 1 Finished 3 26 9 3
Breadth First Search 1 2 2 0 4 s 7 1 3 3 6 2 Undiscovered Discovered Queue: 6 8 7 9 Top of queue 5/25/2021 8 5 1 Finished 3 27 9 3
Breadth First Search 1 2 2 0 4 s 7 1 3 3 6 2 Undiscovered Discovered Queue: 8 7 9 Top of queue 5/25/2021 8 5 1 Finished 3 28 9 3
Breadth First Search 1 2 2 0 4 s 7 1 3 3 6 2 Undiscovered Discovered Queue: 7 9 Top of queue 5/25/2021 8 5 1 Finished 3 29 9 3
Breadth First Search 1 2 2 0 4 s 7 1 3 3 6 2 Undiscovered Discovered Queue: 7 9 Top of queue 5/25/2021 8 5 1 Finished 3 30 9 3
Breadth First Search 1 2 2 0 4 s 7 1 3 3 6 2 Undiscovered Discovered Queue: 7 9 Top of queue 5/25/2021 8 5 1 Finished 3 31 9 3
Breadth First Search 1 2 2 0 4 s 7 1 3 3 6 2 Undiscovered Discovered Queue: 7 9 Top of queue 5/25/2021 8 5 1 Finished 3 32 9 3
Breadth First Search 1 2 2 0 4 s 7 1 3 3 6 2 Undiscovered Discovered Queue: 9 Top of queue 5/25/2021 8 5 1 Finished 3 33 9 3
Breadth First Search 1 2 2 0 4 s 7 1 3 3 6 2 Undiscovered Discovered Queue: 9 Top of queue 5/25/2021 8 5 1 Finished 3 34 9 3
Breadth First Search 1 2 2 0 4 s 7 1 3 3 6 2 Undiscovered Discovered Queue: 9 Top of queue 5/25/2021 8 5 1 Finished 3 35 9 3
Breadth First Search 1 2 2 0 4 s 7 1 3 3 6 2 Undiscovered Discovered Queue: Top of queue 5/25/2021 8 5 1 Finished 3 36 9 3
Breadth First Search 1 2 2 0 4 s 7 1 3 3 6 2 Level Graph 5/25/2021 8 5 1 3 37 9 3
Depth-First Search (DFS) • Mengunjungi vertex-vertex pada grafik dengan selalu bergerak dari vertex yang terakhir dikunjungi ke vertex yang belum dikunjungi, lakukan backtrack apabila tidak ada vertex tetangga yang belum dikunjungi. • Rekursif atau menggunakan stack – Vertex di-push ke stack ketika dicapai untuk pertama kalinya – Sebuah vertex di-pop off atau dilepas dari stack ketika vertex tersebut merupakan vertex akhir (ketika tidak ada vertex tetangga yang belum dikunjungi) • “Redraws” atau gambar ulang grafik dalam bentuk seperti pohon (dengan edges pohon dan back edges untuk grafik tak berarah/undirected graph) 5/25/2021 38
Pseudo code DFS 5/25/2021 39
Example: DFS traversal of undirected graph a b c d e f g h DFS traversal stack: a ab abfe abf ab abgcdh abgcd … 5/25/2021 DFS tree: 40 1 2 6 7 a b c d e f g h 4 3 5 8 Red edges are tree edges and black edges are cross edges.
1 2 4 3 5 6 7 8 5/25/2021 41
1 2 4 3 5 6 7 8 5/25/2021 42
1 2 5 8 5/25/2021 3 6 4 7 9 43
• Selesai 5/25/2021 44
- Slides: 44