이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

위상정렬

  • 2022.06.24 13:42
  • Algorithm/Theory && Tip
반응형

 

 

Topological Sort

 

 

 

그래프 자료구조에 대해 정렬을 수행할 때 위상정렬을 사용한다.

위상정렬은 DAG 그래프에 대해서만 수행 할 수 있다. (사이클이 없고 방향성이 있는 그래프)

 

위상정렬을 통해 DAG에서 간선의 방향성에 따라 정점을 위상에 맞춰 정렬해보자.

 

 

 

 

 

N에서 K로 가는 간선이 있다면 N은 K보다 먼저 나타나야 한다.

위의 조건을 충족하면서 정점들을 나열하는 것을 위상정렬이라고 한다.

 

위의 조건 때문에, 사이클이 있는 그래프에 대해서는 위상정렬을 수행할 수 없다.

 

 

 

이제 위상정렬의 과정에 대해 알아보자.

 

 

 

 

제일 먼저 올 수 있는 정점은 들어오는 간선이 없는 정점이다.

 

 

 

 

 

위의 그래프에서 정점 1 9 7은 들어오는 간선이 없기 때문에 정렬을 수행한 결과 중 앞에 위치한다. (1 9 7 간의 순서는 상관없음)

 

그러니 큐를 선언하고 큐에 1 9 7 을 담아준다. (들어온 순서대로 작업을 수행해야 되기 때문)

 

그 후 그래프에서 1 9 7을 하나씩 제거해 보며 들어오는 간선이 없는 정점이 다시 생기는지 확인하고, 해당하는 정점이 생기면 자료구조에 그 정점을 넣어준다.

 

이 때 큐에서 제거되는 요소들은 배열이나 리스트에 넣어준다. (정렬이 완료된 요소들이다.)

 

 

https://13months.tistory.com/334

 

[백준] 2252 줄 세우기 - Java

주어지는 입력을 DAG로 표현하고, 위상정렬로 정렬해서 풀 수 있다. import java.util.*; import java.io.*; import java.math.*; public class Main { static ArrayList [] adj; static int[] indegree; static i..

13months.tistory.com

 

 

 

관련 문제를 많이 풀어서 익숙해지자.

반응형

'Algorithm > Theory && Tip' 카테고리의 다른 글

Dynamic Programming  (0) 2022.06.29
최단 거리  (0) 2022.06.27
재귀  (0) 2022.05.16
그래프  (0) 2022.05.12
매개 변수 탐색  (0) 2022.05.04

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • Dynamic Programming

    Dynamic Programming

    2022.06.29
  • 최단 거리

    최단 거리

    2022.06.27
  • 재귀

    재귀

    2022.05.16
  • 그래프

    그래프

    2022.05.12
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (677)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (9)
    • 💬 기록 (7)
    • 📚 공부 (6)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바