Chapter 5 : 화일의 정렬/합병

Download Report

Transcript Chapter 5 : 화일의 정렬/합병

5. 파일의 정렬/합병
Sort/Merge 개념, 방법, 유틸리티,
저장 장치와의 관계
5.1 정렬/합병의 개요
 정렬(sorting)
 내부 정렬(internal sorting)
- 소량 데이터에 대한 메인 메모리 내에서의 정렬
- 레코드 판독, 기록에 걸리는 시간과는 무관
 외부 정렬(external sorting)
- 메인 메모리 용량을 초과하는 보조 저장장치에 저장된 대량 데이터
파일을 정렬
- 레코드 판독, 기록에 걸리는 시간이 중요
- 정렬/합병(sort/merge) – 파일 정렬 기법
• 런(run) : 하나의 파일을 여러 개로 분할하여 내부 정렬
기법으로 정렬시킨 서브파일(subfile)
• 런들을 합병(merge)하여 전체를 하나의 정렬된 파일로 구성
컴퓨터·IT공학부
2
sort/merge algorithm
NO
NO
컴퓨터·IT공학부
3
▶ 파일 정렬/합병 단계
1. 정렬 단계(sort phase)
 정렬할 파일의 레코드들을 지정된 길이의 서브 파일로
분할/정렬하여 런(run)을 만들고, 입력 파일로 분배하는 단계
2. 합병 단계(merge phase)
 정렬된 런들을 합병해서 보다 큰 런으로 만들고, 다시 입력
파일로 재분배하여 합하는 방식을 통하여,
 최종 모든 레코드들이 하나의 런에 포함되는 단계
컴퓨터·IT공학부
4
▶ 정렬 단계
 런 생성 방법
 내부 정렬 (internal sort)
 대체 선택 (replacement selection)
 자연 선택 (natural selection)
 입력 파일(레코드 키 값)의 예
109
98
29
83
49
78
16
44
컴퓨터·IT공학부
34
76
80
52
68
40
73
59
45
35
18
10
2
86
12
38
60
10
89
76
38
27
50
16
28
61
46
24
47 16 19 34 55
92 99 72 11 2
36 67 93 22 14
85
5
(1) 내부 정렬 (internal sort)
 런 생성 방법
1. 파일을 n레코드씩 분할
2. 분할된 레코드들을 내부 정렬 기법으로 정렬
 런 생성 결과
 마지막 런을 제외하고
모두 길이가 동일(n=5 경우)
컴퓨터·IT공학부
런 1:
런 2:
런 3:
런 4:
런 5:
런 6:
런 7:
런 8:
런 9:
런 10 :
런 11 :
34
2
16
35
10
2
12
36
14
10
24
45
28
19
40
27
11
18
46
22
16
85
49
38
34
76
61
16
73
50
44
38
68
47
55
78
92
29
80
67
52
59
109
60
98
86
99
72
89
93
83
76
6
(2) 대체 선택 (replacement selection)
 런 생성 방법
1. 버퍼 크기에 따른 m개의 레코드를 판독하고 첫 번째 런 생성 시작
2. 버퍼로부터 키 값이 가장 작은 레코드를 선정해서 런에 출력
3. 입력 파일에서 다음 레코드를 판독해 출력된 레코드와 버퍼에 대체
- if (입력 레코드의 키 값 < 출력된 레코드의 키 값)
then 레코드에 “동결(frozen)”로 표시
- 동결된 레코드를 제외하고 나머지 동결되지 않은 레코드에 대해
단계2부터 재실행
4. 동결 표시를 해제하고 단계 2에서 새로운 런을 생성 작업을 진행
 특징

입력 파일의 일부 정렬된 레코드들의 순서를 이용

내부 정렬을 이용한 경우보다 런이 큼(런의 평균 예상 길이: 2m)
컴퓨터·IT공학부
7
Replacement Selection 과정
109 49 34 68 45
참고 : { } 는 출력, [ ]는 동결
109 49 {34} 68 45
34
109 49 2 68 45
34
109 49 [2] 68 45
34
109 49 [2] 68 {45}
34 45
109 49 [2] 68 60
34 45
109 {49} [2] 68 60
34 45 49
109 38 [2] 68 60
34 45 49
109 [38] [2] 68 60
109 [38] [2] 68 {60}
버퍼
런1
34 45 49
34 45 49 60
109 [38] [2] 68 28
34 45 49 60
109 [38] [2] 68 [28]
34 45 49 60
109 [38] [2] {68} [28]
34 45 49 60 68
109 [38] [2] 47 [28]
34 45 49 60 68
109 [38] [2] [47] [28]
34 45 49 60 68
{109} [38] [2] [47] [28]
34 45 49 60 68 109
16 [38] [2] [47] [28]
34 45 49 60 68 109
[16] [38] [2] [47] [28]
34 45 49 60 68 109
런2
16 38 2 47 28
16 38 {2} 47 28
2
16 38 19 47 28
2
{16} 38 19 47 28
2 16
34 38 19 47 28
2 16
34 38 {19} 47 28
2 16 19
34 38 35 47 28
2 16 19
………생략………
[10] [27] [35] [40] [61]
컴퓨터·IT공학부
………생략………
2 16 19 28 34 38 47 55 76 78 86 98
8
(2) 대체 선택 (replacement selection)
 런 생성 결과(m=5)
런
런
런
런
런
런
1
2
3
4
5
6
:
:
:
:
:
:
34
2
10
2
12
10
컴퓨터·IT공학부
45
16
27
11
14
16
49
19
35
16
22
24
60
28
40
18
36
38
68 109
34 38
61 72
29 50
44 46
47
92
73
52
55 76 78 86 98
99
80 89 93
59 67 76 83 85
9
(3) 자연 선택 (natural selection)
 특징
 동결된 레코드들을 버퍼에 유지하지 않고 보조 저장 장치 의
예비 저장소(reservoir)에 별도 저장
 동결된 레코드가 계속 버퍼를 차지하는 것 예방
 하나의 런 생성 작업은 저장소가 꽉 차거나 입력 파일의 끝에
도달할 때까지 계속
 런을 길게 만들어 런 수를 줄임으로써 합병 비용을 줄임
 런 생성 결과(버퍼 크기(m)=5, 저장소 크기(m’)=5)
런 1 : 34
런2: 2
런 3 : 10
런4: 2
런 5 : 10
컴퓨터·IT공학부
45
16
11
12
16
47
19
16
14
24
49
28
27
18
38
60
34
29
22
68 109
38 40 55 61 76 78 86 92 98 99
35 50 67 72 73 80 89 93
36 44 46 52 59 76 83 85
10
Natural Selection 과정
109 49 34 68 45
109 49 {34} 68 45
109 49 {34} 68 45
2
34
109 49 60 68 45
2
34
109 49 60 68 {45}
2
34 45
109 49 60 68 {45}
2 38
34 45
109 49 60 68 {45}
2 38 28
34 45
109 49 60 68 47
2 38 28
34 45
109 49 60 68 {47}
2 38 28
34 45 47
34 45 47
109 49 60 68 {47}
외부
2 38 28 16
109 49 60 68 {47}
예비
2 38 28 16 19
저장소
2 38 28 16 19
34 45 47 49
2 38 28 16 19
34 45 47 49 60
109 {49}{60}{68}{47}
2 38 28 16 19
34 45 47 49 60 68
{109}{49}{60}{68}{47}
2 38 28 16 19
34 45 47 49 60 68 109
2 38 28 16 19
34 45 47 49 60 68 109
2
38 28 16 19
34 45 47 49 60 68 109
2 16
38 2 19
34 45 47 49 60 68 109
2 16 19
38 28
34 45 47 49 60 68 109
2 16 19 28
38
34 45 47 49 60 68 109
109 {49} 60 68 {47}
109 {49}{60} 68 {47}
버퍼
34
비움
런1
34 45 47
2 16 19 28 38
34 45 47 49 60 68 109
{2} 16 19 28 38
2
34 16 19 28 38
2
34 {16} 19 28 38
2 16
34 55 19 28 38
2 16
런2
34 55 {19} 28 38
………생략………
2 16 19
………생략………
………생략………
2 16 19 28 34 38 40
{99}{92}{98}{78}{86}
컴퓨터·IT공학부
35 10 27 72 11
55 61 76 78 86 92 98
99
11
▶ 런 생성 방법의 비교
 내부 정렬
 마지막 런을 제외하고 런 길이가 동일
 런 길이 예측으로 합병 알고리즘 간단
 대체 선택
 내부 정렬보다 평균적으로 긴 런을 생성
 런이 길수록 합병 비용이 적음
 런이 일정치 않아 정렬/합병 알고리즘이 복잡
 자연 선택
 다른 방법보다 더 긴 런을 생성할 수 있음
 예비 저장소로의 입출력 부담 발생
 긴 런으로 정렬/합병 단계를 줄임
컴퓨터·IT공학부
12
▶ 정렬/합병 기법의 차이
 정렬/합병 기법의 차별화 요소




적용하는 내부 정렬 방식
내부정렬을 위해 할당된 메인 메모리의 크기
정렬된 런들의 보조 저장장치에서의 저장 분포
정렬/합병 단계에서 동시에 처리할 수 있는 런의 수
 요소에 따라 런의 수와 합병의 패스(pass) 수가 결정
- 패스(pass): 최종 파일 생성을 위한 정렬/합병의 반복적 실행 단계
 정렬/합병 기법의 성능 비교
 정렬 단계에서 만들어지는 런의 수와 합병의 패스 수 비교
 보조 저장장치에 대한 상대적 참조 빈도수(reference frequency)
- 전체 레코드 집합에 대해 수행되어야 할 정렬/합병의 패스 수 비교
 레코드들의 판독/기록 횟수
- 가능한 런이 길게 만들어지면 합병해야 될 런의 수는 최소화
- 동시에 합병할 수 있는 런의 수를 늘리면 합병의 패스 수는 감소
- 입력 런을 보조 저장장치에 분산 저장하면 합병에 필요한 입출력뿐만
아니라 부수적인 입출력 연산도 동반
컴퓨터·IT공학부
13
▶ 합병 단계
 합병 수행 방법
 m-원 합병(m-way merge)
 균형 합병(balanced merge)
 다단계 합병(polyphase merge)
 계단식 합병(cascade merge)
컴퓨터·IT공학부
14
5.2 m-원 합병(m-way merge)
 특징
 m개의 입력 파일을 동시에 처리하는 합병
 m개의 입력 파일로부터 하나의 출력 파일을 생성
- 총 m+1개의 파일을 사용
- 입력 파일 수를 합병의 원 수(degree)라 함
 한 패스에 합병이 끝나지 않으면, 런들을 입력파일로 다시
분배하기 위해 복사와 이동을 반복(많은 입출력 수반)
 이상적인 정렬/합병 : m개의 런에 m개의 입력 파일을 사용하여
한번의 m-원 합병으로 완료
 2-원 합병의 경우
 한번의 패스 : 합병된 런의 크기는 2배, 런의 수는 반
 N개의 런으로 분할된 파일 정렬 위한 패스 수 : log N 
컴퓨터·IT공학부
15
▶ 6개의 런에 대한 2-원 합병
(1) 정렬단계
1000 레코드 씩 정렬된
6개의 런
내부 정렬
1
6000 레코드
정렬된 6개의 런을 2개의 입력 파일로 분배
(2) 1차 합병
런5
4001-5000
런6
5001-6000
3
런3
2001-3000
런4
3001-4000
런1
1-1000
1
3
1차 합병
런2
2
1001-2000
런(1+2)
런(3+4)
런(5+6)
에 있는 3개의 런을 2개의 입력 파일로 분배
(3) 2차 합병
런 (5+6)
런(1+2) 1
2차 합병
런(3+4)
(4) 3차 합병
3
런(1+2+3+4)
런(5+6)
2
런(1+2+3+4)
1
3차 합병
런(5+6)
3
런(1+2+3+4+5+6)
2
(2개의 입력 파일과 1개의 출력 파일)
컴퓨터·IT공학부
16
▶ 12개의 런에 대한 2-원 합병
(1) 정렬단계
내부 정렬
1
500레코드 씩 정렬된 12개의 런
6000 레코드
정렬된 12개의 런을 2개의 입력 파일로 분배
(2) 1차 합병
런11
런9
......
런1
1
3
1차 합병
런12
3
런10
......
런2
2
런(1+2)
런(3+4)
.....
런(11+12)
에 있는 6개의 런을 2개의 입력 파일로 분배
(3) 2차 합병
런(9+10) 런(5+6) 런(1+2) 1
2차 합병
런(11+12) 런(7+8) 런(3+4)
3
2
3
런(1+2+3+4)
런(5+6+7+8)
런(9+10+11+12)
에 있는 3개의 런을 2개의 입력 파일로 분배
컴퓨터·IT공학부
17
▶ 12개의 런에 대한 2-원 합병
(4) 3차 합병
런(1+2+3+4)
런(9+10+11+12)
1
런(5+6+7+8)
2
런(1+2+3+4+5+6+7+8)
1
3차 합병
2
런(1+2+3+4+5+6+7+8)
런(9+10+11+12)
4차 합병
3
런(1+2+3+ ... + 11 +12)
(5) 4차 합병
런(9+10+11+12)
컴퓨터·IT공학부
2
18
▶ 6개의 런에 대한 3-원 합병
(1) 정렬단계
1000레코드 씩 정렬된
6개의 런
내부 정렬
1
6000 레코드
정렬된 6개의 런을 3개의 입력 파일로 분배
(2) 1차 합병
런4 런1
1
런5 런2
2
런6 런3
3
4
1차 합병
런(1+2+3)
런(4+5+6)
4 에 있는 런을 3개의 입력 파일로 분배( 이 경우에는 2개의 파일만 사용됨)
(3) 2차 합병
런(1+2+3)
1
2차 합병
런(4+5+6)
2
컴퓨터·IT공학부
3
런(1+2+..+6)
(3개의 입력 파일과 1개의 출력 파일)
19
▶ 선택 트리(selection tree) (1)
 m개의 런을 하나의 큰 런으로 정렬(비교)하는 작업
 m개 런에서 가장 작은 키 값의 레코드를 계속 선택, 출력
 패스 당 m-1번 비교 부담
 선택 트리 : 비교 횟수를 줄일 수 있음(m>2)
 선택 트리의 종류
 승자 트리(winner tree)
 패자 트리(loser tree)
컴퓨터·IT공학부
20
선택 트리 (2)
 승자 트리(winner tree)
 특징
- 완전 이진 트리
- 각 단말 노드는 각 런의 최소 키 값 원소를 나타냄
- 내부 노드는 자식 중에서 가장 작은 키 값을 가진 원소를 나타냄
[1] 7
 런이 8개(k=8)인 경우
승자 트리 예
[2]
[4]
[8]
컴퓨터·IT공학부
11
9 [3]
7
[5]
10
[6]
7
[7]
9
18
[9] [10] [11] [12] [13]
10 21
7
9
10
16
18
22
28
22
24
13
26
30
13
20
런1
런2
런3
런4
런5
12
18
23
런6
[14]
[15]
50
18
52
59
19
21
런7
런8
21
선택 트리 (3)
 승자 트리 구축 과정
- 가장 작은 키 값의 원소가 승자로 올라가는 토너먼트 경기로 표현
- 각 내부 노드 : 두 자식 노드 원소의 토너먼트 승자(작은 키)
- 루트 노드 : 전체 토너먼트 승자, 즉 트리에서 가장 작은 키 값 가진 원소
 승자 트리의 표현
- 완전 이진 트리의 특성상 순차 표현에서 유리
- 인덱스 값이 i인 노드의 두 자식 인덱스는 2i와 2i+1
 합병의 진행
- 루트가 결정되는 대로 순서순차에 출력(먼저 7 출력)
- 다음 원소 즉 키 값이 13인 원소가 승자 트리로 들어감
- 승자 트리를 다시 재구성
• 노드 11에서부터 루트까지의 경로를 따라가면서 형제 노드간
토너먼트 진행
컴퓨터·IT공학부
22
선택 트리 (4)
– 다시 만들어진 승자 트리의 예
[1]
[2]
[4]
[3]
10
[5]
10
9
[6]
13
[7]
9
[10] [11] [12] [13]
[8] [9]
11
10 21
13
9
10
16
18
22
28
22
24
26
30
13
20
9
12
18
18
[14] [15]
50
18
52
59
19
21
23
런1
컴퓨터·IT공학부
런2 런3
런4 런5
런6 런7
런8
23
선택 트리 (5)
 패자 트리(loser tree)
 루트 위에 0번 노드가 추가된 완전 이진 트리
(1)단말 노드 :각 런의 최소 키 값을 가진 원소
(2) 내부 노드 : 토너먼트의 승자대신 패자 원소
(승자는 위의 부모 노드에서 토너먼트 진행)
(3) 루트(1번 노드) : 결승 토너먼트의 패자
(4) 0번 노드 : 전체 승자(루트 위에 별도로 위치하여 출력)
컴퓨터·IT공학부
24
선택 트리 (6)
[0]
 런이 8개(k=8)인 패자 트리의 예
[1]
[2]
[4]
[8]
컴퓨터·IT공학부
[9]
(7의 출력 후 원래 7이 있던
런4의 13이 노드[11]에 삽입
되고, 패자 트리를 재구축)
9
[3]
10
[5]
11
출력
7
[7]
[6]
21
18
10
50
11
[10] [11] [12] [13]
10 21
7
9
10
[14]
[15]
50
18
16
18
22
28
22
24
13
26
30
13
20
12
18
23
23
52
59
19
21
런1
런2
런3
런4
런5
런6
런7
런8
25
선택 트리 (7)
 패자 트리 구축 과정
- 단말 노드: 각 런의 최소 키 값 원소
- 내부 노드
• 두 자식 노드들이 부모노드에서 토너먼트 경기를 수행
• 패자는 부모 노드에 남음
• 승자는 그 위 부모 노드로 올라가서 다시 토너먼트 경기를 계속
- 1번 루트 노드
• 마지막 패자는 1번 루트 노드에 남음
• 승자는 전체 토너먼트의 승자로서 0번 노드에서 순서로 출력됨
 합병의 진행
- 출력된 원소가 속한 런 4의 다음 원소, 즉 키 값이 13인 원소를 패자 트리
노드 11에 삽입
- 패자 트리를 다시 재구성
• 토너먼트는 노드 11에서부터 루트 노드 1까지의 경로를 따라 경기를
진행(다만 형제 노드 대신 부모 노드와 경기를 진행함 : 교재 참고)
컴퓨터·IT공학부
26
5.3 균형 합병 (balanced merge)
 M-원 합병의 단점 : 파일의 재분배에 많은 I/O 필요
* 한 패스의 출력 파일을 다음 패스의 입력에 사용하는 분배가 입출력의 ½ 소요
 균형합병
 출력할 때 미리 다음 단계에 사용할 입력 파일로 재분배
(출력 파일을 다음 단계의 입력 파일로 직접 사용)
- m-원 자연합병 : m + 1 개의 파일 필요
- m-원 균형합병 : 2m 개의 파일 필요 (m 입력파일, m 출력파일)
 각 합병 단계 후
 런의 총수는 합병 차수로 나눈 만큼 감소
 런의 길이는 합병 차수의 두 배씩 증가
 총 합병 패스 O(logm N) , N : 초기 런의 수
컴퓨터·IT공학부
27
▶ 12개의 런에 대한 2-원 균형 합병
(1) 정렬단계
내부 정렬
1
6000 레코드
500레코드 씩 정렬된
12개의 런
생성된 12개의 런을 2개의 파일에 분배(4개의 Tape drive 이용)
(2) 1차 합병
런11 런9 ... 런1
1
3
런(1+2)
런(5+6)
런(9+10)
1차 합병
런12 런10 ... 런2
4
2
런(3+4)
런(7+8)
런(11+12)
(3) 2차 합병
런(1+2)
런(5+6)
런(9+10)
3
1
런(1+2+3+4)
런(9+10+11+12)
2
런(5+6+7+8)
2차 합병
런(3+4)
런(7+8)
런(11+12)
컴퓨터·IT공학부
4
28
▶ 12개의 런에 대한 2-원 균형 합병
(4) 3차 합병
런(1+2+3+4)
런(9+10+11+12)
1
3
런(1+2+3+4+5+6+7+8)
3차 합병
런(5+6+7+8)
4
2
런(9+10+11+12)
(5) 4차 합병
런(1+2+3+4+5+6+7+8)
3
4차 합병
런(9+10+11+12)
주의
1
런(1+2+3+ ... +12)
4
런(1)은 4번 판독/기록되었음.
컴퓨터·IT공학부
29
 5.4 다단계 합병 (Polyphase Merge)
 m-원 균형 합병 분석
 2m개의 파일이 필요(m개 입력파일, m개 출력파일)
 단점 :하나의 합병된 런이 생성되는 동안 m-1 개의 파일은
항상 유휴 상태, 1개 입력 런은 출력 파일로 단순 복사
 m-원 다단계 합병(m-way polyphase merge)
 파일 유휴 문제와 런의 단순 복사 문제를 개선
 m 개의 입력 파일과 1 개의 출력 파일을 사용
 입/출력 파일 수가 같지 않음 : 불균형 합병
 초기 입력 파일에 대한 런의 불균등 분배가 복잡
 각 합병 단계(pass)
 입력 파일의 어느 하나가 공백이 될 때까지 런을 합병
 공백이 된 입력 파일은 다음 합병 단계의 출력 파일
컴퓨터·IT공학부
30
▶ 2-원 다단계 합병의 예
50 110 95 15 100 30 150 40 120 60 70 130 20 140 80
파일1 :
50 95 110
40 120 150
파일2 :
15 30 100
60 70 130
파일3 :
공백
20 80 140
파일1 : 20 80 140
파일2 : 공백
파일3 : 15 30 50 95 100 110
(a) 정렬 단계 결과
40 60 70 120 130 150
(b) 1차 합병 결과
파일1 :
공백
파일1 : 15 20 30 40 50 60 70 80 95 100 110 120 130 140 150
파일2 :
15 20 30 50 80 95 100 110 140
파일2 : 공백
파일3 :
40 60 70 120 130 150
파일3 : 공백
(c) 2차 합병 결과
컴퓨터·IT공학부
(d) 3차 합병 결과
31
★ 2-원 다단계 합병에서 런 수의 변화
 각 합병 단계 마다 하나의 입력 파일만 공백이 됨
정렬
단계
1차
합병
2차
합병
3차
합병
파일 1
3
1
0
1
파일 2
2
0
1
0
파일 3
0
2
1
0
런합계
5
3
2
1
컴퓨터·IT공학부
32
▶ 초기 생성할 런 수의 결정 방법
 3-원 다단계 합병을 위한 런 수(m = 3)
[1, 1, 1], 3, 5, 9, 17, 31, …
 3차(m=3) 피보나치(Fibonacci) 수열
Ti = Ti-1 + Ti-2 + Ti-3,
i>3
Ti = 1, i ≤ 3
 m차 피보나치 수열
Ti = 1 , i ≤ m
i 1
Ti 
T
k
,i  m
k im
컴퓨터·IT공학부
33
▶ 완전 피보나치 분배
 m-원 다단계 합병을 위한 초기의 런 수를 m차 피보나치
수열의 한 항이 되는 수가 되도록 생성
 이 런들을 피보나치 분배 방법에 따라 분배
 완전 피보나치 분배의 장점
 합병 단계에서 마지막 패스를 제외하고는 각 패스가 끝날 때
항상 하나의 입력 파일만 공백이 됨
 합병을 위한 각 패스에서 입력 파일 수는 항상 m이 됨
 마지막 패스에서는 입력 파일이 모두 동시에 공백이 되면서
모든 런들이 출력 파일에 하나의 런으로 만들어짐
 합병 단계에서 패스 수가 줄게 됨
컴퓨터·IT공학부
34
▶ 3-원 다단계 합병
정렬 단계
내부 정렬
6000 레코드
1차 합병
7개의 런
6개의 런
4개의 런
1
2
3
1차 합병
4
1
2
2차 합병
3
4
1
3차 합병
런1, 런6, 런7, 런10, 런11, 런12, 런13
런2, 런4, 런14, 런15, 런 16, 런17
런3, 런5, 런8, 런9
1
2
3
4
파일
3
은 공백이 됨
파일
2
는 공백이 됨
파일
1
은 공백이 됨
4개의 런
2차 합병
4개의 런
3개의 런
2개의 런
3
2개의 런
3차 합병
2개의 런
2개의 런
1개의 런
2
1개의 런
4차 합병
1개의 런
1개의 런
1개의 런
2
3
4
컴퓨터·IT공학부
4차 합병
1
파일
2
3
4
는 공백이 됨
1개의 런
35
★ 완전 피보나치 런 분배 방법 (m=3)
 원으로 표시된 수를 다음 단계의 다른 파일에 합산시킴
1차
2 차
3 차
4 차
파일 1
1
1
3
7
파일2
1
2
2
6
파일3
1
2
4
4
런수
3
5
9
17
컴퓨터·IT공학부
36
★ 각 합병 단계에서 파일 당 런 수의 변화
정렬
단계
1차
합병
2차
합병
3차
합병
4차
합병
파일 1
7
3
1
0
1
파일 2
6
2
0
1
0
파일 3
4
0
2
1
0
파일 4
0
4
2
1
0
런합 계
17
9
5
3
1
 초기 런에 대해 완전 피보나치 분배 방법의 역순
컴퓨터·IT공학부
37
▶ 3-원 다단계 합병의 예
50 110 95 15 100 30 150 40 120 60 70 130 20 140 80
파일1 :
50 95 110
파일2 :
15 30 100
60 70 130
파일2 :
60 70 130
파일3 :
40 120 150
20 80 140
파일3 :
20 80 140
파일4 :
15 30 40 50 95 100 110 120 150
파일1 :
파일4 : 공백
공백
(b) 1차 합병 결과
(a) 정렬 단계 결과
파일1 : 15 20 30 40 50 60 70 80 95 100 110 120 130 140 150
파일2 : 공백
파일3 : 공백
파일4 : 공백
(c) 2차 합병 결과
컴퓨터·IT공학부
38
 3-원 다단계 합병의 예(예5.7)
 2-원 균형 합병 적용 : 합병 패스 3, 파일 4개 사용
 3-원 균형 합병 적용 : 합병 패스 2, 파일 6개 사용
 완전 피보나치 분배를 사용하는 m-원 다단계 합병은
m-원 균형 합병과 패스 수는 같으나, 사용 파일 수는
2m에서 m+1로 줄어듬(3-원의 경우 패스 2, 파일 4)
컴퓨터·IT공학부
39
5.5 계단식 합병 (Cascade Merge)
 정렬/합병 과정에서 런들의 복사 작업을 줄이려는 불균형
합병의 또 다른 형태
 다단계 합병과 사용 파일수와 런 복사 작업도 같으나
수행방법만 다른 형태
 m-원 계단식 합병(m-way cascade merge)
 초기 런 생성과 런의 분배가 중요(완전 피보나치 분배)
 입력 파일 수가 m개에서 시작하여 m-1, m-2, …, 로 줄어
마지막 2개로 될 때 한 주기가 끝남
 합병 단계
- 입력 파일 하나가 공백이 되면 이 파일이 새로운 출력 파일로 되고
이전의 출력 파일은 대기
- 나머지 입력 파일들은 이 새로운 출력 파일로 합병된 런을 생성
- 2개의 입력 파일을 합병하는 단계가 되면 합병의 한 주기가 종료
- 한 주기에 각 레코드는 한번씩만 처리
컴퓨터·IT공학부
40
▶ 3-원 계단식 합병
50 110 95 15 100 30 150 40 120 60 70 130 20 140 80
파일1 : 공백
파일1 :
50 110 95
파일2 :
15 30 100
60 70 130
파일2 :
60 70 130
파일3 :
40 120 150
20 80 140
파일3 :
20 80 140
파일4 :
15 30 40 50 95 100 110 120 150
파일4 : 공백
(a) 정렬 단계 결과
파일1 :
20 60 70 80 130 140
(b) 합병 1주기 1차 합병 결과
파일1 : 공백
파일2 : 공백
파일2 : 15 20 30 40 50 60 70 80 95 100 110 120 130 140 150
파일3 : 공백
파일3 : 공백
파일4 : 15 30 40 50 95 100 110 120 150
파일4 : 공백
(c) 합병 1주기 2차 합병 결과
컴퓨터·IT공학부
(d) 합병 2주기 1차 합병 결과
41
▶ 3-원 계단식 합병
합병 1주기
7개의 런
6개의 런
4개의 런
3개의 런
2개의 런
합병 2주기
4개의 런
2개의 런
1개의 런
3개의 런
1개의 런
합병 3주기
2개의 런
1개의 런
1개의 런
합병 4주기
1개의 런
1개의 런
컴퓨터·IT공학부
1
2
3
1 주기
패스 1
1
2
1 주기
패스 2
4
3
1
2 주기
패스 1
4
3
2 주기
패스 2
4
2
1
3 주기
패스 1
3
4
4 주기
패스 1
4
4개의 런
3
2개의 런
2
1개의 런
1
1개의 런
3
1개의 런
1
1개의 런
파일
3
은 공백
파일
4
는 대기
파일
2
는 공백
파일
3
은 대기
파일
1
은 공백
파일
2
는 대기
파일
3
은 공백
파일
1
은 대기
파일
파일
파일
1
과
3
2
2
는 공백
은 대기
3
4
는 공백
42
5.6 정렬/합병 유틸리티
 정렬/합병 유틸리티(utility)를 이용
 범용의 파일 정렬/합병 작업을 지원
 유틸리티의 기능
(1) 하나 또는 그 이상의 파일 정렬
(2) 둘 또는 그 이상의 파일 합병
(3) 둘 또는 그 이상의 파일 정렬과 합병
 정렬/합병 패키지 사용시 명세 내용
(1) 정렬/합병할 파일의 이름
(2) 정렬/합병의 키 필드의 데이터 타입, 길이, 위치
(3) 키 필드들의 순서(major에서 minor 순으로)
(4) 각 키 필드에 적용할 정렬 순서 (ASC, 또는 DES)
(5) 각 키 필드에 적용될 순서 기준
(6) 정렬/합병 결과를 수록할 출력 파일의 이름
컴퓨터·IT공학부
43
▶ 패키지에서 사용자 명세 사항
(1) 사용자가 정의한 정렬 순서 및 기준
(2) 내부 정렬 단계에서 사용할 알고리즘
(예 : quicksort, heapsort)
(3) 합병 단계에서 사용할 알고리즘
(예 : 균형, 다단계, 계단식 합병)
(4) 파일 사용 전후에 필요한 동작(예 : rewind, unload)
(5) 합병 단계에서 입력 레코드가 올바른 순서로 되어 있는가의 검사
(6) 회복을 위한 체크 포인트(check point)/덤프 레코드(dump
record)를 사용하는 주기
(7) 예상 입력 레코드 수
컴퓨터·IT공학부
44
 5.7 저장장치와 정렬/합병
 합병 단계에서 사용되는 외부 저장장치의 물리적 특성도
정렬/합병 시간에 영향
 순차 접근만 허용되는 자기 테이프의 경우
 각 파일이 서로 다른 릴에 저장
 테이프 rewind 시간이 필요
 임의 접근이 가능한 디스크의 경우
 정렬/합병될 파일들이 하나의 디스크에 저장
- 디스크 입/출력 연산(탐구시간 + 회전지연시간)이 테이프(시작 시간 +
정지시간)보다 더 많은 오버헤드를 수반할 수 있으나, 테이프보다 훨씬
빠른 데이터 전송률로 보상
 탐구와 회전 지연에 따른 접근 오버헤드 감축 방법
- 파일들을 2개 이상 디스크로 분산시켜 입/출력 연산을 병렬처리
파일의 입/출력 요구를 병렬로 처리하기 위해서는 디스크마다 별도의
디스크 제어기가 있어야 됨.
컴퓨터·IT공학부
45