728x90
- 일렬로 나열하지 않고, 자료 순서나 관계가 복잡한 구조
- 일반적으로 트리, 그래프를 의미함
- 배열/리스트처럼 “앞뒤 순서”보다, “연결 관계·계층·우선순위”가 중요한 경우에 사용됨
1. 그래프
- 정점과 간선으로 이루어진 자료 구조
💭 예: 보니가 회사까지 출근함 → 보니와 회사는 '정점', 회사까지 가는 길은 '간선' - 노드 간 경로가 여러 개일 수 있음 → 정점으로 나가는 간선을 outdegree, 들어오는 간선을 indegree
- 가중치: 간선과 정점 사이에 드는 비용
- 그래프는 방향성 여부에 따라 나뉨
- 방향 그래프: 간선에 방향 있음 (A → B)
- 무방향 그래프: 방향 없음 (A — B)
- 가중치 그래프는 “비용/거리/시간” 같은 현실 문제 모델링에 적합
💭 예: 최단 경로, 추천 시스템, 의존성 분석 - 사이클이 존재할 수 있음
- 트리보다 자유도가 높음
2. 트리

- 그래프 중 하나
- 정점과 간선으로 이루어져 있고, 트리 구조로 배열된 일종의 계층적 데이터의 집합
- 루트 노드, 내부 노드, 리프 노드 등으로 구성
- 루트 노드
- 가장 위에 있는 노드
- 트리를 탐색할 때 루트 노드 중심으로 탐색 시 쉽게 풀이 가능
- 트리는 항상 하나의 루트 노드만 존재
- 내부 노드
- 루트 노드와 리프 노드 사이에 있는 노드
- 자식 노드를 하나 이상 가지는 노드
- 리프 노드는 내부 노드에 포함되지 않음
- 리프 노드
- 자식 노드가 없는 노드
- 트리의 끝 지점
- 루트 노드
- 부모-자식 계층 구조를 가짐
- 간선 수(E) = 노드 수(V) - 1
- 트리 내 노드 간 경로는 반드시 존재하며, 유일함 (두 개 이상 존재 불가)
1. 이진 트리
- 자식의 수가 2개 이하인 트리
- 정이진 트리
- 자식 노드가 0 또는 두 개인 이진 트리
- 완전 이진 트리
- 왼쪽부터 채워져 있는 이진 트리
- 마지막 레벨 제외 모든 레벨은 완전히 채워져 있으나, 마지막 레벨의 경우 왼쪽부터 채워짐
- 변질 이진 트리
- 자식 노드가 하나밖에 없는 이진 트리
- 포화 이진 트리
- 모든 노드가 꽉 차 있는 이진 트리
- 균형 이진 트리
- 왼쪽과 오른쪽 노드의 높이 차가 1 이하인 이진 트리 → 레드 블랙 트리가 여기에 해당
2. 이진 탐색 트리 (BST)
- 노드의 오른쪽 하위 트리에는 '노드 값보다 큰 값'이 있는 노드만 포함, 왼쪽 하위 트리에는 '노드 값보다 작은 값'이 들어 있는 트리
- 왼쪽 및 오른쪽 하위 트리도 해당 특성을 가져서 '검색'에 용이
- 평균 시간 복잡도는 O(logN), 최악의 경우에는 O(n)
3. AVL 트리

- 최악의 경우 선형적인 트리가 되는 것을 방지하고 스스로 균형을 잡는 이진 탐색 트리
- 두 자식 서브트리의 높이는 항상 ≤ 1
- 탐색/삽입/삭제시 시간복잡도는 O(log N)
- 삽입/삭제 시 회전(rotation) 으로 균형 유지
4. 레드 블랙 트리
- 균형 이진 탐색 트리
- 각 노드는 Red / Black 색상을 가짐
- AVL보다 균형 조건이 느슨
- 탐색, 삽입, 삭제 모두 시간복잡도가 O(log n)
- map, set의 내부 구현으로 사용됨
3. 힙
- 완전 이진 트리 기반의 자료 구조
- 최댓값 또는 최솟값을 빠르게 관리하기 위한 자료 구조
- 힙의 종류는 최소힙과 최대힙 두 가지가 존재
- 최대힙: 루트 노드에 있는 키는 모든 자식에 있는 키 중에서 가장 커야 함.
- 최소힙: 최소힙에서 루트 노드에 있는 키는 모든 자식에 있는 키 중에서 최솟값이어야 함.
해당 힙에 따라, 각 노드의 자식 노드와의 관계도 이와 같은 특징이 재귀적으로 이루어져야 함.
- 최대힙
- 삽입
- 힙에 새로운 요소가 들어오면, 새로운 노드를 힙의 마지막 노드에 이어서 삽입.
- 그 후 새로운 노드를 부모 노드들과 크기를 비교하며 교환(트리 높이만큼 이동)하여 힙의 성질을 만족
- 삭제
- 최대힙에서 최댓값은 루트 노드이므로 루트 노드가 삭제 > 마지막 노드를 루트로 올린 후 > 자식 노드 중 더 큰 값과 비교하며 내려감
- 삽입
4. 우선순위 큐
- 일반 큐(FIFO)와 달리 들어온 순서가 아니라, 우선순위가 높은 요소가 먼저 제공되는 자료 구조
- 힙을 기반으로 구현됨
- CPU 스케줄링, 작업 스케줄러, 이벤트 처리 시스템 등에서 사용
5. 맵 (Map)
- 특정 순서에 따라 키(Key)와 매핑된 값(Value)의 조합으로 형성된 자료 구조
- 키는 중복 불가하지만, 값은 중복 가능
- 레드 블랙 트리 자료 구조를 기반으로 형성 → "항상 균형 잡힌 이진 탐색 트리"
- 삽입 시 키 기준으로 항상 정렬 상태 유지
- 삽입 / 삭제 / 탐색 모두 O(log N)
- map의 종류: map vs unordered_map
항목 map unordered_map 내부 구조 레드-블랙 트리 해시 테이블 정렬 O X 탐색 O(log N) 평균 O(1) 범위 탐색 가능 불가능 순회 순서 정렬 순 랜덤 - 주요 메소드들
- clear(): 모든 요소 삭제
- size(): 요소 개수 반환
- erase(): 특정 키와 키에 매핑된 값 삭제
- 해시 테이블을 구현할 때 map 사용
- ✅ map이 적합한 경우
- 키 기준으로 정렬된 데이터가 필요할 때 (값에 바로 접근 가능)
- 범위 기반 탐색
- 순서가 논리적으로 의미 있을 때
- 데이터 개수가 많아도 최악 성능 보장이 필요할 때
- ❌ map이 부적합한 경우: 정렬 필요 없음 + 속도 최우선 → unordered_map이 더 적절
6. 셋 (Set)
- 특정 순서에 따라 중복되지 않는 값만 저장하는 컨테이너
- 값 자체가 곧 키 역할
- Set의 종류: set vs unordered_set
항목 set unordered_set 내부 구조 레드-블랙 트리 해시 테이블 정렬 O X 탐색 O(log N) 평균 O(1) - 중복 불가
- 동일한 값을 여러 번 넣어도 1개만 저장
- 삽입 시 이미 존재하면 무시
set = {1, 3, 5} insert(3) → 변화 없음
- 자동 정렬
- 기본적으로 오름차순
- 내부적으로 트리가 정렬을 유지
insert 순서: 5 → 1 → 3 결과: {1, 3, 5}
- 값의 존재 여부 탐색에 특화
- ✅ set이 적합한 경우
- 중복 제거가 핵심
- 데이터가 정렬된 상태로 필요
- 범위 탐색 (lower_bound, upper_bound) 필요
- 최악 성능도 예측 가능해야 할 때
7. 해시 테이블
- 무한에 가까운 데이터(키)들을 유한한 개수의 해시 값으로 매핑한 테이블
- 삽입, 삭제, 탐색 시 평균적으로 O(1)의 시간 복잡도를 가짐
- unordered_map으로 구현
- 작은 크기의 캐시 메모리로도 프로세스를 관리하도록 할 수 있음
728x90
'What I Learned > etc.' 카테고리의 다른 글
| [CS] 복잡도 (0) | 2026.01.05 |
|---|---|
| [CS] 인덱스 (0) | 2025.12.31 |
| [CS] ERD와 정규화 과정 (1) | 2025.12.30 |
| [CS] CPU 스케줄링 알고리즘 (0) | 2025.12.24 |
| [CS] 메모리 관리 (0) | 2025.12.23 |