[자료구조] 정렬 2 (외부 정렬 - 합병 정렬)

2023. 6. 6. 15:05·전공/자료구조
목차
  1. 외부 정렬
  2. 합병 정렬
  3. 예시
  4. k-원 합병
728x90
반응형

외부 정렬

정렬하려는 리스트 전체가 컴퓨터의 메인 메모리에 모두 올라갈 수 없다면 내부 정렬 사용 불가

 

블록 - 한 번에 디스크로부터 읽거나 디스크에 쓸 수 있는 데이터 단위, 여러 개의 레코드들로 구성

 

판독/기록 시간에 영향을 미치는 요소

  • 탐구 시간: 판독/기록 헤드가 디스크 상의 원하는 실린더로 이동하는데 걸리는 시간, 헤드가 가로질러야 하는 실린더 수에 따라 결정됨
  • 회전지연 시간: 트랙의 해당 섹터가 판독/기록 헤드 밑으로 회전해 올 때까지 걸리는 시간
  • 전송 시간: 디스크로 오는 디스크로부터 데이터 블록을 전송하는 데 걸리는 시간

 

합병 정렬

  1. 입력 리스트의 여러 세그먼트들을 좋은 내부 정렬 방법으로 정렬
    런(run) - 정렬된 세그먼트들
    런이 생성되면 외부 저장 장치에 기록됨
  2. 1에서 만들어진 런들은 하나의 런이 될 때까지 합병 트리 형식을 따라 합병

 

예시

조건

- 입력 리스트는 디스크에 저장되어 있고 250 레코드의 블록 길이를 가지고 있음

- 작업 공간으로 사용할 또 다른 디스크를 갖고 있음

 

1. 런 내부 정렬

  • 내부적으로 한 번에 3개의 블록(750개의 레코드)을 정렬해서 6개의 런 R1-R6을 만들고, 이 런들은 작업 디스크에 수록

내부 정렬 후 얻어진 블록화 된 런 (한 런당 세 블록)

 

2. 런 합병

  • 내부 메모리에 250개의 레코드를 수용할 수 있는 3개의 블록을 마련
  • 2개의 블록은 입력 버퍼로 사용, 하나는 출력 버퍼로 사용
  • 입력 버퍼로 각 런으로부터 블록 하나씩 읽어 들임
  • 런의 블록들은 입력 버퍼에서 출력 버퍼로 합병
  • 출력 버퍼가 다 차면 디스크에 기록
  • 입력 버퍼가 공백이 되면 같은 런에서 다음 블록을 읽어 들여 다시 채움

 

6개 런의 합병

 

시간복잡도

표기법

더보기
  • ts - 최대 탐구 시간
  • tl - 최대 회전 지연 시간
  • trw - 250개의 레코드로 구성된 한 블록을 읽거나 쓰는데 걸리는 시간
  • tIO - 한 블록을 입력 또는 출력하는데 걸리는 시간 = ts+tl+trw
  • tS - 750개의 레코드를 내부적으로 정렬하는 시간
  • ntm - 입력 버퍼에서 출력 버퍼로 n개의 레코드를 합병하는데 걸리는 시간

 

  1. 18블록의 입력 판독: 18tIO
    내부 정렬: 6tIS
    18블록 기록: 18tIO
    → 36tIO+6tIS
  2. 1-6런을 쌍으로 합병
    → 36tIO+4500tm
  3. 두 개의 1500 레코드로 된 런을 합병(12블록)
    → 24tIO+3000tm
  4. 3000 레코드의 런과 1500 레코드의 런을 합병
    → 36tIO+4500tm

 

전체 시간 = 132tIO+12000t+m+6tIS

 

k-원 합병

m개의 런이 있을 때의 합병 트리

  • ⌈log2m⌉ + 1의 레벨을 가짐
  • 총 ⌈log2m⌉ 패스 필요 → 고차 합병을 사용해서 줄일 수 있음

 

16개의 런에 대한 4-원 합병

 

728x90
반응형

'전공 > 자료구조' 카테고리의 다른 글

[자료구조] 정렬 1 (내부 정렬 - 삽입 정렬, 퀵 정렬, 합병 정렬, 히프 정렬, 기수 정렬)  (0) 2023.06.06
[자료구조] 탐색 (순차 탐색, 이원 탐색, 두 리스트 비교)  (1) 2023.05.30
[자료구조] 그래프 2 (신장 트리, Kruskal, Prim, Sollin 알고리즘, 그래프 최단경로, AOV 네트워크)  (0) 2023.05.30
[자료구조] 그래프 1 (그래프 정의, 그래프 표현, 그래프 탐색)  (0) 2023.05.30
[자료구조] 트리 2 (최대 히프, 이진 탐색 트리)  (2) 2023.05.19
  1. 외부 정렬
  2. 합병 정렬
  3. 예시
  4. k-원 합병
'전공/자료구조' 카테고리의 다른 글
  • [자료구조] 정렬 1 (내부 정렬 - 삽입 정렬, 퀵 정렬, 합병 정렬, 히프 정렬, 기수 정렬)
  • [자료구조] 탐색 (순차 탐색, 이원 탐색, 두 리스트 비교)
  • [자료구조] 그래프 2 (신장 트리, Kruskal, Prim, Sollin 알고리즘, 그래프 최단경로, AOV 네트워크)
  • [자료구조] 그래프 1 (그래프 정의, 그래프 표현, 그래프 탐색)
dev_ares
dev_ares
대학에서 컴퓨터공학을 전공하고 있는 학생입니다.
    반응형
    250x250
  • dev_ares
    노트
    dev_ares
  • 전체
    오늘
    어제
    • 분류 전체보기 (187)
      • IT 트랜드 (2)
      • 백엔드 (18)
        • Java + Spring (8)
        • Kotlin + Spring (5)
        • 백엔드 (5)
      • 프론트엔드 (1)
        • React (1)
      • 대외활동 (17)
        • 42서울 (17)
      • 백준 (6)
        • Java (2)
        • C++ (3)
      • 전공 (121)
        • 객체지향프로그래밍 (17)
        • 자료구조 (23)
        • 리눅스시스템관리 (16)
        • 컴퓨터구조 (25)
        • 네트워크 (25)
        • 데이터베이스 (15)
        • 기타 전공 (0)
      • 프로그래밍 언어 (18)
        • Java (5)
        • Swift (4)
        • C++ (1)
        • Kotlin (8)
      • 기타 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    명령어
    메모리 계층 구조
    데이터패스
    컴공 포트폴리오
    컴퓨터 구조 및 설계
    오블완
    42서울
    티스토리챌린지
    자료구조
    백준
    코틀린
    사설 문제
    리눅스
    단일 사이클
    자바
    C++
    상속
    추가 문제
    컴퓨터구조
    반복자
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev_ares
[자료구조] 정렬 2 (외부 정렬 - 합병 정렬)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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