일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 경사하강법
- urlencoded
- 이중연결리스트
- vsCode
- pytorch
- MSE
- Loss함수
- 분리연쇄법
- body-parser
- 선형조사법
- 선형회귀
- ML
- 상향식 힙
- 삽입식 힙
- 해시테이블
- 딥러닝
- 알고리즘
- anaconda
- upheap
- 연결리스트
- POST
- nodejs
- 2차조사법
- 개방주소법
- bodyparser
- downheap
- 이중해싱
- 힙정렬
- Today
- Total
LittleDeveloper
Week2_우선순위 큐_개념 본문
1. 우선순위 큐란?
*자료구조까지 학습한 분이라면 '큐(Queue)'의 개념은 아실 거예요.
큐는 '선입선출', 즉 먼저 들어간 데이터가 먼저 나가는 자료구조를 말하죠.
그런데 왜 '우선순위'라는 말이 붙는건지??
'우선순위 큐'는 우선순위가 높은 데이터부터 나가는 구조입니다! 그러니까 들어온 순서랑은 무관하다는 이야기죠.
*우선순위 큐 ADT
-우선순위 큐 ADT는 각 데이터를 (키, 원소)로 저장한답니다.
이 ADT 메소드에는 무엇이 있는지 한번 살펴볼까요?
- 주요 메소드
- insertItem(k,e): 키 k인 원소 e를 큐에 삽입
- element removeMin() : 큐에서 최소 키를 가진 원소를 삭제하여 반환
- 일반 메소드
- integer size(): 큐의 데이터 수 반환
- boolean isEmpty(): 큐가 비어 있는지 여부 반환
- 접근 메소드
- element minElement():
- element minKey():
- 예외
- emptyQException():
- fullQException():
2. 우선순위 큐를 이용한 정렬
<의사코드 정리>
입력: 리스트 -> 출력: 정렬된 리스트
1. P <= 빈 우선순위 큐
2. L 비어있지 않으면, 리스트에서 앞에서부터 원소 삭제하고 e에 저장한 다음 -> 그 e를 P에 삽입
3. P 비어있지 않으면, P(큐)에서 최솟값 삭제하고 e에 저장한 다음 -> 그 e를 L의 뒤부터 삽입
4. return
무순리스트 | 순서리스트 | |
우선순위 큐 데이터들 리스트에 임의 순서로 저장 | 우선순위 큐 데이터들 리스트에 키 정렬 순서로 저장 | |
insertItem (1회 기준) |
O(1) | O(n) |
removeMin minKey minElement (1회 기준) |
O(n) | O(1) |
이렇게 리스트의 종류는 순서를 기준으로 2가지가 있는데요, 그럼 우선순위 큐를 각각 무순리스트, 순서리스트로 만드는 알고리즘은 무엇일까요?
1) 선택 정렬
5 | 4 | 3 | 2 | 1 |
위 표처럼 리스트 하나(L)가 있어요. 이 리스트를 이제 우선순위 큐에 담을 건데... 일단은 그냥 넣어보기로 해요~
5 | 4 | 3 | 2 | 1 |
-> 우선순위 큐에 다 담았고, 원래 리스트 L은 비어 있는 상태랍니다.
이제 우리는 이 큐에 담긴 원소들을 L로 다시 넣어서 정렬된 리스트 L'을 만들건데, 최솟값부터 차례대로 L에 넣을거예요!
가장 작은 원소를 찾으려면 n번 탐색해야 해요.
그리고 그 다음으로 작은 원소는 n-1 번 탐색해야 하죠. (앞에서 가장 원소는 이미 나갔으니까)
...이런 식으로 빈 큐가 될 때까지 이 큐에서 데이터를 삭제시켜요! (-> removeMin)
2) 삽입 정렬
선택 정렬 | 삽입 정렬 |
(작성 중)
'알고리즘(C)' 카테고리의 다른 글
Week9_해시테이블_실습(2) (0) | 2021.11.29 |
---|---|
Week9_해시테이블_실습(1) (0) | 2021.11.29 |
Week10_ 그래프 (0) | 2021.11.05 |
Week7_해시테이블(1) (0) | 2021.10.27 |
Week1_ Review (0) | 2021.10.13 |