티스토리 뷰
* 우선순위 큐(Priority Queue)
: 일반적인 큐는 먼저 들어간 데이터가 먼저 나오는데, 우선순위큐는 우순순위가 가장 높은 데이터가 먼저 나온다.
* 우선순위 큐를 구현하는 방법 3가지
1. 배열을 기반으로 구현 : 배열은 삽입, 삭제하는 과정에서 데이터를 한 칸씩 옮겨야 한다는 단점이 있음
2. 연결리스트를 기반으로 구현 : 삽입의 위치를 찾기 위해 처음부터 우선순위를 비교해야 한다.
3. 힙을 이용하여 구현
주로 힙을 이용하여 구현한다.
* 우선순위 큐 저장
: 숫자가 작을수록 우선순위가 높다.
: 새로운 데이터 '3'을 추가한다. 추가할 때는 가장 마지막 위치에 추가한다. 그리고 부모 노드와 우선순위를 비교하면서 위치를 바꿔준다.
: '3'의 부모인 '8'과 비교하였을 때 '3'이 우선순위가 크기 때문에 '8'과 자리를 바꿔준다.
: '8'과 자리를 바꾼 '3'의 부모는 '4'가 된다. '4'와 우선순위를 비교하였을 때 '3'이 우선순위가 크기 때문에 자리를 바꿔준다.
: 자신의 자리를 찾을 때 까지 반복한다.
: 이때는 '1'이 '3'보다 우선순위가 크기 때문에 바꾸지 않는다.
* 우선순위 큐 삭제
: 가장 우선순위가 높은 것은 루트에 있기 때문에 삭제는 어렵지 않다.
: 루트에 있는 '1'을 삭제한다.
: 루트를 채워주기 위해서 마지막 노드를 루트 노드의 자리로 옮긴 뒤 자식 노드와 비교하여 자리를 찾는다.
: 마지막 노드인 '8'을 루트자리로 옮긴다.
: 자식 노드 '3'과 비교하였을 때 '3'이 우선순위가 높기 때문에 자리를 바꾼다.
: 자식 노드 '4'와 비교하였을 때 '4'가 우선순위가 높기 때문에 자리를 바꾼다.
: 위 와같은 방법으로 자기 자리를 찾아간다.
* 예제
Student 클래스
- 이름, 점수를 속성으로 가지고 있고, 점수가 높은 사람을 우선순위가 높다고 가정한다.
- Comparable의 compareTo를 구현한다. 객체를 비교할 때 점수값을 기준으로 비교하여 우선순위가 결정된다.
아래의 예제는 점수가 높을 수록 우선순위가 높게 구현한 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
static class Student implements Comparable<Student> {
String name;
int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
@Override //점수 높은 것이 우선순위
public int compareTo(Student target) {
}
@Override
public String toString() {
return "이름 : " + name + ", 나이 : " + score;
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import java.util.PriorityQueue;
public class 우선순위큐 {
public static void main(String[] args) {
// TODO Auto-generated method stub
PriorityQueue<Student> q = new PriorityQueue<Student>();
q.add(new Student("A", 10));
q.add(new Student("B", 100));
q.add(new Student("C", 96));
q.add(new Student("D", 17));
q.add(new Student("E", 53));
q.add(new Student("F", 80));
// 높은 순으로 학생들 목록을 출력
while (!q.isEmpty())
System.out.println(q.poll());
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
결과
'자료구조' 카테고리의 다른 글
[자료구조] HashTable 구현 (0) | 2020.01.06 |
---|---|
[자료구조] LRU Cache 알고리즘 (0) | 2020.01.02 |
[자료구조] Array VS LinkedList (0) | 2019.12.17 |
메모리 저장 구조 - 변수사용에 따른 메모리 효율 (0) | 2019.12.03 |
[AJ/BFS] 너비 우선 탐색(BFS : Breadth First Search) (0) | 2019.10.03 |
- Total
- Today
- Yesterday
- binarySearch
- Objective function
- 자료구조
- 백 트래킹
- programmers
- git
- MLQ
- 기능개발
- 3-way-handshake
- MFQ
- Process Scheduling
- N-Queen
- Android
- 농협정보시스템IT
- algorithm
- hashtable
- 프로세스 스케줄링
- 네트워크
- 알고리즘
- 백트래킹
- SWExpert
- loss function
- 4-way-handshake
- DFS
- 프로그래머스
- java
- 사회망서비스
- 우선순위큐
- hash
- SRTN
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |