Coding Test

[자료구조] 비선형 자료 구조

mooni_ 2025. 5. 26. 15:09

비선형 자료구조란?

비선형 자료구조는 데이터가 순차적으로 나열되지 않고, 요소 간의 관계가 복잡하고 계층적인 구조를 이루는 자료구조입니다. 대표적으로 트리(Tree)그래프(Graph)가 있습니다.


1. 그래프 (Graph)

  • 정점(Vertex): 하나의 지점을 의미 (ex. 도시, 사람)
  • 간선(Edge): 정점 간의 연결 (ex. 도로, 친구 관계)
  • 방향성: 단방향 그래프, 양방향 그래프로 나뉨
  • 가중치(Weight): 간선에 부여된 비용 또는 거리

2. 트리 (Tree)

트리는 그래프의 일종으로, 계층적 구조를 가진 비선형 자료구조입니다.

  • 루트 노드: 최상위 노드
  • 리프 노드: 자식이 없는 노드
  • 내부 노드: 자식이 있는 노드
  • 서브트리: 어떤 노드를 루트로 하는 부분 트리

주요 개념

  • V(노드 수) - 1 = E(간선 수)
  • 깊이(Depth): 루트에서 특정 노드까지의 거리
  • 높이(Height): 루트에서 리프 노드까지의 최대 거리
  • 레벨(Level): 노드의 깊이와 같음

 

2-1. 이진 트리 (Binary Tree)

모든 노드가 최대 두 개의 자식 노드를 가질 수 있는 트리

  • 정이진 트리: 자식 노드가 0개 또는 2개
  • 완전 이진 트리: 마지막 레벨을 제외하고 왼쪽부터 채워짐
  • 포화 이진 트리: 모든 레벨이 완전히 채워짐
  • 변질 이진 트리: 자식이 하나뿐인 노드가 존재
  • 균형 이진 트리: 좌우 서브트리의 높이 차이가 1 이하

 

2-2. 이진 탐색 트리 (BST)

왼쪽 하위 트리는 현재 노드보다 작은 값, 오른쪽 하위 트리는 큰 값 저장

  • 탐색, 삽입, 삭제 평균 시간복잡도: O(log n)
  • 최악의 경우(편향된 트리): O(n)

 

2-3. AVL 트리

  • BST의 변형으로, 자동으로 균형을 유지하는 트리
  • 좌우 서브트리의 높이 차이가 항상 1 이하
  • 삽입/삭제 시 불균형 발생 시 회전(Rotation)을 통해 균형 복원

 

2-4. 레드 블랙 트리

  • 균형 이진 탐색 트리의 대표적인 구현
  • 노드는 빨간색 또는 검은색 중 하나의 색을 가짐
  • 삽입/삭제 후에도 O(log n) 보장
  • C++ STL의 map, set 내부 구현에 사용
 

3. 힙 (Heap)

  • 완전 이진 트리 기반의 자료구조

종류

  • 최대 힙(Max Heap): 부모 노드가 자식 노드보다 항상 큼
  • 최소 힙(Min Heap): 부모 노드가 자식 노드보다 항상 작음

최대 힙 연산

  • 삽입: 마지막에 삽입 후, 부모 노드와 비교하며 위로 올라감
  • 삭제: 루트(최댓값)를 삭제 → 마지막 노드와 교체 후, 아래로 내려가며 정렬

4. 우선순위 큐 (Priority Queue)

  • 우선순위가 높은 요소가 먼저 나가는 큐
  • 보통 힙 자료구조로 구현됨
  • 오름차순/내림차순 정렬에 사용

5. 맵 (Map)

  • 키-값 쌍으로 데이터를 저장
  • 중복 키는 허용하지 않음
  • 내부적으로 레드 블랙 트리 기반으로 정렬됨
for (auto it = myMap.begin(); it != myMap.end(); ++it) {
    cout << it->first << ": " << it->second;
}

6. 셋 (Set)

  • 중복을 허용하지 않는 유일한 값들의 집합
  • 정렬된 상태로 유지 (레드 블랙 트리 기반)

7. 해시 테이블 (Hash Table)

  • 키를 해시 함수로 변환하여 고정 크기의 배열에 저장
  • 탐색, 삽입, 삭제 모두 평균적으로 O(1)
  • 해시 충돌을 해결하기 위한 체이닝(Linked List) 또는 오픈 어드레싱 사용

마무리

비선형 자료구조는 데이터 간 관계 표현, 탐색 성능 최적화, 계층 구조 표현 등에 강력한 도구로 사용됩니다. 문제 유형에 따라 적절한 자료구조를 선택하는 것이 핵심입니다.