Penelusuran Mendalam (DFS)

Struktur Data dan Algoritma di Python

Miriam Antona

Software engineer

Penelusuran pohon/graf

  • Proses mengunjungi semua simpul
  • Depth first search (DFS)
  • Breadth first search (BFS)
Struktur Data dan Algoritma di Python

Penelusuran mendalam - pohon biner

  • In-order
  • Pre-order
  • Post-order
Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri
Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini
Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order

  • Urutan: Kiri -> Saat ini -> Kanan

Representasi grafis in-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran in-order - implementasi

  • Urutan: Kiri -> Saat ini -> Kanan
def in_order(self, current_node):

if current_node:
self.in_order(current_node.left_child)
print(current_node.data)
self.in_order(current_node.right_child)
my_tree.in_order(my_tree.root)
10
20
22
65
68
70
75

Representasi grafis binary search tree.

  • Kompleksitas: $O(n)$
    • $n$ -> jumlah simpul
Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini
Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri
Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order

  • Urutan: Saat ini -> Kiri -> Kanan

Representasi grafis pre-order traversal pada binary search tree.

Struktur Data dan Algoritma di Python

Penelusuran pre-order - implementasi

  • Urutan: Akar -> Kiri -> Kanan
  def pre_order(self, current_node):
    if current_node:
      print(current_node.data)
      self.pre_order(current_node.left_child)
      self.pre_order(current_node.right_child)
my_tree.pre_order(my_tree.root)
65
20
10
22
70
68
75

Representasi grafis binary search tree.

  • Kompleksitas: $O(n)$
    • $n$ -> jumlah simpul
Struktur Data dan Algoritma di Python

Post-order

  • Urutan: Kiri
Struktur Data dan Algoritma di Python

Post-order

  • Urutan: Kiri -> Kanan
Struktur Data dan Algoritma di Python

Post-order

  • Urutan: Kiri -> Kanan -> Saat ini

  • Kompleksitas: $O(n)$

    • $n$ -> jumlah simpul
Struktur Data dan Algoritma di Python

Kapan menggunakan in-order, pre-order, dan post-order

  • in-order

    • gunakan BST untuk memperoleh nilai simpul naik
  • pre-order

    • membuat salinan pohon
    • mendapatkan ekspresi prefiks
  • post-order

    • menghapus pohon biner
    • mendapatkan ekspresi postfiks
Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

  • Graf dapat memiliki siklus
    • perlu melacak simpul yang sudah dikunjungi
  • Langkah:
    1. Mulai dari simpul mana pun
    2. Tambahkan simpul saat ini ke daftar terkunjungi
    3. Untuk setiap simpul bertetangga dari simpul saat ini
      • Jika sudah dikunjungi -> abaikan
      • Jika belum -> lakukan DFS secara rekursif
Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - graf

Representasi grafis penelusuran mendalam pada graf.

Struktur Data dan Algoritma di Python

Penelusuran mendalam - implementasi

def dfs(visited_vertices, graph, current_vertex):
    if current_vertex not in visited_vertices:
        print(current_vertex)
        visited_vertices.add(current_vertex)
        for adjacent_vertex in graph[current_vertex]:
            dfs(visited_vertices, graph, adjacent_vertex)
  • Kompleksitas: $O(V+E)$
    • $V$ -> jumlah simpul
    • $E$ -> jumlah sisi
Struktur Data dan Algoritma di Python

Ayo berlatih!

Struktur Data dan Algoritma di Python

Preparing Video For Download...