[CLRS] [8-3] Bucket Sort(버킷 정렬)

2024. 11. 1. 15:53· CS Study/CLRS (자료구조 | 알고리즘)
목차
  1. 1. Bucket Sort?
  2. 2. Bucket Sort의 알고리즘
  3. 3. Bucket Sort의 시간복잡도
  4. 4. Code 구현

1. Bucket Sort?

- Bucket Sort는 데이터를 일정한 범위로 나눈 여러 버킷에 분배하고,

- 각 버킷 내부에서 정려한 후 각 버킷을 합쳐서 전체 데이터를 정렬하는 알고리즘이다.

- 마치 다음 그림과 같다.

 

- 그림을 보면 알 수 있겠지만,

- 데이터가 특정 범위 안에서 균등하게 분포된 경우 매우 효율적으로 작동한다.

- 주로 0과 1사이의 실수나 버뮈가 제한된 정수를 정렬할 때 사용된다.

 

2. Bucket Sort의 알고리즘

i) 버킷 분할:

- 데이터를 특정 구간으로 나누어 각 구간을 '버킷'이라고 정의한다.

- 이때 버킷의 개수는 데이터의 분포에 따라 적절히 설정하는 것이 중요하다.

 

ex) 데이터가 0과 1사이의 실수라면 각 버킷은

[0,0.1) , [0.1,0.2), ... , [0.9,1)로 설정 가능

 

ii) 데이터 분배

- 주어진 데이터를 순회하면서 각 데이터가 속할 버킷을 결정한다.

ex)

- 데이터 값이 0.35라면 [0.3, 0.4) 버킷에 할당한다.

 

iii) 버킷 내부 정렬:

- 각 버킷 내에서 정렬 알고리즘을 사용하여 정렬을 수행한다.

- 이때 사용하는 정렬은 어떤걸 사용해도 무관하나, 해당 게시글에선 파이썬 내장 sort를 사용할 예정이다.

 

iv) 버킷 병합:

- 머든 버킷이 정렬되면, 버킷을 차례대로 연결하여 최종 정렬된 배열을 얻는다.

 

3. Bucket Sort의 시간복잡도

- Bucket Sort의 시간복잡도는 O(n+k)와 같다.

n : 데이터 개수

k : 버킷의 개수

 

4. Code 구현

def bucket_sort(arr):
    #1. 빈 버킷 생성
    num_buckets = 10
    buckets = [[] for _ in range(num_buckets)]

    #2. 각 요소를 적절한 버킷에 넣음
    for value in arr:
        index = int(value * num_buckets)
        buckets[index].append(value)

    #3 각 버킷 내부에 정렬
    for i in range(num_buckets):
        buckets[i].sort()

    #4 버킷 병합
    result_arr = []
    for bucket in buckets:
        result_arr.extend(bucket)

    return result_arr

'CS Study > CLRS (자료구조 | 알고리즘)' 카테고리의 다른 글

[CLRS] [10-1] Linked List(연결리스트)  (0) 2024.11.04
[CLRS] [9-1] Minimum and maximum(최솟값과 최댓값)  (1) 2024.11.04
[CLRS] [8-2] Radix sort(기수 정렬)  (0) 2024.11.01
[CLRS] [8-1] Counting Sort  (0) 2024.10.30
[CLRS] [7-3] A randomized quicksort  (1) 2024.10.30
  1. 1. Bucket Sort?
  2. 2. Bucket Sort의 알고리즘
  3. 3. Bucket Sort의 시간복잡도
  4. 4. Code 구현
'CS Study/CLRS (자료구조 | 알고리즘)' 카테고리의 다른 글
  • [CLRS] [10-1] Linked List(연결리스트)
  • [CLRS] [9-1] Minimum and maximum(최솟값과 최댓값)
  • [CLRS] [8-2] Radix sort(기수 정렬)
  • [CLRS] [8-1] Counting Sort
23학번이수현
23학번이수현
23학번이수현
밑바닥부터 시작하는 AI보안전문가
23학번이수현
전체
오늘
어제
  • 분류 전체보기 (242)
    • Statistic Study (47)
      • Mathematical Statistics(수리통.. (47)
    • Mathematics Study (15)
      • Linear Algebra (선형대수학) (15)
    • CS Study (73)
      • CLRS (자료구조 | 알고리즘) (49)
      • Database(DB) (11)
      • C++ (11)
      • 컴퓨터 구조 (2)
    • DS Study (56)
      • CS 229(Machine Learning) (19)
      • CS 224n(NLP) (5)
      • Web Scraping (7)
      • R4DS(R언어) (20)
      • 밑바닥부터 시작하는 딥러닝 1 (5)
    • Hacking Study (0)
      • Web Hacking (0)
    • 코딩테스트 (5)
      • 백준-Python (5)
    • Paper Review(논문 리뷰) (43)
      • Deep Learning (16)
      • TCGA 관련 논문 (4)
      • Computer Vision (18)
      • NLP (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • LSTM
  • R언어
  • db
  • Machine Learning
  • deep learning
  • graph
  • AI
  • cs 224n
  • Data Structure
  • web scraping
  • R4DS
  • 논문 리뷰
  • C++
  • Linear Algebra
  • 시간복잡도
  • NLP
  • 자료구조
  • 데이터분석
  • introduction to algoritmhs
  • 수리통계학
  • 선형대수학
  • cs229
  • 알고리즘
  • Introduction to Algorithms
  • 딥러닝
  • Algorithms
  • 백준
  • 파이썬
  • clrs
  • 정렬

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
23학번이수현
[CLRS] [8-3] Bucket Sort(버킷 정렬)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.