작업 흐름 간소화: miniwebtool 검색.
추가
관련 도구
인접 행렬 계산기다익스트라 최단 경로 계산기그래프 채색 계산기그래프 차수열 검증기해밀턴 경로 검사기 (Hamiltonian Path Checker)최소 신장 트리 계산기네트워크 플로우 계산기 (최대 유량)평면 그래프 검사기안정된 결혼 문제 해결기스털링 수 계산기
홈페이지 > 수학 관련 도구 > 고급 수학 연산 도구 > 위상 정렬 계산기
 

위상 정렬 계산기

Kahn 알고리즘 또는 DFS를 사용하여 유향 비순환 그래프(DAG)의 위상 정렬 순서를 계산합니다. 사이클 탐지, 사이클 경로 보고, 병렬 실행 계층 뷰 구축, 사전순 최소 정렬 지원 및 인터랙티브 그래프 애니메이션 기능을 제공합니다.

위상 정렬 계산기
간선 형식: A -> B (, =>, :도 허용). 최대 80개 정점 / 800개 간선.
Kahn 알고리즘(사전식)은 고유하고 재현 가능한 순서를 제공합니다. DFS 포스트 오더는 클래식한 깊이 우선 방식입니다.

Embed 위상 정렬 계산기 Widget

위상 정렬 계산기 정보

위상 정렬 계산기유향 비순환 그래프 (DAG)의 정점들에 대해, u에서 v로 가는 모든 유향 간선이 있을 때 u가 v보다 앞에 오도록 하는 선형 순서를 계산합니다. 그래프를 간선 리스트나 인접 리스트 형식으로 입력하면, 도구가 Kahn 알고리즘 또는 DFS 포스트 오더를 사용하여 위상 순서를 반환하고, 사이클을 감지(정확한 사이클 경로 포함)하며, 작업을 병렬 실행 레이어로 그룹화하고, 유효한 순서의 개수를 세며, 대화형 그래프에서 각 단계를 애니메이션으로 보여줍니다.

위상 정렬이란 무엇인가요?

유향 그래프 G = (V, E)가 주어졌을 때, 위상 정렬(Topological Sort)은 모든 유향 간선 (u → v)에 대해 u가 v보다 먼저 나타나도록 정점들을 v₁, v₂, …, vₙ과 같이 선형으로 배열하는 것입니다. 위상 정렬은 그래프에 유향 사이클이 없는 경우, 즉 그래프가 DAG인 경우에만 존재합니다. 위상 정렬은 대개 유일하지 않습니다. 여러 정점이 동시에 진입 차수가 0인 경우, 그래프는 여러 개의 유효한 위상 정렬을 가질 수 있습니다.

위상 순서 정의
V의 순열 (v₁, v₂, …, vn)이 위상 정렬이 되기 위한 필요충분조건은
E에 속한 모든 간선 (u → v)에 대해: position(u) < position(v)

이 계산기에서 사용되는 알고리즘

Kahn 알고리즘 (BFS 기반, 1962)

Kahn 알고리즘은 가장 직관적인 위상 정렬 방식입니다. 매 단계마다 진입 차수가 0(들어오는 간선이 없는)인 정점을 선택하여 출력에 추가하고, 해당 정점과 그 정점에서 나가는 간선들을 그래프에서 "제거"하며 후속 정점들의 진입 차수를 줄입니다. 진입 차수가 0인 정점이 여러 개인 경우, 최소 힙을 사용하면 사전식으로 가장 작은 순서를 얻을 수 있고, FIFO 큐를 사용하면 입력 순서를 유지할 수 있습니다. Kahn 알고리즘은 O(|V| + |E|) 시간에 실행되며 사이클 감지기 역할도 합니다. 큐가 비었는데 아직 배출되지 않은 정점이 있다면 그래프에 사이클이 있는 것입니다.

Kahn 알고리즘 (의사 코드)
Kahn(G):
  Q ← { v ∈ V : indeg(v) = 0 }
  L ← [ ]
  while Q가 비어있지 않음:
    u ← Q.pop()
    L.append(u)
    for 각 간선 u → v:
      indeg(v) -= 1
      if indeg(v) = 0: Q.push(v)
  if |L| < |V|: 사이클 보고
  else: L 반환

DFS 포스트 오더 (Tarjan, 1976)

DFS 알고리즘은 깊이 우선 탐색을 수행하며, 정점의 탐색이 종료될 때(즉, 모든 후속 정점이 완전히 탐색되었을 때) 해당 정점을 스택에 넣습니다. 마지막에 스택을 뒤집으면 유효한 위상 순서가 됩니다. 사이클 감지는 자연스럽게 이루어집니다. 탐색 중 아직 진행 중인 정점(GRAY로 표시됨)을 다시 만난다면 역방향 간선이 발견된 것이므로 그래프는 DAG가 아닙니다. DFS 포스트 오더 역시 O(|V| + |E|) 시간에 실행됩니다.

DFS 포스트 오더 (의사 코드)
DFS-Topo(G):
  for 각 정점 u in V: color[u] ← WHITE
  L ← 빈 스택
  for 각 정점 u in V:
    if color[u] = WHITE: visit(u)
  return reverse(L)

visit(u):
  color[u] ← GRAY
  for 각 간선 u → v:
    if color[v] = GRAY: 사이클 보고
    if color[v] = WHITE: visit(v)
  color[u] ← BLACK; L.push(u)

병렬 실행 레이어

DAG의 레이어 보기는 모든 간선이 낮은 번호의 레벨에서 높은 번호의 레벨로만 향하도록 정점들을 분할합니다. 같은 레이어에 있는 정점들은 서로 독립적이므로 병렬로 실행될 수 있습니다. 레이어의 총 개수는 최장 경로의 길이에 1을 더한 것과 같으며, 이는 무제한의 병렬 처리가 가능하더라도 모든 작업을 마치는 데 필요한 최소한의 순차 라운드 수인 DAG의 임계 경로가 됩니다. 이 계산기는 입력이 DAG일 경우 레이어 보기를 자동으로 생성합니다.

사이클 감지

그래프에 유향 사이클이 포함되어 있으면 위상 정렬이 불가능합니다. 본 계산기는 정확한 사이클 경로(예: A → B → C → A)를 보고하고 시각화 화면에서 사이클 간선을 빨간색으로 강조합니다. 사이클 상의 간선 하나만 제거해도 비순환성을 회복할 수 있습니다.

입력 형식

간선 리스트

각 유향 간선을 출발 -> 도착 형식으로 쓰고, 쉼표나 줄바꿈으로 구분합니다. 허용되는 화살표 변형: ->, , =>, -->, :. 간선을 체인으로 연결할 수도 있습니다. A -> B -> CA->BB->C의 줄임표현입니다. 정점 레이블에는 문자, 숫자, 밑줄, 대시, 점을 사용할 수 있습니다.

A -> B, B -> C, A -> C
C -> D
Shirt -> Tie -> Jacket

인접 리스트

각 정점 뒤에 콜론을 쓰고, 해당 정점이 가리키는 직접적인 후속 정점들을 적습니다. 후속 정점이 없는 정점도 D:와 같이 해당 줄을 작성해야 합니다.

A: B, C
B: D
C: D
D:

계산기 사용 방법

  1. 형식 선택: 라디오 버튼을 사용하여 간선 리스트와 인접 리스트 중 하나를 선택합니다.
  2. 그래프 입력: 데이터를 붙여넣거나 빠른 예시(옷 입기 순서, 선수 과목, 빌드 대상, 사이클 포함 그래프 등) 중 하나를 클릭합니다.
  3. 알고리즘 선택: 고유하고 재현 가능한 순서를 위해 Kahn 사전식 정렬을, 입력 순서를 유지하려면 입력 순서 정렬을, 클래식한 방식을 원하면 DFS 포스트 오더를, 모든 순서를 비교하려면 모두 표시를 선택합니다.
  4. "위상 정렬 실행" 클릭: 정렬 순서, 사이클 감지 결과, 레이어 보기, 임계 경로 길이, 총 정렬 가짓수, 대화형 그래프가 아래에 나타납니다.
  5. 탐색: 재생 버튼을 눌러 각 정점이 한 번에 하나씩 배출되는 것을 관찰하세요. 진입 차수 배지가 실시간으로 업데이트됩니다. 노드를 드래그하여 레이아웃을 재배치할 수 있습니다.

실제 적용 사례

빌드 시스템 및 컴파일러

make, Bazel, Gradle, npm과 같은 도구들은 빌드 대상을 위상 정렬하여 각 대상이 모든 의존성이 해결된 후에만 컴파일되도록 합니다. 의존성 그래프의 사이클은 대개 치명적인 오류로 보고됩니다.

작업 스케줄링

프로젝트 매니저는 DAG를 사용하여 작업 의존성을 파악합니다. 위상 정렬은 유효한 실행 순서를 제공하며, 레이어 보기는 무제한 병렬 처리 시의 최소 라운드 수를 알려줍니다. 최장 체인은 프로젝트 기간을 결정하는 임계 경로가 됩니다.

교과목 선수 과목 계획

대학 교과목 카탈로그는 DAG입니다. 간선은 선수 과목 관계를 나타냅니다. 위상 정렬 순서는 유효한 학업 계획이며, 레이어는 학생들이 매 학기 병렬로 수강할 수 있는 과목 세트를 알려줍니다.

스프레드시트 재계산

셀 값이 변경되면 스프레드시트는 의존성 순서에 따라 모든 하위 셀을 다시 계산해야 합니다. 이는 셀 의존성 DAG의 위상 정렬입니다. 순환 참조(사이클)는 애플리케이션에서 거부됩니다.

패키지 관리자 및 플러그인 로더

Apt, pip, Homebrew, Maven 및 수많은 플러그인 프레임워크는 의존성 DAG를 위상 정렬하여 설치 또는 로드 순서를 결정합니다.

심볼 분석 및 인퍼런스 스케줄링

컴파일러는 위상 정렬을 사용하여 선언 순서를 정하고, CPU는 데이터 의존성 DAG를 사용하여 데이터 해저드를 위반하지 않고 재배열 버퍼에서 명령어를 스케줄링합니다.

위상 정렬 가짓수 세기

n개의 정점을 가진 DAG에서 서로 다른 유효한 위상 정렬의 수는 1개(완전 정렬된 체인)에서 n!(간선이 없는 그래프)까지 가능합니다. 정확한 가짓수를 계산하는 것은 일반적으로 #P-완전 문제이지만, 정점이 16개 이하인 그래프의 경우 이 계산기는 비트마스크 동적 계획법(f(S) = Σ f(S ∪ {v}), 모든 선행 정점이 S에 포함된 v ∉ S에 대해)을 사용하여 계산합니다.

복잡도 및 성능

자주 묻는 질문

위상 정렬이란 무엇인가요?

유향 비순환 그래프의 위상 정렬은 u에서 v로 가는 모든 유향 간선에 대해 u가 v보다 앞에 오도록 정점을 선형으로 나열하는 것입니다. 이는 의존성을 존중하며 작업을 처리할 수 있는 유효한 순서를 나타냅니다.

이 계산기는 어떤 알고리즘을 사용하나요?

본 계산기는 Kahn 알고리즘과 DFS 포스트 오더를 모두 실행합니다. Kahn 알고리즘은 진입 차수가 0인 정점을 반복적으로 제거하고 그 후속 정점들의 진입 차수를 줄입니다. DFS 포스트 오더는 깊이 우선 탐색을 수행하고 탐색 종료 순서를 뒤집습니다. 둘 다 O(|V| + |E|) 시간에 실행됩니다.

내 그래프에 사이클이 있으면 어떻게 되나요?

유향 사이클이 있는 그래프는 위상 정렬이 존재하지 않습니다. 계산기는 사이클을 감지하여 시각화 화면에 빨간색으로 표시하고, 정확한 사이클 경로를 보고하여 어떤 간선을 제거해야 DAG로 만들 수 있는지 보여줍니다.

사전식으로 가장 작은 위상 순서란 무엇인가요?

여러 위상 정렬이 가능할 때, 매 단계마다 진입 차수가 0인 정점 중 알파벳 순서가 가장 빠른 것을 선택하여 얻는 순서입니다. 이 계산기의 기본 Kahn 모드는 재현 가능하고 안정적인 이 고유 순서를 반환합니다.

레이어 또는 레벨 보기란 무엇인가요?

레이어 보기는 소스 정점으로부터의 최장 경로 길이에 따라 정점을 그룹화합니다. 같은 레이어의 정점은 의존성이 없어 병렬 실행이 가능합니다. 레이어의 수는 최장 의존성 체인 길이에 1을 더한 것과 같으며 최소 병렬 라운드 수를 의미합니다.

그래프가 여러 유효한 위상 정렬을 가질 수 있나요?

네. Kahn 알고리즘 수행 중 어느 단계에서든 진입 차수가 0인 정점이 여러 개라면 그 중 무엇이든 다음에 올 수 있습니다. 이 계산기는 최대 16개 정점까지의 그래프에 대해 정확한 위상 정렬 가짓수를 계산합니다.

Kahn 알고리즘과 DFS 포스트 오더의 차이점은 무엇인가요?

Kahn은 탑다운 방식입니다. 소스(진입 차수 0)를 반복적으로 찾아 먼저 배출합니다. DFS 포스트 오더는 바텀업 방식입니다. 싱크를 먼저 끝내고 순서의 앞에 추가합니다. 둘 다 O(|V| + |E|)이며 유효한 정렬을 생성하지만 대개 결과는 다릅니다. Kahn은 병렬화와 사전식 순서 적용이 쉽고, DFS는 강결합 컴포넌트(SCC) 분석 등 다른 DFS 기반 분석과 결합하기 좋습니다.

이 도구가 지원하는 최대 그래프 크기는 얼마인가요?

이 계산기는 최대 80개 정점과 800개 간선을 지원합니다. 위상 정렬의 총 개수를 세는 기능은 #P-완전 문제이며 상태 공간이 2ⁿ으로 증가하기 때문에 16개 정점으로 제한됩니다. 대화형 시각화 및 알고리즘 애니메이션은 전체 크기까지 매끄럽게 작동합니다.

더 읽어보기

이 콘텐츠, 페이지 또는 도구를 다음과 같이 인용하세요:

"위상 정렬 계산기" - https://MiniWebtool.com/ko/위상-정렬-계산기/에서 MiniWebtool 인용, https://MiniWebtool.com/

miniwebtool 팀 작성. 업데이트: 2026년 4월 20일

또한 저희의 AI 수학 해결사 GPT를 사용하여 자연어 질문과 답변으로 수학 문제를 해결할 수 있습니다.

고급 수학 연산 도구:

주요 도구:

인스타그램 사용자 ID 조회분수 계산기애너그램 생성기내 행운의 숫자는?방어율 계산기랜덤 이름 생성기상대 표준 편차 계산기기대 수명 계산기복리 계산기👙 브라 사이즈 계산기공백 제거근무 시간 계산기피트 인치 센티미터 변환기🎮 게임 감도 변환기평균 계산기토크 변환기 (Nm, ft-lb, kgf-cm)소인수분해 계산기OPS 계산기무작위 토너먼트 대진표 생성기무작위 초능력 생성기연봉 인상 계산기시험관 출산 예정일 계산기CAGR 계산기16진수에서 10진수로 변환기16진수 변환기벤치 프레스 계산기cm에서 피트와 인치로 변환기10진수를 16진수로 변환수면 계산기월경주기 계산기kg에서 파운드로 변환기이미지 분할기러닝 페이스 계산기줄 바꿈 제거분수 백분율 변환기원형 면적 계산기파운드→킬로그램 변환기사랑 궁합 계산기주사위 굴리기💧 이슬점 계산기음력 양력 변환기기울기 및 경사 계산기랜덤 영어 단어 생성기랜덤 생일 생성기로마-숫자-변환기몫과 나머지 계산기🌬️ 체감 온도 계산기팩토리얼 계산기어린이 BMI 백분위수 계산기최대 공약수 계산기키 백분위수 계산기소수 검사기WAR 계산기주식 평균 계산기⏱️ 시간 계산기즉시 연금 계산기확률 계산기피보나치 되돌림 계산기변화율 계산기무작위 문자열 생성기연비 계산기반지 사이즈 변환기비디오 이미지 추출기FPS 변환기주차 계산기자동차 대출 계산기임신 체중 증가 계산기최소공배수 계산기Hex-계산기출루율 계산기퍼센트 감소 계산기임신 날짜 계산기콜라츠 추측 계산기난수 선택기백분율 증가 계산기📅 날짜 계산기ppm에서 퍼센트 변환기잘고 텍스트 생성기태양, 달 & 상승궁 계산기 🌞🌙✨일할 계산 월세 계산기자전거 기어비 계산기초과 근무 수당 계산기퇴직금 계산기속도 변환기YouTube 채널 통계암호화폐 레버리지 계산기ANC-계산기급여 변환 계산기이닝당 적중률(WHIP) 계산기호 길이 계산기랜덤 그룹 생성기모스 부호 생성기취소선 텍스트 생성기바코드 생성기타원 둘레 계산기켈리 기준 계산기혈당 변환기MAC 주소 생성기타이어 크기 계산기가위바위보 생성기반올림 계산기양육비 계산기임대 수익률 계산기랜덤 토론 주제 생성기야구 배팅 계산기중국식 성별 예측기형량 감경 계산기다항식 인수분해 계산기MAC-주소-조회백분율 성장 계산기연중 일수 계산기 - 오늘은 올해의 몇 번째 날인가요시저 암호 도구작은 텍스트 생성기 ⁽ᶜᵒᵖʸ ⁿ ᵖᵃˢᵗᵉ⁾피타고라스 정리 계산기볼링 점수 계산기분수에서 소수로 계산기중복 줄 제거인치에서 센티미터으로 변환기GFR 계산기적분 계산기금리 계산기랜덤 동물 생성기체지방률 계산기IP 서브넷 계산기두 날짜 사이 일수 계산기퍼센트에서 PPM으로 변환기태양 위치 계산기배당 수익률 계산기FFMI 계산기백분율 할인 계산기걸음 수 거리 계산기자동차 감가상각 계산기PSI에서 bar로 변환기랜덤 영화 선택기조합 계산기단어 찾기 퍼즐 생성기볼트 토크 계산기YouTube 쇼츠 수익화 계산기공학용 계산기랜덤 시간 생성기빗변 계산기시간 지속 계산기요일 계산기칼로리 소모 계산기영업 마진 계산기시그마 표기법 계산기 (합산)FIP 계산기HTML에서 텍스트 변환기🎰 가챠 천장 계산기이름 번호 계산기수성 역행 달력자동차 리스 계산기크레아티닌 청소율 계산기TDEE 계산기병렬 저항 계산기비율 및 백분율 계산기Z 점수 계산기빈 줄 제거초승달과 보름달 달력거꾸로-텍스트-생성기십진수에서 이진수로 변환기예쁜 글씨 생성기psi에서 kPa로 변환기페이스북 사용자 ID 조회다항식 전개 계산기순이익 계산기시차 적응 계산기⬛ 화면 비율 계산기온라인 문장 부호 제거 도구유압 실린더 힘 계산기타일 계산기계단 계산기무작위 날짜 생성기일일 복리 계산기출산 예정일 계산기모듈로 계산기주식 손익 계산기아기 성장 백분위수 계산기허리-엉덩이-비율 계산기난수 문자 생성기파이의 처음 n 자리목표 심박수 계산기스도쿠 생성기 및 풀이기최소한의 분수 계산기출석률 계산기속도 계산기야구 장타율 계산기정기 예금 계산기무작위 포커 핸드 생성기반전 텍스트16진수에서 이진법 변환기최대 심박수 계산기HEX에서 CMYK로 변환기삼진 대 볼넷 비율 계산기세제 사용량 계산기헌혈 시간 계산기타원 면적 계산기신발 사이즈 변환기윤년은 언제입니까임대료 인상 계산기ACFT 점수 계산기Wilks & DOTS 계산기휠 오프셋 계산기타이어 하중 지수 및 속도 등급 조회마일당 비용 계산기리스 바이아웃 계산기옥탄가 혼합 계산기2행정 오일 혼합 계산기엔진 배기량 계산기소파 문 통과 계산기장작 코드 계산기공기청정기 CADR 계산기제습기 크기 계산기천장 선풍기 크기 계산기커튼 크기 계산기러그 크기 계산기그림 거는 높이 계산기TV 설치 높이 계산기TV 크기 계산기연못 용적 및 라이너 계산기수영장 소금 계산기수영장 부피 계산기온수기 크기 계산기에폭시 레진 계산기난간동자 간격 계산기걸레받이 및 트림 계산기사이딩 계산기데크 스테인 계산기잔디 씨앗 계산기잔디 계산기아스팔트 계산기세제곱야드 계산기안테나 길이 계산기전선관 충전율 계산기직렬/병렬 커패시터 계산기유도 리액턴스 계산기방 조명 계산기럭스 루멘 계산기루멘 와트 변환기발전기 크기 계산기mAh to Wh 변환기3상 전력 계산기kVA 계산기암페어에서 와트 계산기Watts to Amps Calculator직렬 저항 계산기마찰 계산기경사면 계산기기계적 이득 계산기음속 계산기파동 속도 계산기부력 계산기종단 속도 계산기드브로이 파장 계산기광자 에너지 계산기E=mc² 계산기시간 지연 계산기케플러 제3법칙 계산기탈출 속도 계산기만유인력 계산기비어 람베르트 법칙 계산기네른스트 방정식 계산기삼투압 계산기끓는점 오름 계산기어는점 내림 계산기백분율 조성 계산기노르말 농도 계산기몰랄농도 계산기pKa Ka 변환기헨더슨 하셀바흐 계산기이론 수율 계산기한계 반응물 계산기전자 배치 계산기인터랙티브 주기율표AI 수업 지도안 생성기AI 퀴즈 생성기인용 생성기 (APA/MLA/Chicago)AP 점수 계산기ACT 점수 계산기SAT 점수 계산기백분율 CGPA 변환기CGPA 백분율 변환기쉬운 채점기 (EZ Grader)자녀 양육비 계산기아기 우유 섭취량 계산기기저귀 사이즈 계산기아기 이름 생성기아기 눈 색깔 예측기자녀 키 예측기hCG 배가 시간 계산기착상 계산기ISO 8601 날짜 포맷터율리우스일 변환기낮잠 계산기Moon Phase CalculatorSunrise & Sunset Calculator세계 시계날짜 로마 숫자 변환기은퇴 카운트다운금주 계산기반 생일 계산기기념일 계산기팁 분배 계산기이메일 마케팅 ROI 계산기리드당 비용 계산기운전자본 계산기유튜브 수익 추정기무작위 RPG 캐릭터 생성기