-
우선 순위 큐 정렬(Priority Queue Sort)Algorithm/자료구조 2022. 6. 6. 17:24728x90
우선 순위 큐는 엔트리의 집합을 저장한다.
일반적으로, 엔트리는 (Key , Value)의 쌍으로 구성되며, key가 우선순위를 가르킨다.
Priority Queue ADT
Main Method
-insert(e) : 엔트리 e 삽입
-removeMin() : 가장 작은 키에 해당하는 엔트리 제거
Additional Method
-min() : 가장 작은 키에 해당하는 엔트리 리턴(삭제하지않음)
-size() : 사이즈 리턴
-empty() : 큐가 비었는지 판단
우선 순위 큐 정렬 슈도 코드
Algorithm PQ_Sort(S,C) input sequence S, comparator C for the elements of S Output sequence S sorted in increasing order according to C P <- priority queue with comparator C while ㄱS.empty() e<- S.front(); S.eraseFront() P.insert(e,∅) while ㄱP.empty() e<- P.removeMin() S.insertBack(e)
1. 연속된 삽입 작업을 통해 요소를 하나씩 삽입한다.
2. 연속된 removeMin() 작업을 통해 정렬된 순서대로 요소를 제거한다.
이 정렬 알고리즘의 실행 시간은 우선 순위 큐 구현에 따라 다르다.
Sequenced-based Priority Queue
1. 정렬되지 않은 리스트로 구현
- insert는 시퀀스의 시작 또는 끝에 항목을 삽입할 수 있으므로 O(1) 시간이 걸린다.
- removeMin()과 min()은 가장 작은 키를 찾기 위해 전체 시퀀스를 탐색해야 하므로 O(n) 시간이 걸린다.
2. 정렬된 리스트로 구현
- insert는 항목을 삽입할 장소를 찾아야 하기 때문에 O(n) 시간이 걸린다.
- removeMin()과 min()은 가장 작은 키가 맨 처음 시작 위치에 존재하므로 O(1) 시간이 걸린다.
Selection-Sort(선택 정렬)
- 선택정렬은 우선순위 큐가 정렬되지 않은 시퀀스로 구현된 우선순위 큐 정렬의 변형 알고리즘이다.
1. 우선 순위 큐에 n개의 항목을 삽입하므로 O(n) 시간이 걸린다.
2. removeMin() 연산이 n개인 우선 순위 대기열에서 요소를 정렬된 순서대로 제거하는 데는 1+2+...n에 비례하는 시간이 걸린다.
따라서, 선택 정렬의 실행시간은 O(n^2)이다.
Insertion-Sort(삽입 정렬)
- 삽입 정렬은 우선순위 큐가 정렬된 시퀀스로 구현된 우선순위 큐 정렬의 변형 알고리즘이다.
1. 우선 순위 큐에 n개의 항목을 삽입하는 데는 n개에 비례한 시간이 걸린다.(1+2+...+n)
2. 연속된 removeMin() 작업이 있는 우선 순위큐에서 정렬된 순서대로 요소를 제거하는 데는 O(n)시간이 걸린다.
따라서, 삽입 정렬의 실행시간은 O(n^2)이다.
In-Place Insertion-Sort(제자리 삽입 정렬)
- 외부 데이터 구조를 사용하는 대신, 선택 정렬 및 삽입 정렬을 제자리에서 구현 할 수 있다.
- 입력 시퀀스 자체의 일부가 우선 순위 큐 역할을 한다.
- 시퀀스의 초기 부분을 계속 정렬한다.
- 시퀀스를 수정하는 대신 swap을 사용할 수 있다.
728x90'Algorithm > 자료구조' 카테고리의 다른 글
이진 탐색 트리(Binary Search Tree)와 AVL Tree (0) 2022.06.06 힙 정렬(Heap Sort) (0) 2022.06.06 트리(Tree) 자료구조와 순회 (0) 2022.04.19 벡터(Vectors) & 리스트(List) 자료구조 (0) 2022.04.15 스택(Stacks) & 큐(Queue) 자료구조 (0) 2022.04.15