토픽 11 / 21·과목별 관계도
알고리즘 관계도
💡
이 관계도는 전체 토픽의 구조와 연결 관계를 보여줍니다. 학습 전에 전체 흐름을 파악하세요.
토픽 마인드맵
mindmap
root((알고리즘<br/>80개 토픽))
기초 개념
알고리즘
시간 복잡도
공간 복잡도
재귀
메모이제이션
정렬 알고리즘
기본 정렬
정렬
버블 정렬
선택 정렬
삽입 정렬
셸 정렬
고급 정렬
병합 정렬
퀵 정렬
힙 정렬
팀 정렬
선형 시간 정렬
계수 정렬
기수 정렬
정렬 이론
안정 정렬 vs 불안정 정렬
외부 정렬
검색 알고리즘
검색
선형 검색
이진 검색
해시 검색
보간 탐색
설계 기법
분할 정복
동적 프로그래밍
탐욕 알고리즘
백트래킹
브루트 포스
비트마스크 DP
그리디 vs DP 비교
알고리즘 기법
Two Pointers
Sliding Window
그래프 알고리즘
그래프 탐색
그래프 탐색
DFS
BFS
최단 경로
최단 경로
Dijkstra 알고리즘
Bellman-Ford 알고리즘
Floyd-Warshall 알고리즘
A* 알고리즘
최소 스패닝 트리
최소 스패닝 트리
Kruskal 알고리즘
Prim 알고리즘
위상 정렬
그래프 구조
Tarjan's SCC
이분 매칭
헝가리안 알고리즘
네트워크 플로우
최대 유량
최소 컷
Ford-Fulkerson / Edmonds-Karp / Dinic
트리 알고리즘
LCA
Heavy-Light Decomposition
문자열 알고리즘
문자열 매칭
문자열 매칭
KMP 알고리즘
Boyer-Moore 알고리즘
Rabin-Karp 알고리즘
Aho-Corasick 알고리즘
문자열 처리
Manacher 알고리즘
Z 알고리즘
Suffix Array
문자열 DP
최장 공통 부분 수열
편집 거리
LIS
고급 자료구조 알고리즘
Segment Tree
Fenwick Tree
Trie
Union-Find
기하 알고리즘
Convex Hull
수학/변환
FFT
허프만 코딩
특수 알고리즘
Mo's Algorithm
복잡도 이론
NP 완전
P vs NP 문제
고급 알고리즘 이론
근사 알고리즘
온라인 알고리즘
병렬 알고리즘
메타휴리스틱
메타휴리스틱
유전 알고리즘
시뮬레이티드 어닐링
응용 수학
대기행렬 이론주요 카테고리별 토픽 수
| 카테고리 | 토픽 수 | 주요 기술 |
|---|---|---|
| 기초 개념 | 5개 | 알고리즘, 시간복잡도, 공간복잡도, 재귀, 메모이제이션 |
| 정렬 알고리즘 | 14개 | 버블, 선택, 삽입, 셸, 병합, 퀵, 힙, 팀, 계수, 기수, 안정/불안정, 외부 정렬 |
| 검색 알고리즘 | 5개 | 검색, 선형검색, 이진검색, 해시검색, 보간탐색 |
| 설계 기법 | 7개 | 분할정복, DP, 탐욕, 백트래킹, 브루트포스, 비트마스크 DP, 그리디 vs DP |
| 알고리즘 기법 | 2개 | Two Pointers, Sliding Window |
| 그래프 알고리즘 | 20개 | DFS/BFS, Dijkstra, MST, 위상정렬, SCC, LCA, HLD, 헝가리안, 최대유량, 최소컷, Ford-Fulkerson |
| 문자열 알고리즘 | 12개 | KMP, Boyer-Moore, Rabin-Karp, Aho-Corasick, LCS, 편집거리, LIS |
| 고급 자료구조 | 4개 | 세그먼트 트리, Fenwick 트리, Trie, Union-Find |
| 기하 알고리즘 | 1개 | Convex Hull |
| 수학/변환 | 2개 | FFT, 허프만 코딩 |
| 특수 알고리즘 | 1개 | Mo's Algorithm |
| 복잡도 이론 | 2개 | NP 완전, P vs NP 문제 |
| 고급 알고리즘 이론 | 3개 | 근사 알고리즘, 온라인 알고리즘, 병렬 알고리즘 |
| 메타휴리스틱 | 3개 | 메타휴리스틱, 유전 알고리즘, 시뮬레이티드 어닐링 |
| 응용 수학 | 1개 | 대기행렬 이론 |
총 80개 토픽: (기존 61개에서 19개 추가)
핵심 연관 관계
정렬 알고리즘 진화 (시간복잡도)
O(n²) - 기본 ├─ 버블 정렬 ├─ 선택 정렬 ├─ 삽입 정렬 (거의 정렬된 데이터에 효율적) └─ 셸 정렬 (삽입 정렬 개선, 간격 기반) O(n log n) - 고급 ├─ 병합 정렬 (안정, 추가 메모리) ├─ 퀵 정렬 (평균 빠름, 최악 O(n²)) ├─ 힙 정렬 (제자리, 비안정) └─ 팀 정렬 (병합+삽입, 실전 최적화, Python/Java 기본) O(n) - 특수 조건 ├─ 계수 정렬 (정수, 범위 제한) └─ 기수 정렬 (자릿수 기반) 특수 정렬 └─ 외부 정렬 (메모리 초과 데이터, 다단계 병합)
알고리즘 설계 기법
분할 정복 (Divide & Conquer) ├─ 병합 정렬 ├─ 퀵 정렬 └─ 이진 검색 동적 프로그래밍 (DP) ├─ LCS ├─ 편집 거리 ├─ LIS ├─ 배낭 문제 ├─ 비트마스크 DP (상태 압축) └─ 메모이제이션 (Top-Down DP) 탐욕 알고리즘 (Greedy) ├─ Dijkstra ├─ Prim ├─ Kruskal └─ 허프만 코딩 백트래킹 ├─ N-Queens └─ 순열/조합 그리디 vs DP 비교 ├─ 최적 부분 구조 (공통) ├─ 탐욕 선택 속성 (Greedy만) └─ 중복 부분 문제 (DP만)
그래프 탐색 기반 알고리즘
DFS 응용 ├─ 사이클 탐지 ├─ 위상 정렬 ├─ Tarjan's SCC └─ 이분 매칭 BFS 응용 ├─ 최단 경로 (무가중치) └─ 레벨 순회
최단 경로 알고리즘 비교
단일 시작점 (Single Source) ├─ Dijkstra (음수 간선 없음, 그리디) └─ Bellman-Ford (음수 간선 허용, DP) 모든 쌍 (All Pairs) └─ Floyd-Warshall (DP, O(V³)) 휴리스틱 └─ A* (목표 지향, h(n) 함수)
최소 스패닝 트리 (MST)
간선 중심 └─ Kruskal (Union-Find, 간선 정렬) 정점 중심 └─ Prim (우선순위 큐, Dijkstra와 유사)
네트워크 플로우
최대 유량 (Max Flow) ├─ Ford-Fulkerson (기본, DFS 기반) ├─ Edmonds-Karp (BFS 기반, O(VE²)) └─ Dinic (레벨 그래프, O(V²E)) 최대유량-최소컷 정리 ├─ 최대 유량 = 최소 컷 └─ 이분 매칭과 연결 (쾨닉 정리) 매칭 ├─ 이분 매칭 (호프크로프트-카프) └─ 헝가리안 알고리즘 (최소 비용 할당)
문자열 매칭 알고리즘
단순 매칭 └─ 브루트 포스 O(nm) 전처리 기반 ├─ KMP (패턴 전처리, O(n+m)) ├─ Boyer-Moore (역방향, 실전 빠름) └─ Rabin-Karp (해시, 다중 패턴) 다중 패턴 └─ Aho-Corasick (트라이 + KMP, 여러 패턴) 회문/반복 ├─ Manacher (최장 회문) └─ Z 알고리즘 (접두사 매칭) 접미사 기반 └─ Suffix Array (모든 부분 문자열)
구간 쿼리 자료구조
Segment Tree ├─ 구간 합/최소/최대 ├─ 레이지 업데이트 └─ O(log n) 쿼리/업데이트 Fenwick Tree (BIT) ├─ 누적 합 ├─ 메모리 효율적 └─ O(log n) 쿼리/업데이트
검색 알고리즘 비교
순차 검색 └─ 선형 검색 O(n) 분할 기반 ├─ 이진 검색 O(log n) - 정렬 필수 └─ 보간 탐색 O(log log n) - 균등 분포 시 해시 기반 └─ 해시 검색 O(1) 평균 - 해시 충돌 처리
메타휴리스틱 / 근사
메타휴리스틱 ├─ 유전 알고리즘 (진화 기반) ├─ 시뮬레이티드 어닐링 (물리 기반) └─ NP-Hard 문제의 근사 해 근사 알고리즘 ├─ 다항 시간 보장 └─ 근사 비율 분석 온라인 알고리즘 ├─ 미래 입력 모름 └─ 경쟁 비율 (Competitive Ratio)
알고리즘 기법 (Two Pointers / Sliding Window)
Two Pointers ├─ 정렬된 배열에서 쌍 찾기 ├─ 부분 배열 합 └─ O(n) 선형 시간 Sliding Window ├─ 고정/가변 크기 윈도우 ├─ 부분 문자열/배열 최적화 └─ Two Pointers의 특수한 형태
시간 복잡도 비교
정렬 알고리즘
| 정렬 | 최선 | 평균 | 최악 | 공간 | 안정성 |
|---|---|---|---|---|---|
| 버블 | O(n) | O(n²) | O(n²) | O(1) | 안정 |
| 선택 | O(n²) | O(n²) | O(n²) | O(1) | 불안정 |
| 삽입 | O(n) | O(n²) | O(n²) | O(1) | 안정 |
| 셸 | O(n log n) | O(n^1.5) | O(n²) | O(1) | 불안정 |
| 병합 | O(n log n) | O(n log n) | O(n log n) | O(n) | 안정 |
| 퀵 | O(n log n) | O(n log n) | O(n²) | O(log n) | 불안정 |
| 힙 | O(n log n) | O(n log n) | O(n log n) | O(1) | 불안정 |
| 팀 | O(n) | O(n log n) | O(n log n) | O(n) | 안정 |
| 계수 | O(n+k) | O(n+k) | O(n+k) | O(k) | 안정 |
| 기수 | O(d(n+k)) | O(d(n+k)) | O(d(n+k)) | O(n+k) | 안정 |
그래프 알고리즘
| 알고리즘 | 시간 복잡도 | 공간 | 특징 |
|---|---|---|---|
| DFS | O(V+E) | O(V) | 스택/재귀 |
| BFS | O(V+E) | O(V) | 큐 |
| Dijkstra | O((V+E) log V) | O(V) | 우선순위 큐, 음수 간선 불가 |
| Bellman-Ford | O(VE) | O(V) | 음수 간선 가능 |
| Floyd-Warshall | O(V³) | O(V²) | 모든 쌍 최단 경로 |
| Kruskal | O(E log E) | O(V) | Union-Find |
| Prim | O((V+E) log V) | O(V) | 우선순위 큐 |
| Tarjan SCC | O(V+E) | O(V) | DFS 기반 |
| Ford-Fulkerson | O(E × max_flow) | O(V+E) | 증가 경로 |
| Edmonds-Karp | O(VE²) | O(V+E) | BFS 기반 |
문자열 알고리즘
| 알고리즘 | 전처리 | 매칭 | 공간 | 특징 |
|---|---|---|---|---|
| 브루트 포스 | O(1) | O(nm) | O(1) | 단순 |
| KMP | O(m) | O(n) | O(m) | 실패 함수 |
| Boyer-Moore | O(m+σ) | O(n/m)~O(nm) | O(σ) | 실전 빠름 |
| Rabin-Karp | O(m) | O(n+m) | O(1) | 해시, 다중 패턴 |
| Aho-Corasick | O(Σm) | O(n+z) | O(Σm) | 다중 패턴 |
σ = 알파벳 크기, z = 매칭 개수
학습 순서 추천
1단계: 기초
1. 시간/공간 복잡도
2. 재귀, 메모이제이션
3. 정렬 (버블, 선택, 삽입)
4. 검색 (선형, 이진)
2단계: 고급 정렬
5. 병합 정렬 (분할 정복)
6. 퀵 정렬
7. 힙 정렬
8. 셸 정렬, 팀 정렬
9. 안정 정렬 vs 불안정 정렬
3단계: 알고리즘 설계 기법
10. 분할 정복
11. 동적 프로그래밍
12. 탐욕 알고리즘
13. 백트래킹
14. 그리디 vs DP 비교
4단계: 그래프 기초
15. DFS, BFS
16. Dijkstra
17. MST (Kruskal, Prim)
5단계: 그래프 고급
18. Bellman-Ford
19. Floyd-Warshall
20. 위상 정렬
21. Tarjan's SCC
6단계: 문자열
22. KMP
23. LCS, LIS
24. 편집 거리
7단계: 고급 자료구조
25. Segment Tree
26. Fenwick Tree
27. Union-Find
28. Trie
8단계: 특수 알고리즘 / 기법
29. A* (휴리스틱 탐색)
30. Two Pointers, Sliding Window
31. 비트마스크 DP
32. 해시 검색, 보간 탐색
9단계: 네트워크 플로우
33. 이분 매칭, 헝가리안 알고리즘
34. 최대 유량, 최소 컷
35. Ford-Fulkerson / Edmonds-Karp / Dinic
10단계: 고급 이론
36. NP 완전, P vs NP 문제
37. 근사 알고리즘, 온라인 알고리즘
38. 메타휴리스틱 (유전 알고리즘, SA)
39. 병렬 알고리즘
40. 대기행렬 이론
시험 출제 포인트
고빈도 주제
- •정렬 비교: 시간복잡도, 안정성, 사용 사례 (팀 정렬 포함)
- •이진 검색: 구현, 변형 문제
- •DP: 개념, LCS, LIS, 편집 거리, 배낭 문제, 비트마스크 DP
- •Dijkstra: 동작 원리, 우선순위 큐 사용
- •MST: Kruskal vs Prim 비교
- •DFS vs BFS: 차이, 응용
- •재귀와 메모이제이션: DP와의 관계
중요 개념
- •분할 정복: 병합 정렬, 퀵 정렬
- •탐욕 vs DP: 차이, 최적 부분 구조, 그리디 vs DP 비교
- •Floyd-Warshall: 모든 쌍 최단 경로
- •위상 정렬: 순환 그래프 탐지
- •KMP: 실패 함수, O(n+m)
- •Two Pointers / Sliding Window: 배열/문자열 최적화
- •안정 정렬 vs 불안정 정렬: 정렬 안정성 개념
고급 주제
- •Tarjan's SCC: 강연결 요소
- •이분 매칭: 호프크로프트-카프
- •헝가리안 알고리즘: 최소 비용 할당 문제
- •최대 유량 / 최소 컷: Ford-Fulkerson, Edmonds-Karp, Dinic
- •Segment Tree: 레이지 업데이트
- •A*: 휴리스틱 함수, Dijkstra와 차이
- •해시 검색: 해시 충돌 해결 방법
복잡도 이론
- •NP-Complete: P vs NP, NP-Hard
- •근사 알고리즘: NP-Hard 문제의 근사 해
- •온라인 알고리즘: 경쟁 비율
고급 알고리즘
- •메타휴리스틱: 유전 알고리즘, 시뮬레이티드 어닐링
- •병렬 알고리즘: Amdahl의 법칙, MapReduce
- •대기행렬 이론: M/M/1, 서비스율, 도착률
- •외부 정렬: 다단계 병합, 대용량 데이터
마인드맵 활용 팁:
- •정렬 알고리즘은 시간복잡도별로 그룹화 (팀 정렬, 셸 정렬 추가)
- •그래프 알고리즘은 탐색(DFS/BFS) → 최단경로 → MST → 네트워크 플로우 순으로 학습
- •DP와 탐욕 알고리즘의 차이 명확히 이해 (그리디 vs DP 비교 토픽 참고)
- •문자열 알고리즘은 KMP가 핵심 (다른 것들은 KMP 변형)
- •세그먼트 트리/Fenwick 트리는 구간 쿼리 최적화
- •Two Pointers/Sliding Window는 배열 문제의 핵심 기법
- •네트워크 플로우(최대유량/최소컷)는 이분 매칭과 연결
- •메타휴리스틱은 NP-Hard 문제 해결의 실용적 접근