• 위상 정렬 알고리즘의 정의, 특징, 성능 분석

    2022. 4. 22.

    by. KAEY

    이것이 코딩테스트다. 나동빈 신님의 강의를 바탕으로 작성하였습니다.


     위상 정렬 이란

    '사이클이 없는 방향 그래프'의 모든 노드를 '방향성에 거스르지 않도록 순서대로 나열'하는 것을 의미
     예시 > 선수과목을 고려한 학습 순서 설정


     진입차수 : 특정한 노드로 들어오는 간선의 개수
     진출차수 : 특정한 노드에서 나가는 간선의 개수

     

     

    위상 정렬 알고리즘

     ''를 이용하는 '위상 정렬 알고리즘의 동작 과정'은 다음과 같다.
      1. 진입차수가 0인 모든 노드를 큐에 넣는다.
      2. 큐가 빌 때까지 다음의 과정을 반복한다.
       1) 큐에서 원소를 꺼내 해당 노드에서 나가는 간선을 그래프에서 제거한다.
       2) 새롭게 진입차수가 0이 된 노드를 큐에 넣는다.
      >> 결과적으로 '각 노드가 큐에 들어온 순서가 위상 정렬을 수행한 결과'와 동일하다.

     


     위상 정렬을 수행할 그래프를 준비한다.
      이때 그래프는 '사이클이 없는 방향 그래프(DAG)이어야 한다.

     


    위상 정렬의 특징

      DAG를 만족할 때만 수행할 수 있음.
      위상 정렬에서는 여러 가지 답이 존재할 수 있음.
      > 한 단계에서 큐에 새롭게 들어가는 원소가 2개 이상인 경우, 여러 답이 존재함.
      '모든 원소를 방문하기 전에 큐가 빈다면 사이클이 존재'한다고 판단할 수 있음.
      > 사이클에 포함된 원소 중에서 어떠한 원소도 큐에 들어가지 못한다.
      스택을 활용한 DFS를 이용하여 위상 정렬을 수행할 수도 있음.

     


     성능 분석
      위상 정렬을 위해 차례대로 모든 노드를 확인하며 각 노드에서 나가는 간선을 차례대로 제거해야 한다
      위상 정렬 알고리즘의 시간 복잡도는 O(V+E) 이다.

     

     


    댓글 (비로그인 댓글 허용하지 않습니다.)