작업 흐름 간소화: miniwebtool 검색.
추가
> 위상 정렬 계산기
 

위상 정렬 계산기

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 조회방어율 계산기상대 표준 편차 계산기애너그램 생성기16진수 변환기랜덤 이름 생성기CAGR 계산기분수에서 소수로 계산기WAR 계산기16진수에서 10진수로 변환기소인수분해 계산기공백 제거줄 바꿈 추가신뢰 구간 계산기cm에서 피트와 인치로 변환기시저 암호 도구OPS 계산기월경주기 계산기10진수를 16진수로 변환파운드→킬로그램 변환기최소공배수 계산기최대 공약수 계산기내 행운의 숫자는?백분율 오류 계산기로마-숫자-변환기사랑 궁합 계산기줄 바꿈 제거이닝당 적중률(WHIP) 계산기소수 검사기이미지 분할기무작위 초능력 생성기복리 계산기랜덤 영어 단어 생성기피트 인치 센티미터 변환기FPS 변환기kg에서 파운드로 변환기몫과 나머지 계산기비디오 이미지 추출기러닝 페이스 계산기기울기 및 경사 계산기야구 배팅 계산기십진수에서 이진수로 변환기무작위 문자열 생성기이진 계산기MAC-주소-조회확률 분포 계산기중앙값 계산기잘고 텍스트 생성기변화율 계산기Hex-계산기칼로리 소모 계산기계단 계산기수면 계산기분수 계산기암호화폐 레버리지 계산기분수 백분율 변환기랜덤 생일 생성기배당 수익률 계산기🎮 게임 감도 변환기아크코사인 (Arccos) 계산기다항식 전개 계산기매출총이익 계산기근무 시간 계산기마라톤 페이스 계산기모스 부호 생성기백분율 증가 계산기이진수를 십진수로 변환ppm에서 퍼센트 변환기두 점 사이의 거리 계산기무작위 토너먼트 대진표 생성기atan2 계산기즉시 연금 계산기빗변 계산기비트-계산기분수 계산기출루율 계산기1RM (1회 최대 반복) 계산기기대 수명 계산기📅 날짜 계산기연중 일수 계산기 - 오늘은 올해의 몇 번째 날인가요카페인 과다복용 계산기FIP 계산기혈당 변환기랜덤 그룹 생성기야구 장타율 계산기표준 오차 계산기바코드 생성기초과 근무 수당 계산기난수 선택기Z 점수 계산기아크탄젠트 계산기퍼센트 감소 계산기퍼센트에서 PPM으로 변환기유효숫자 계산기가위바위보 생성기콜라츠 추측 계산기속도 변환기PSI에서 bar로 변환기공학용 계산기인접 행렬 계산기위상 정렬 계산기그래프 채색 계산기논리 게이트 시뮬레이터카르노 맵 (K-Map) 솔버불 대수 간소화기분할 함수 계산기디지털 루트 계산기피보나치 수 검사기이집트 분수 계산기뫼비우스 함수 계산기골드바흐 추측 검증기메르센 소수 체커쌍둥이 소수 찾기친화수 검사기완전수 검사기모듈러 거듭제곱 계산기중복순열 계산기효과 크기 계산기상대위험도 계산기오즈비 계산기분할표 계산기피셔 정확 검정 계산기스피어만 순위 상관 계수 계산기베타 분포 계산기와이블 분포 계산기지수 분포 계산기기하 분포 계산기음이항분포 계산기초기하 분포 계산기F-검정 / F-분포 계산기베이즈 정리 계산기특성 다항식 계산기행렬 거듭제곱 계산기촐레스키 분해 계산기QR 분해 계산기행렬 대각화 계산기크라메르 법칙 계산기열공간 계산기영공간 계산기벡터 사이의 각도 계산기단위 벡터 계산기벡터 크기 계산기벡터 외적 계산기내적 계산기행렬 곱셈 계산기역행렬 계산기RREF 계산기 (행 사다리꼴)뉴턴 방법 계산기야코비 행렬 계산기면적분 계산기선적분 계산기cURL 계산기발산 계산기그래디언트 계산기 (다변수)최적화 계산기 (미적분)관련 변화율 계산기순간 변화율 계산기평균 변화율 계산기무한 급수 합 계산기급수 수렴 판정 계산기거듭제곱 급수 계산기매클로린 급수 계산기로피탈의 정리 계산기이상적분 계산기심프슨 법칙 계산기사다리꼴 공식 계산기리만 합 계산기매개변수 곡선 그래프 도구회전체 표면적 계산기회전체 부피 계산기좌표기하 거리 계산기헤론의 공식 계산기원의 접선 계산기각의 이등분선 계산기내접원 계산기외접원 계산기대권 거리 계산기3D 거리 계산기토러스 계산기원뿔대 계산기불규칙 다각형 면적 계산기정다각형 계산기원뿔 곡선 식별기쌍곡선 계산기포물선 계산기이항정리 전개 계산기파스칼의 삼각형 생성기곱 표기법 계산기 (Pi Notation)시그마 표기법 계산기 (합산)유리근 정리 계산기데카르트 부호 법칙 계산기평행선 및 수직선 계산기직선의 방정식 계산기표준형에서 기울기 절편형 변환기점 기울기 형태 계산기비선형 연립방정식 풀이기유리 방정식 풀이문자 방정식 풀이기삼각 방정식 풀이기지수 방정식 풀이기로그 방정식 풀이기사차방정식 계산기삼차방정식 풀이기어림 계산기숫자 분수 변환기건너뛰기 세기 생성기단위 요금 계산기천장 함수와 바닥 함수 계산기절댓값 계산기숫자 패턴 찾기자릿값 차트 생성기연산 순서 계산기 (PEMDAS)세로 덧셈 뺄셈 계산기긴 곱셈 계산기구구단표 생성기🎮 게임 화폐 변환기🎲 드롭 확률 계산기🎰 가챠 천장 계산기⚔️ DPS 계산기❄️ 눈 오는 날 계산기🚚 이사 비용 계산기🔍 표절 검사기📷 OCR / 이미지에서 텍스트 추출📈 꺾은선 그래프 만들기🥧 파이 차트 메이커📊 막대 그래프 만들기🔊 톤 생성기🖱️ 클릭 카운터온라인 메모장⬛ 화면 비율 계산기🌍 탄소 발자국 계산기👙 브라 사이즈 계산기타이어 크기 계산기연료비 계산기💧 이슬점 계산기🌡️ 열지수 계산기🌬️ 체감 온도 계산기⏰ 온라인 알람 시계⏰ 타임카드 계산기📅 날짜 차이 계산기🕐 군사 시간 변환기⏱️ 시간 계산기⏱️ 온라인 스톱워치⏱️ 카운트다운 타이머🌐 시간대 변환기카펫 계산기옹벽 계산기HVAC 용량 계산기단열재 계산기포장재 계산기철근 계산기목재 계산기평방피트 계산기교차 곱셈 계산기다섯 수 요약 계산기백분위수 계산기정규분포 계산기p-Value 계산기비율 계산기完全平方式 계산기반올림 계산기긴 나눗셈 계산기포모도로 공부 타이머시험 점수 계산기가중 성적 계산기최종 성적 계산기성적 계산기공진 주파수 계산기임피던스 계산기데시벨(dB) 계산기역률 계산기RC 시정수 계산기변압기 계산기전선 게이지 계산기555 타이머 계산기커패시터 계산기병렬 저항 계산기전압 분배기 계산기LED 저항기 계산기몰/그램/입자 변환기적정 계산기끓는점 계산기실험식 계산기수율 계산기화학양론 계산기화학 반응식 균형 계산기희석 계산기마력 계산기토크 계산기자유 낙하 계산기이상 기체 법칙 계산기압력 계산기밀도 계산기일과 일률 계산기위치 에너지 계산기운동 에너지 계산기포물선 운동 계산기운동량 계산기속도 계산기가속도 계산기힘 계산기인플루언서 ROI 계산기ROAS 계산기CTR 계산기소셜 미디어 사용자 이름 확인기소셜 미디어 게시 시간 최적화 도구Social Media ROI 계산기Facebook 광고 비용 계산기YouTube 쇼츠 수익화 계산기Twitch 수익 계산기YouTube 시청 시간 계산기Twitter/X 타임스탬프 변환기YouTube 채널 통계TikTok 수익 계산기소셜 미디어 이미지 크기 가이드Instagram 폰트 생성기Twitter/X 글자수 카운터YouTube 댓글 추첨기YouTube 태그 추출기YouTube 썸네일 다운로더유튜브 수익 추정기무작위 RPG 캐릭터 생성기