260 likes | 419 Views
11.1 General Sort Concepts 11.2 Insertion Sorts 11.3 Selection Sorts 11.4 Exchange Sorts. Advanced Sorting Concepts. 1. General Sort Concepts -1. Topic ← modify master. Sort 데이터 처리에서 빈번하게 자주 일어나는 작업으로 , 어떤 특정한 키 값에 따라 순서적으로 배열하는 작업 소트 알고리즘의 분류 처리하고자 할 대상 ( 데이터 ) 의 양에 따라
E N D
11.1 General Sort Concepts 11.2 Insertion Sorts 11.3 Selection Sorts 11.4 Exchange Sorts Advanced Sorting Concepts
1. General Sort Concepts -1 Topic ← modify master • Sort • 데이터 처리에서 빈번하게 자주 일어나는 작업으로, 어떤 특정한 키 값에 따라 순서적으로 배열하는 작업 • 소트 알고리즘의 분류 • 처리하고자 할 대상(데이터)의 양에 따라 • Internal Sort( 내부 소트 ) • 소트할 대상(데이터)를 전부 주 기억장치 안에서 처리하는 방법 • Insertion Sort / Bubble Sort / Selection Sort / Shell Sort / Heap Sort / Quick Sort 등 대표적인 소트 알고리즘 • External Sort( 외부 소트) • 소트할 대상이 너무 많기 때문에 소량의 소트할 데이터만을 주 기억 장치에 저장하고, 대부분의 데이터는 외부 기억장치에 저장하여 소트를 처리하는 방법
1. General Sort Concepts -2 • 소트 방법의 분류
1. General Sort Concepts -3 • Sort Order • 오름 차순( ascending order ) • 내림 차순( descending order ) • Sort Stability • 동일한 키 값을 가지는 데이터에 대하여 소트 결과를 출력할 때, 입력순서를 적용시키는 가를 가리키는 소트 알고리즘의 속성(Attribute) • 예를 들어 • Stable Sort Algorithm • Insertion Sort / Selection Sort / Bubble Sort • 그 외 나머지는 Unstable
1. General Sort Concepts -4 • Sort Efficiency • 소트 알고리즘의 상대적인 효율성을 말하는 척도 • 입력 데이터를 정렬하는데, 몇 번의 비교 연산과 몇 번의 데이터 이동을 요하는지를 대략적으로 말하는 것 • 가장 소트 효율성이 좋은 알고리즘(Quick Sort)의 경우 nlog2n의 차수를 가짐 • Passes • 소트 작업을 수행하는 동안에, 데이터들은 여러 번에 걸쳐서 데이터 값을 비교한다. 한 차례 데이터들이 차례로 비교되는 과정을 Sort Pass라 함 • Sort Pass되는 동안에, 모든 데이터가 비교되어질 수 있고, 일부분만 비교되어질 수 도 있음( 소트 알고리즘의 특성에 따라 )
2. Insertion Sorts -1 • Straight Insertion Sort( 연속 삽입 소트 ) • 예를 들어 카드 놀이를 할 때 자주 쓰게 되는 방법으로, 카드 뭉치에서 카드 한 장을 뽑아 손에 들고 있는 카드들 사이에 적절한 위치에 끼워 놓은 방법 • 즉, 각 Pass마다 소트되지 않은 리스트에서 한 개의 데이터를 빼내어 소트된 리스트의 적절한 위치에 삽입하는 것 • 알고리즘 11-1
2. Insertion Sorts -2 • Shell Sort -1 • 데이터를 소트하는데, 파티션(Partition)의 수를 감소시키는 방법을 사용하여 연속 삽입 소트 알고리즘을 개선한 것 • 예를 들어, 주어진 N개의 요소를 가진 리스트를 소트하기 위해 • 리스트를 K개의 세그먼트로 나눈다. • 보통 K는 Increment 라고도 부르기도 함 • 각각의 세그먼트는 N/K 개, 또는 그 이하의 요소로 구성됨 • 각 세그먼트 단위로 소트 • Increment을 2등분한 다음 다시 소트 결국 하나의 세그먼트가 될 때까지 소트
2. Insertion Sorts -3 • Shell Sort -2 • Shell Sort 과정( 초기 K(Increment) = 5 ) - 알고리즘 11-2, 511 Page-
2. Insertion Sorts -4 • Shell Sort -3 • Selecting the Increment Size • Increment의 크기를 정하는데 있어서, 모든 경우에 최고의 소트 성능을 보장 받을 수 있는 방법은 없음 • 쉘 소트에서 고려해야 할 중요한 사항 • 최소 횟수의 Pass( Increment의 수)로 소트를 끝내는 것 • 세그먼트에 있는 요소들의 수를 최소화하는 일 • 한 리스트에 있는 요소들의 수를 줄일 수 있는 한 가지 방법 • Prime Number을 사용하는 것 동적으로 계산 상대적으로 느린 작업 • 일반적으로 • Increment을 리스트 크기의 반으로 시작하여 • 각 Pass마다 2로 나누어서 사용 • Shell Sort의 성능은 Quick Sort의 성능을 따라 가지 못한다. 따라서 따른 소트를 원한다면, Shell Sort에서 Increment을 최적화하기 보다는 Quick Sort을 선택하는 것이 바람직
2. Insertion Sorts -5 • Algorithm Efficiency • Sort Effort • 소트의 상대적인 효율을 말하는데, 몇 가지 방법으로 결정할 수 있음. 예를 들어, • 소트 작업중인 반복 횟수를 계산 • 데이터의 이동과 비교 횟수를 계산 • 소트 작업이 걸리는 수행 시간 • 소트 알고리즘들의 효율성을 비교하는 데에는 반복횟수, 데이터의 이동 횟수, 비교 횟수를 계산하는 것이 바람직 • 이 책에선, 반복횟수만을 계산하여 소트 알고리즘의 효율성을 평가 • Straight Insertion Sort • f(n) = n( n + 1) / 2 O(n2) • Shell Sort • O(nlog2n) 평균적 O(n1.25) • 성능 비교 : Table 11-1, 514 Page
3. Selection Sorts -1 • Selection Sort • 주어진 데이터 리스트를 소트하기 위해, 리스트에 가장 작은 데이터를 선택하여 소트된 리스트에 놓고, 그 다음 리스트에 가장 작은 데이터를 선택하여 소트된 리스트에 놓고, 이러한 과정을 계속해서 수행함으로써 소트를 수행하는 방법 • 알고리즘의 종류 • Straight Selection Sort • Heap Sort
3. Selection Sorts -2 • Straight Selection Sort • 개념 • 알고리즘 11-3
3. Selection Sorts -3 • Heap Sort -1 • Straight Selection Sort 알고리즘을 개선 • 소트되지 않은 모든 데이터를 스캔하여 가장 작은 값을 선택 • n개의 데이터 중에서 가장 작은 키를 찾는데 n-1회의 키 비교 소트 속도가 매우 느림 • 힙 소트의 경우 • 힙은 트리구조이기 때문에, 가장 큰 키를 찾는데, 모든 데이터를 스캔할 필요가 없음. 다만, 트리의 가지를 따라서 가장 키가 큰 데이터를 루트노드로 옮기게 한다. 즉 힙을 재구성하게 된다. • 힙의 재구성은 알고리즘이 Straight Selection Sort 알고리즘보다 속도가 빠름
3. Selection Sorts -4 • Heap Sort -2 • Heap Sort 과정 • 알고리즘 11-4
3. Selection Sorts -5 • Algorithm Efficiency • Straight Selection Sort : O(n2) • Heap Sort : O(nlog2n) • 성능 비교 : Table 11-2
4. Exchange Sorts -1 • Exchange Sorts • 순서에 맞지 않는 데이터들을 모든 리스트의 데이터가 소트될 때가지 교환하는 방식 • Bubble Sort • Quick Sort : 가장 효율적인 범용 소트 알고리즘
4. Exchange Sorts -2 • Bubble Sort • 개념 • 알고리즘 11-5
4. Exchange Sorts -3 • Quick Sort -1 • 소트가 이루어지는 동안 리스트의 Pivot이라고 불리는 하나의 데이터를 선택한 다음, 세 그룹으로 나눈다. • 왼쪽 파티션은 Pivot 키 값보다 작은 데이터들의 집합 • Pivot 자신 • 오른쪽 파티션은 Pivot 키 값보다 큰 데이터들의 집합 • 왼쪽, 오른쪽 파티션에 대해서도 ①번 작업을 계속 수행한다. • 이런 개념으로, 소트를 처리하는 방법
4. Exchange Sorts -4 • Quick Sort -2 • 중간 값( Pivot Value ) 결정 • 중간 값의 위치를 결정하기 위해 세 번의 테스트가 필요 • 첫 번째 데이터(인덱스가 0인 데이터)을 Left라 하고, • 마지막 데이터(인덱스가 last인 데이터)을 Right라 하고, • 중간 데이터(인덱스가 (0+last)/2인 데이터)을 Middle라 하면 이 세 개의 데이터가 Left ≤ Middle ≤ Right 만족하는 순서를 가지도록 교환한다.(알고리즘 11-7) • 그런 다음, 중간 값은 배열에서 가장 왼쪽에 위치하도록 한다. • 알고리즘 11-6( Straight Insertion Sort Module을 약간 변경)
4. Exchange Sorts -5 • Quick Sort -3 • 중간 값 결정 및 Quick Sort 일부 과정
4. Exchange Sorts -6 • Quick Sort -4 • Quick Sort 진행 과정
4. Exchange Sorts -7 • Quick Sort -5 • 알고리즘 성능 • Bubble Sort • f(n)= n(n+1)/2 O(n2) • Quick Sort • O(nlog2n) • 요약 • Quick sort와 Heap sort의 알고리즘 효율성은 같다( O-Notation상 ) • O-Notation는 실제 소트효율에 대한 근사치 • 실제 소트효율의 정확한 식을 만든다면, Quick sort가 더 효율적 • Internal Sort의 알고리즘 효율성 • Table 11-3, 538 Page
5. External Sort -1 • External Sort • 소트할 대상이 너무 많기 때문에 소량의 소트할 데이터만을 주 기억 장치에 저장하고, 대부분의 데이터는 외부 기억장치에 저장하여 소트를 처리하는 방법 • Merge Sort 3 34 48 93 99 7 9 10 27 86 12 35 54 67 88 12 35 54 67 88
5. External Sort -2 • 간단한 병합 소트( Merge Sort )
123 112 104 105 98 98 86 5. External Sort -3 File Heap 99 73 65 23 18 . . . . . 88 85 76 65 54 . . . . . 78 54 45 34 28 . . . . . 78 54 45 34 28 . . . . . File