← 질문 목록
#45깊이 0
메모리보다 큰 데이터를 정렬할 때 무엇을 쓰는가?
외부 정렬을 사용한다. 데이터를 작은 조각으로 나누어 정렬한 뒤, 이를 다시 합치는 방식을 취한다.
- 원본 데이터
그다음은 메모리입니다. 들어가는 만큼 읽는다
메모리그다음은 임시 파일입니다. 조각을 정렬해 런으로 쓴다
임시 파일그다음은 결과 파일입니다. 여러 런을 작은 값부터 병합한다
결과 파일
가장 흔한 방식은 외부 병합 정렬이다. 메모리에 올릴 수 있는 만큼 데이터를 읽어 정렬하고 임시 파일로 저장한다. 이를 '런(Run)'이라고 부른다.
이후 여러 런을 동시에 읽으며 가장 작은 값을 선택해 결과 파일에 쓴다. 이때 최소 힙(Min Heap)을 사용해 병합 속도를 높인다.
디스크를 읽고 쓰는 횟수가 전체 시간을 좌우한다. 메모리 버퍼를 키우고 한 번에 병합할 런 수를 조절해 병합 단계 수를 줄인다.
추천 꼬리질문
관련 질문
- K-way 병합에서 K를 증가시킬 때 발생하는 문제는 무엇인가?자료구조 · 알고리즘외부 정렬의 병합 단계를 알아야 K를 키울 때의 문제가 보인다.
- 정렬의 안정성이 실무에서 문제가 되는 때는?자료구조 · 알고리즘정렬을 실무 제약에서 바라보는 같은 축이다 — 한쪽은 순서 보존, 한쪽은 메모리 한계다.
- 큰 파일을 통째로 읽으면 무엇이 문제인가?운영체제메모리에 다 올라가지 않는 데이터를 다룬다는 같은 전제에 서 있다 — 외부 정렬이 그 해법의 대표다.
- 외부 정렬 알고리즘에서 대체 선택 정렬을 사용하는 이유는 무엇인가?자료구조 · 알고리즘
- 데이터가 한 대에 안 들어가면 어떻게 나누는가?데이터베이스