Skip to content

문제 11 · 버킷 정렬

문제 11 [3점]

버킷 정렬bucket sort은 원소들이 어떤 특성을 가지고 있어야 잘 동작하는지, 그 이유와 함께 서술하세요.

풀이 및 해설

버킷 정렬의 동작

버킷 정렬bucket sort은 값의 범위를 여러 개의 버킷bucket(구간)으로 나눈 뒤,

  1. 각 원소를 자기 값에 해당하는 버킷에 넣고,
  2. 각 버킷 안을 (삽입 정렬 등으로) 정렬한 다음,
  3. 버킷을 순서대로 이어 붙여 결과를 만듭니다.

잘 동작하기 위한 특성 — 균등 분포

버킷 정렬이 빠르려면 원소들이 값의 범위에 걸쳐 균등 분포uniform distribution되어 있어야 합니다. 그래야 각 버킷에 원소가 골고루 나뉘어 한 버킷에 몰리지 않습니다.

  • n개의 원소를 대략 n개의 버킷에 고르게 분산하면, 버킷 하나에 평균 상수 개가 들어가 각 버킷 정렬은 O(1) 수준이 됩니다.
  • 따라서 평균 시간 복잡도 O(n) (분산·수집 각 O(n))을 달성합니다.
Tavg=O(n+k)O(n)(균등 분포일 때)

분포가 편향되면

값이 특정 구간에 몰려 편향되면 원소들이 소수의 버킷에 집중됩니다. 극단적으로 모든 원소가 한 버킷에 들어가면 그 버킷 하나를 정렬하는 데 O(n²)이 되어, 버킷 정렬의 이점이 사라집니다.

Tworst=O(n2)(한 버킷에 집중될 때)

정리하면, 버킷 정렬은 입력이 일정 범위에 균등하게 분포할 때 각 버킷에 고르게 흩어져 평균 선형 시간에 동작합니다.

👉 실습(C++)에서 버킷 정렬 구현 보기

PDF