Depth-first search (DFS)

Datastructuren en algoritmen in Python

Miriam Antona

Software engineer

Boom-/graaftraversal

  • Proces om alle knopen te bezoeken
  • Depth-first search (DFS)
  • Breadth-first search (BFS)
Datastructuren en algoritmen in Python

Depth-first search - binaire bomen

  • In-order
  • Pre-order
  • Post-order
Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links
Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig
Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren

  • Ordening: Links -> Huidig -> Rechts

Grafische weergave van in-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

In-order traverseren - implementatie

  • Ordening: Links -> Huidig -> Rechts
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

Grafische weergave van een binaire zoekboom.

  • Complexiteit: $O(n)$
    • $n$ -> aantal knopen
Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig
Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links
Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren

  • Ordening: Huidig -> Links -> Rechts

Grafische weergave van pre-order traversal op een binaire zoekboom.

Datastructuren en algoritmen in Python

Pre-order traverseren - implementatie

  • Ordening: Wortel -> Links -> Rechts
  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

Grafische weergave van een binaire zoekboom.

  • Complexiteit: $O(n)$
    • $n$ -> aantal knopen
Datastructuren en algoritmen in Python

Post-order

  • Ordening: Links
Datastructuren en algoritmen in Python

Post-order

  • Ordening: Links -> Rechts
Datastructuren en algoritmen in Python

Post-order

  • Ordening: Links -> Rechts -> Huidig

  • Complexiteit: $O(n)$

    • $n$ -> aantal knopen
Datastructuren en algoritmen in Python

Wanneer in-order, pre-order en post-order gebruiken

  • in-order

    • gebruik BST om knoopwaarden oplopend te krijgen
  • pre-order

    • kopieën van een boom maken
    • prefix-expressies krijgen
  • post-order

    • binaire bomen verwijderen
    • postfix-expressies krijgen
Datastructuren en algoritmen in Python

Depth-first search - grafen

  • Grafen kunnen cycli hebben
    • houd bezochte knopen bij
  • Stappen:
    1. Start bij een willekeurige knoop
    2. Voeg huidige knoop toe aan bezochte lijst
    3. Voor elke aangrenzende knoop van de huidige
      • Als al bezocht -> negeren
      • Zo niet -> voer recursief DFS uit
Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - grafen

Grafische weergave van depth-first search op een graaf.

Datastructuren en algoritmen in Python

Depth-first search - implementatie

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)
  • Complexiteit: $O(V+E)$
    • $V$ -> aantal knopen
    • $E$ -> aantal verbindingen
Datastructuren en algoritmen in Python

Laten we oefenen!

Datastructuren en algoritmen in Python

Preparing Video For Download...