출처: https://www.whatwant.com

 

"Radix"가 뭘까?

'기수(基數)'는 0~9까지 기본이 되는 수를 의미하는데, 여기에서는 '진법(進法)'의 의미가 더 큰 것 같다.

 

https://en.dict.naver.com/#/entry/enko/17ef262637ad4f04a48f2e6a0186dbbd

 

"Radix Sort"의 다른 호칭은 다음과 같다.

- 기수 정렬

- Bucket Sort

- Digital Sort

 

Radix Sort 알고리즘도 역사가 오래된 아이인데, 1923년에 이미 천공카드 분류 방법으로 널리 사용되었단다.

(어!? 천공카드가 뭔지 아는 것 만으로도 년식 인증인가!?)

 

 

① MSD (Most Significant Digit,  최상위 유효숫자)

  - 앞(큰) 자리 부터 정렬을 해 나가는 방식이다.

 

출처: https://www.whatwant.com

 

  - 중간에 가로로 있는 구분선 위치 정보는 중요하다.

  - 단계 별로 구분선 안에서만 정렬이 이루어져야 하기 때문이다.

 

② LSD (Least Significant Digit, 최하위 유효숫자)

  - MSD 방식과 정반대로 뒤(작은) 자리 부터 정렬을 해보자.

 

출처: https://www.whatwant.com

 

  - Stable 이라는 속성을 정말 잘 이용한 방법으로 보인다.

  - MSD와 다르게 가로줄(각 단계에서의 구분 위치) 정보를 관리할 필요가 없다.

  - 아랫 자리들이 이미 sorting이 되어있기 때문에 윗 자리 sorting을 하면 전체가 sorting 된다.

 

③ Pseudo Code

  - 너무 추상적일 수 있지만, 일단 다음과 같이 Pseudo Code를 정리할 수 있다.

 

출처: https://www.whatwant.com

 

  - 여기에서 중요한 것은 "stable sort" 방식이어야 한다는 점이다.

 

④ Running Time

  - 우리는 바로 전에 훌륭한 stable sort 알고리즘 중 하나를 공부했었다 → Counting Sort !!!

  - Counting Sort 알고리즘을 이용해서 Radix Sort를 해본다고 가정하면, 다음과 같다.

 

출처: https://www.whatwant.com

 

  - 위 내용을 정리하자면, 다음과 같다.

 

출처: https://www.whatwant.com

 

⑤ Changing d and k

  - 우리가 지금까지 다루는 방식은 다음과 같다.

출처: https://www.whatwant.com

 

  - 하지만, 이것을 좀 다르게 처리할 수도 있다.

 

출처: https://www.whatwant.com

 

  - 응?! 10진법이 아니라 100진법(진수)으로 처리할 수도 있다는 것이다.

 

⑥ optimal r

  - 일단 아래 그림을 잘 살펴보고 각 변수값의 정의를 확인하자.

  - n개의 b-bit 숫자가 있다고 했을 때, r 묶음으로 처리를 하는 경우이다.

 

출처: https://www.whatwant.com

 

  - 이럴 때, 우리는 다음의 최적해 r 값을 찾아야 하는 것이다.

 

출처: https://www.whatwant.com

 

  - 2 가지 경우로 나누어서 생각해보자.

 

출처: https://www.whatwant.com

 

  - 위의 경우는 입력값 개수에 비해서 b값이 많이 작을 경우이다.

    . 이 때는 굳이 나누지 말고 통으로 (하나로) 묶어서 정렬을 해도 충분하다는 의미이다.

 

  - 다른 경우는 다음과 같다.

 

출처: https://www.whatwant.com

 

  - 입력값 개수보다 값 자체가 길면, 좀 나누어서(log n 정도) 정렬을 하는 것이 좋다는 의미이다.

 

⑦ extra memory

  - 앞에서 살펴봤겠지만, 일단 Radix Sort는 in place 알고리즘은 아니다.

 

⑧ memory copy

  - d 값만큼 정렬 step이 발생하는데, 이 때마다 값들을 복사해야하는데 이로 인한 cost가 크다.

 

 

 

뭔가 좀 어수선하게 설명이 되었는데,

전체적인 흐름은 파악이 되었을거라 기대해본다.

반응형

+ Recent posts