자료구조를 들어야 알고리즘을 들을 수 있고, 라이브러리 A를 빌드해야 B를 빌드할 수 있습니다. 이렇게 먼저 해야 하는 일이 정해진 작업들을 모순 없이 한 줄로 세우는 것이 위상 정렬입니다. 정보처리기사 그래프 문제, 프로젝트 일정 관리(선후행 관계)와 연결되는 토픽입니다.
정의: 방향 비순환 그래프(DAG)에서 모든 간선 u → v에 대해 u가 v보다 앞에 오도록 정점을 나열하는 것입니다. 사이클이 있으면 위상 정렬은 존재하지 않습니다.
| 단계 | 꺼낸 정점 | 진입 차수가 0이 되어 큐에 들어간 정점 |
|---|---|---|
| 초기 | – | 이산수학, 프로그래밍 |
| 1 | 이산수학 | 없음(알고리즘은 아직 1) |
| 2 | 프로그래밍 | 자료구조, 운영체제 |
| 3 | 자료구조 | 알고리즘, 데이터베이스 |
| 4 | 운영체제 | 네트워크 |
| 5 | 알고리즘 | 없음(인공지능은 아직 1) |
| 6 | 데이터베이스 | 인공지능 |
| 7~8 | 네트워크, 인공지능 | – |
결과는 이산수학 → 프로그래밍 → 자료구조 → 운영체제 → 알고리즘 → 데이터베이스 → 네트워크 → 인공지능입니다(코드로 검산). 큐에 넣는 순서를 바꾸면 프로그래밍을 먼저 꺼내는 등 다른 정답도 가능합니다.
| 구분 | 카흔(Kahn, 1962) | DFS 기반 |
|---|---|---|
| 원리 | 진입 차수 0인 정점을 큐로 처리 | DFS 종료 순서(후위)를 뒤집음 |
| 사이클 판별 | 처리된 정점 수가 V보다 적으면 사이클 | 탐색 중 방문 중인 정점을 다시 만나면(역방향 간선) 사이클 |
| 복잡도 | O(V+E) | O(V+E) |
| 장점 | 동시에 시작 가능한 작업 묶음을 단계별로 파악하기 쉬움 | 재귀로 간결하게 구현 |
위상 정렬은 DAG에서 간선 방향을 지키는 정점 순서이며, 카흔 알고리즘은 진입 차수 0인 정점을 큐로 꺼내 O(V+E)에 구하고, 남는 정점이 있으면 사이클입니다.
학습용 정리이며 실제 시험 문항과 다를 수 있습니다. 출제 기준은 큐넷 공지를 확인하세요. 그림은 이해를 돕기 위한 개념도와 예시입니다.
환자 1,000명 중 암 환자가 20명뿐인 데이터로 모델을 만들었는데 정확도가 98%라면 훌륭한 모델일까? 안타깝게도 "모두…
코드를 고칠 때 한 군데만 바꿨는데 엉뚱한 곳이 줄줄이 깨진 경험이 있다면, 그것이 결합도가 높은…
두 스레드가 같은 변수를 동시에 고치면 결과가 실행할 때마다 달라진다. 이 문제를 푸는 도구가 세마포어와…
사내 시스템에 한 번 로그인했는데 파일 서버, 메일, 인트라넷이 비밀번호를 다시 묻지 않는다면 뒤에서 커버로스(Kerberos)가…
"인덱스를 만들었는데 왜 안 타요?" SQL 튜닝에서 가장 자주 나오는 질문이다. 답을 알려면 인덱스가 어떤…
11월에 일정이 있는 금융 DT 테스트 시험을 정리했습니다. 접수, 시험, 합격 발표 날짜를 한 번에…