Breath everything
Home
  • 분류 전체보기 (133)
    • 취미 (29)
    • 영어 (30)
      • Daily 영어표현 (24)
      • TOEIC_OPIC (6)
    • IT (47)
      • 따로 공부 (13)
      • 외부강의 (3)
      • 자료구조 & 알고리즘 (20)
      • 백준 (9)
      • 프로그래머스 (2)
    • 자격증 (5)
    • 기타 (19)
    • 복기 (1)
      • 코딩테스트 (1)
Home
  • 분류 전체보기 (133)
    • 취미 (29)
    • 영어 (30)
      • Daily 영어표현 (24)
      • TOEIC_OPIC (6)
    • IT (47)
      • 따로 공부 (13)
      • 외부강의 (3)
      • 자료구조 & 알고리즘 (20)
      • 백준 (9)
      • 프로그래머스 (2)
    • 자격증 (5)
    • 기타 (19)
    • 복기 (1)
      • 코딩테스트 (1)
블로그 내 검색

Breath everything

이것 저것

  • IT/자료구조 & 알고리즘

    [알고리즘] 깊이 우선 탐색(DFS) (Python)

    2021. 8. 8.

    by. ziasu

    반응형

    1. DFS란...?

    • 정점의 자식들을 먼저 탐색

     

    2. 구현 전 생각정리

    • 탐색할 그래프를 딕셔너리와 데크를 활용하여 구현해보자
    • need_visit 데크의 오른쪽에서 하나씩 node를 뽑아오며 탐색하면 최대 깊이까지 탐색하고 다시 올라오는 느낌으로의 탐색이 가능

     

    3. 코드 구현

    from collections import deque
    
    graph = dict()
    
    graph['A'] = deque(['B', 'C'])
    graph['B'] = deque(['A', 'D'])
    graph['C'] = deque(['A', 'G', 'H', 'I'])
    graph['D'] = deque(['B', 'E', 'F'])
    graph['E'] = deque(['D'])
    graph['F'] = deque(['D'])
    graph['G'] = deque(['C'])
    graph['H'] = deque(['C'])
    graph['I'] = deque(['C', 'J'])
    graph['J'] = deque(['I'])
    
    def bfs(graph, start_node):
        visited = deque()
        need_visit = deque()
        
        need_visit.append(start_node)
        
        while need_visit:
            node = need_visit.pop()
            if node not in visited: #아직 탐색 안된 상태라면
                visited.append(node)
                need_visit.extend(graph[node])#아래 level도 need_visit에 추가되겠지만 현 level이 다 탐색 된 이후에 탐색됨
                
        return visited
    
    
    bfs(graph,'A')

     

    4. 시간 복잡도

    • while문이 '노드 수' + '간선 수' 만큼 실행되므로 O(노드 수 + 간선 수)
    반응형
    저작자표시 (새창열림)

    'IT > 자료구조 & 알고리즘' 카테고리의 다른 글

    [알고리즘] 크루스칼 알고리즘(Kruskal's algorithm)  (0) 2021.08.23
    [자료구조] 신장트리(Spanning Tree) & 최소 신장 트리(MST)  (0) 2021.08.21
    [알고리즘] 너비 우선 탐색(BFS) (Python)  (0) 2021.08.08
    [자료구조] 그래프(Graph) (Python)  (0) 2021.08.08

    댓글

    관련글

    • [알고리즘] 크루스칼 알고리즘(Kruskal's algorithm) 2021.08.23
    • [자료구조] 신장트리(Spanning Tree) & 최소 신장 트리(MST) 2021.08.21
    • [알고리즘] 너비 우선 탐색(BFS) (Python) 2021.08.08
    • [자료구조] 그래프(Graph) (Python) 2021.08.08
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
ziasu

티스토리툴바