DA :: 번지계산에 의한 정렬

Address Calculatioin Sort

  • 키에 주소생성하는 함수를 적용하여 생성된 주소에 키 값을 저장한 다음, 주어진 주소범위를 순서대로 읽어서 정렬된 상태를 얻는 방식을 말한다.
  • 주소생성함수는 키 값에 비례하여 생성되도록 정해야 한다. 즉, 두 키 x와 y에 대해 x<=y이면, f(x)<=f(y)가 성립해야 한다.
  • 주소생성함수는 키 값을 어떤 수로 나누어 정수값을 취하는 것이 보편적인 방식이다.
  • 이때 나누어야 할 수 K는 최대 키 값과 최소 키 값의 차에 파일의 크기, 메모리 사용비율에 따라 결정해야 한다. 만일 하나 이상의 키 값이 동일한 주소로 변환되는 경우에는 키 값이 큰 것이 다음 주소로 이동되어야 한다.

n=9, 최대/최소값 차이 = (74-11), 가용 메모리를 파일 크기의 2배로 사용한다면

K = (최대키 - 최소키) / (2*n)  =  (74-11) / (2*9) ≒ 4

  • 만일 두 개의 키가 동일한 주소로 변환되는 경우를 가정해 보기로 하자. 아래의 그림에서 주어진 9개의 키 가운데 2개가 동일한 주소인 6번지로 변환된다. 6번지로 변환된 키 값 중에 보다 큰 키값이 27이 다음 주소지인 7번지로 이동하게 되고 7번지에 이미 다른 키가 자리잡고 있다면 또 다시 비교를 하여 보다 큰 키값이 다음 주소로 연속적으로 이동해 가게 된다.

n=9, 최대/최소 값 차이 = (74-11), 가용메모리를 파일크기의 1.2배로 사용한다면

K = (최대키 - 최소키) / (1.2*n) = (74-11) / (1.2*9) ≒ 6

  • 위의 예제에서 가용 메모리를 1.2배로 했을 경우에도 동일한 번지로의 충돌이 생성되지는 않았다. 그러나 이것은 주어진 키 값의 패턴에 따라서 달라질 수 있다.

번지계산에 의한 정렬의 수행시간

메모리가 여유있는 경우, 중복이 일어나지 않으며 정렬시간은 주어진 데이터의 수에 비례하므로 O(n)이 된다. 그러나 메모리가 작거나, 키 값의 분포가 일정치 않은 파일의 경우 정렬시간은 O(n2)로 커지므로 안정적인 정렬방식으로 보기 어렵다.

ARCHIVE TYPE
메일 | 폴더 | 이미지 | 북마크 | 마스터
『 아카이브  __________________________
App 〃 C | C++ | VB | DS/AL | API
Web〃 HTML | CSS | JS | XML
Etc 〃 Linux | OpenGL | Etc