자료 구조와 알고리즘

데이터베이스나 파일 시스템의 인덱스에 이진 탐색 트리가 아니라 B 트리(B+ 트리 포함)가 자주 쓰이는 주된 이유는?

  1. A한 노드에 많은 키를 갖게 하여 트리를 낮게 만들고, 노드를 한 번 읽을 때마다 범위를 크게 좁힐 수 있으므로, 디스크 등의 블록 읽기 횟수를 줄일 수 있기 때문
  2. B노드마다 키를 하나만 가지므로, 비교 횟수가 이진 탐색 트리보다 적어지기 때문
  3. C삽입해도 모양을 정돈할 필요가 없으므로, 구현이 이진 탐색 트리보다 간단하기 때문
정답과 해설 보기

정답: A. 한 노드에 많은 키를 갖게 하여 트리를 낮게 만들고, 노드를 한 번 읽을 때마다 범위를 크게 좁힐 수 있으므로, 디스크 등의 블록 읽기 횟수를 줄일 수 있기 때문

디스크나 SSD는 1바이트라도 수 KB의 블록 단위로 읽으므로, 읽기 횟수를 줄이는 것이 중요합니다. B 트리는 한 노드(1블록)에 수백 개의 키를 갖게 하여 노드를 한 번 읽을 때마다 수백 갈래로 분기할 수 있으므로, 예를 들어 1억 건이라도 높이 3~4단으로 목표 데이터에 도달합니다. 삽입이나 삭제로 노드가 넘치면 분할하고, 적어지면 병합하여 모든 리프의 깊이를 같게 유지합니다. 이진 탐색 트리에서는 1억 건이면 적어도 27단 정도가 되며, 단마다 다른 블록을 읽으면 느려집니다.

이 분야 연습하기 분야로 돌아가기

자료 구조와 알고리즘의 다른 문제

  1. 정점이 100만 개, 간선이 300만 개 정도인 도로망처럼 정점 수에 비해 간선이 적은(희소한) 그래프를 메모리에 저장하는 방법으로 적절한 것은?
  2. 간선에 가중치가 없는 그래프에서, 출발점에서 각 정점까지의 최소 간선 수를 구하고 싶다. 적합한 탐색 방법과 그때 사용하는 자료 구조의 조합은?
  3. 간선에 방향이 없는 그래프에서 각 정점의 이웃 정점이 다음과 같다. A: B, C / B: A, D, E / C: A, F / D: B / E: B, F / F: C, E. 정점 A부터 재귀적인 깊이 우선 탐색을 수행한다. 이웃 정점은 여기에 쓴 순서로 조사하고, 아직 방문하지 않은 정점이 발견되면 바로 그 정점으로 나아간다. 정점을 방문하는 순서는?
  4. 간선에 방향이 없는 그래프에서 간선의 가중치(거리)가 S−A: 4, S−B: 1, A−B: 2, A−C: 1, B−C: 5, C−T: 3, A−T: 6이다. 다익스트라 알고리즘으로 S에서 T까지의 최단 경로를 구했을 때, 그 경로와 길이는?
  5. 다익스트라 알고리즘으로 올바른 최단 경로를 구하기 위한, 그래프에 관한 조건으로 올바른 것은?