이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

14. 방향그래프 (Directed Graph)

  • 2020.11.24 16:18
  • 학부 수업/알고리즘
반응형

방향 그래프는 그래프 G 안의 모든 간선이 유향 간선인 그래프를 말한다. 유향 그래프라고도 한다.
항공 노선, 작업 스케줄링 등을 구성하는데 쓰인다.

방향 그래프에서, 각 노드의 진입 간선과 진출 간선을 별도의 리스트로 관리하면 각각의 집합을 각각의 크기에 비례한 시간에 조사할 수 있다.

방향 DFS

DFS와 BFS 알고리즘이 간선의 방향에 따라서만 탐색하도록 하면 방향 그래프에 특화시킬 수 있다.
방향 DFS 알고리즘에선 아래 네 종류의 간선이 발생한다.

  • 트리 간선: DFS 트리에 사용된 간선
  • 후향 간선: DFS 트리에서, 아래에서 위로 향하는 간선
  • 전향 간선: DFS 트리에서, $i$ 레벨 노드에서 $i+n (n>2)$ 노드로 향하는 간선
  • 교차 간선: DFS 트리에서, 같은 레벨 노드로 향하는 간선

연결성

노드 $s$에서 시작하는 방향 DFS는, 노드 $s$에서 도달 가능한 노드들을 결정한다.
노드 $u$에서 $v$로의 경로가 존재하면 $u$는 $v$에 도달한다, $v$는 $u$에서 도달 가능하다 라고 표현한다.

만약 그래프 $G$ 안의 모든 노드쌍 $(u,v)$가 서로 도달 가능하면, 해당 그래프는 강연결이라고 한다.

방향 DFS를 이용하여, 강연결이 성립하는 최대의 부그래프인 강연결요소를 얻을 수 있다.

이행적폐쇄

어떤 그래프 $G$에서, 노드 $a$부터 $c$로 향하는 경로가 존재할 때, 간선 $(a,c)$가 존재하고 그래프 $G$의 모든 간선과 노드를 가진 그래프 $G*$를 이행적폐쇄라 한다.

즉, 이행적폐쇄 그래프는 그래프의 도달 가능성 정보를 제공한다.

이행적폐쇄는 DFS로 $O(n(n+m))$ 시간에 계산할 수 있는데, 대안으로 플로이드-워셜 알고리즘을 사용할 수도 있다.

플로이드-워셜 알고리즘Floyd-Warshall

  1. 정점들을 $1, 2, \cdots, n$으로 번호를 매긴다.
  2. $1, 2, \cdots, k$까지의 정점만을 경로로 사용하는 경로들을 탐색하여 G에 추가
  3. $k$ 단계에서, $G_{k-1}$에 기반하여 $G_k$를 계산한다.
  4. 마지막 $G_n$이 이행적폐쇄 그래프가 된다.
def FW(G):
    G[0] = G
    for k in range(1, n+1): # 1 to n
        G[k] = G[k-1]
        for i in range(1, n+1): # start vertex
            if i == k:  # i != k
                continue
            for j in range(1, n+1): # end vertex
                if j == i or j == k:  # j != i, j!= k
                    continue
                if G[k-1].areAbjacent(v[i], v[k]) and G[k-1].areAbjacent(v[k], v[j]): # i->k->j 경로 존재하면
                    if !G[k-1].areAbjacent(v[i], v[j]): # i->j 경로 없으면
                        G[k].insertDirectedEdge(v[i], v[j]) # 만들기
    return G[n]

areAbjacent 함수가 $O(1)$시간에 수행된다면 (즉, 인접 행렬) 이 알고리즘은 $O(n^3)$의 시간 복잡도를 갖는다.

동적 프로그래밍

알고리즘 설계 기법 중 하나로, 많은 시간이 소요되지만 아래 조건에 해당하는 부문제들로 이루어진 문제 해결에 적용 가능하다.

  • 부문제 단순성: 부문제들이 몇 개의 변수로 정의될 수 있는 경우
  • 부문제 최적성: 전체 최적치가 최적의 부문제들에 의해 정의될 수 있는 경우
  • 부문제 중복성: 부문제들이 독립적이지 않고 중복될 경우
반응형

'학부 수업 > 알고리즘' 카테고리의 다른 글

16. 최소신장트리 (Minimum Spanning Tree)  (0) 2020.12.12
15. 방향 비싸이클 그래프와 위상 정렬 (DAG and Topological Sort)  (0) 2020.12.01
13. 그래프 순회 (Graph Traversal)  (0) 2020.11.24
12. 그래프 ADT (Graph ADT)  (0) 2020.11.11
11. 해시테이블의 충돌 해결  (0) 2020.11.05

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 16. 최소신장트리 (Minimum Spanning Tree)

    16. 최소신장트리 (Minimum Spanning Tree)

    2020.12.12
  • 15. 방향 비싸이클 그래프와 위상 정렬 (DAG and Topological Sort)

    15. 방향 비싸이클 그래프와 위상 정렬 (DAG and Topological Sort)

    2020.12.01
  • 13. 그래프 순회 (Graph Traversal)

    13. 그래프 순회 (Graph Traversal)

    2020.11.24
  • 12. 그래프 ADT (Graph ADT)

    12. 그래프 ADT (Graph ADT)

    2020.11.11
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (276)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (42)
      • 회고 & 계획 (16)
      • 내 이야기 (8)
      • 리뷰 (3)
      • 군대에 간 공돌이 (9)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바