onepointlesson priorityqueue 우선순위 큐
TRANSCRIPT
![Page 2: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/2.jpg)
큐는 알겠는데우선순위 큐가 뭐지 ?
![Page 3: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/3.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
![Page 4: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/4.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .
![Page 5: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/5.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .
![Page 6: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/6.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .
![Page 7: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/7.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .
![Page 8: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/8.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .
![Page 9: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/9.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .
![Page 10: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/10.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .
![Page 11: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/11.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .
![Page 12: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/12.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .
![Page 13: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/13.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .
![Page 14: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/14.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .
![Page 15: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/15.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .
![Page 16: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/16.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .이때 응급환자가 실려온다 .
![Page 17: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/17.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .이때 응급환자가 실려온다 .
![Page 18: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/18.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .이때 응급환자가 실려온다 .환자의 상태는 심각하기 때문에 다른 손님보다 우선순위를 가지고 먼저 들어간다 .
![Page 19: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/19.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .이때 응급환자가 실려온다 .환자의 상태는 심각하기 때문에 다른 손님보다 우선순위를 가지고 먼저 들어간다 .
![Page 20: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/20.jpg)
우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !
예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .이때 응급환자가 실려온다 .환자의 상태는 심각하기 때문에 다른 손님보다 우선순위를 가지고 먼저 들어간다 .
![Page 21: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/21.jpg)
![Page 22: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/22.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !
![Page 23: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/23.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .
![Page 24: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/24.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .
1
![Page 25: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/25.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .
1 12
![Page 26: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/26.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .
1 12 2
![Page 27: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/27.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .
1 12 2 13
![Page 28: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/28.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .
1 12 2 13 7
![Page 29: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/29.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .
1 12 2 13 7 9
![Page 30: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/30.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .
1 12 2 13 7 9 15
![Page 31: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/31.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .
1 12 2 13 7 9 15
낮은 숫자가 우선순위가 높다고 가정하고 데이터를 출력합니다 .
![Page 32: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/32.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .
12 2 13 7 9 15
낮은 숫자가 우선순위가 높다고 가정하고 데이터를 출력합니다 .
![Page 33: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/33.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .
12 13 7 9 15
낮은 숫자가 우선순위가 높다고 가정하고 데이터를 출력합니다 .
![Page 34: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/34.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .
12 13 9 15
낮은 숫자가 우선순위가 높다고 가정하고 데이터를 출력합니다 .
![Page 35: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/35.jpg)
다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .
12 13 9 15
낮은 숫자가 우선순위가 높다고 가정하고 데이터를 출력합니다 .
이제 우리는 우선순위 큐가 무엇인지 알게 되었습니다 .
![Page 36: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/36.jpg)
이제 우선순위 큐가 뭔지는 알겠다 .
그래서 구현은 어떻게 하지 ?
![Page 37: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/37.jpg)
우선순위 큐의 구현 힙 (Heap)• 우선순위 큐는 배열과 연결리스트를 이용해서 구현은 가능하다 . 하지만 우선순위를 알 수 있는 키 (key) 값을 찾기 위해서 전체를 탐색함으로 매우 비효율적이다 .
• 그래서 힙을 이용한 구현을 한다 .
![Page 38: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/38.jpg)
아니 우선순위 큐를 구현하려 했더니 힙 (Heap) 이라니 이게 무슨 소리요 !!!
![Page 39: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/39.jpg)
힙 (Heap) - 1• 우리는 이진 탐색을 배우면서 이진 트리를 익혔다 .• 하지만 그건 우선 여기서는 패스 !!!• 우리에게 필요한 것은 완전 이진 트리다 .• 뭐 ? 완전 이진 트리 ???
![Page 40: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/40.jpg)
힙 (Heap) - 1• 우리는 이진 탐색을 배우면서 이진 트리를 익혔다 .• 하지만 그건 우선 여기서는 패스 !!!• 우리에게 필요한 것은 완전 이진 트리다 .• 뭐 ? 완전 이진 트리 ???
5
12 8
16
14 9 1
1
![Page 41: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/41.jpg)
힙 (Heap) - 1• 우리는 이진 탐색을 배우면서 이진 트리를 익혔다 .• 하지만 그건 우선 여기서는 패스 !!!• 우리에게 필요한 것은 완전 이진 트리다 .• 뭐 ? 완전 이진 트리 ???
5
12 8
16
14 9 1
1
중간에 빈 곳 없이 채워진 트리 !!
![Page 42: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/42.jpg)
힙 (Heap) - 1• 우리는 이진 탐색을 배우면서 이진 트리를 익혔다 .• 하지만 그건 우선 여기서는 패스 !!!• 우리에게 필요한 것은 완전 이진 트리다 .• 뭐 ? 완전 이진 트리 ???
5
12 8
16
14 9 1
1
중간에 빈 곳 없이 채워진 트리 !!배열을 이용하여 구현한다 !그리고 배열의 0번은 비워둔다 ! 그 이유는 뒤에 !
![Page 43: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/43.jpg)
힙 (Heap) - 1• 우리는 이진 탐색을 배우면서 이진 트리를 익혔다 .• 하지만 그건 우선 여기서는 패스 !!!• 우리에게 필요한 것은 완전 이진 트리다 .• 뭐 ? 완전 이진 트리 ???
5
12 8
16
14 9 1
1
중간에 빈 곳 없이 채워진 트리 !!배열을 이용하여 구현한다 !그리고 배열의 0번은 비워둔다 ! 그 이유는 뒤에 !
1
2 3
4 5 6 7 5 12 8 16 14 9 111 2 3 4 5 6 70
![Page 44: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/44.jpg)
• 2 종류의 힙 과 그 속성• MAX heap부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진 트리• MIN heap부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진 트리
힙 (Heap) - 2
0
8 12
16
14
21
14
MIN heap
20
9 10
8 7 4 2
MAX heap
![Page 45: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/45.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
![Page 46: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/46.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
i
![Page 47: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/47.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
2 의 자식은 4 와 5 가 있다 .
i
![Page 48: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/48.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
2 의 자식은 4 와 5 가 있다 .
i
![Page 49: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/49.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
2 의 자식은 4 와 5 가 있다 .왼쪽 자식 4 = i(2)*2오른쪽 자식 5 = i(2)*2+1
i
![Page 50: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/50.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
2 의 자식은 4 와 5 가 있다 .왼쪽 자식 4 = i(2)*2오른쪽 자식 5 = i(2)*2+1
i
4 = i(2)*2
![Page 51: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/51.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
2 의 자식은 4 와 5 가 있다 .왼쪽 자식 4 = i(2)*2오른쪽 자식 5 = i(2)*2+1
i
![Page 52: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/52.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
2 의 자식은 4 와 5 가 있다 .왼쪽 자식 4 = i(2)*2오른쪽 자식 5 = i(2)*2+1
i
5 = i(2)*2+1
![Page 53: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/53.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
2 의 자식은 4 와 5 가 있다 .왼쪽 자식 4 = i(2)*2오른쪽 자식 5 = i(2)*2+1
i
![Page 54: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/54.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
2 의 자식은 4 와 5 가 있다 .왼쪽 자식 4 = i(2)*2오른쪽 자식 5 = i(2)*2+1
i이제 i 를 각각 4 와 5 라 생각해보자
![Page 55: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/55.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
2 의 자식은 4 와 5 가 있다 .왼쪽 자식 4 = i(2)*2오른쪽 자식 5 = i(2)*2+1이제 i 를 각각 4 와 5 라 생각해보자
![Page 56: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/56.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
2 의 자식은 4 와 5 가 있다 .왼쪽 자식 4 = i(2)*2오른쪽 자식 5 = i(2)*2+1이제 i 를 각각 4 와 5 라 생각해보자
i
![Page 57: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/57.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
2 의 자식은 4 와 5 가 있다 .왼쪽 자식 4 = i(2)*2오른쪽 자식 5 = i(2)*2+1이제 i 를 각각 4 와 5 라 생각해보자
i그리고 각각 자식들의 부모 값 2i(4)/2 = 2i(5)/2 = 2 (int 로 받아서 나머지 값 무시 !)
![Page 58: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/58.jpg)
• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)
힙 (Heap) - 3
1
2 3
4 5 6 7
8
2 의 자식은 4 와 5 가 있다 .왼쪽 자식 4 = i(2)*2오른쪽 자식 5 = i(2)*2+1이제 i 를 각각 4 와 5 라 생각해보자
i그리고 각각 자식들의 부모 값 2i(4)/2 = 2i(5)/2 = 2 (int 로 받아서 나머지 값 무시 !)이 계산을 편히 하기 위하여배열의 0 번을 비워두었다 !!!
![Page 59: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/59.jpg)
• 삽입 연산들어온 노드의 키 값을 보고 부모 노드와 비교 후 위치를 바꾼다 .
힙 (Heap) 의 연산 - 1
0
2 3
7 8 5 12
10
1
2 3
4 5 6 7
8
![Page 60: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/60.jpg)
• 삽입 연산들어온 노드의 키 값을 보고 부모 노드와 비교 후 위치를 바꾼다 .
힙 (Heap) 의 연산 - 1
0
2 3
7 8 5 12
10
1
2 3
4 5 6 7
8
우선 1 의 키 값을 가진 노드를 삽입
![Page 61: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/61.jpg)
• 삽입 연산들어온 노드의 키 값을 보고 부모 노드와 비교 후 위치를 바꾼다 .
힙 (Heap) 의 연산 - 1
0
2 3
7 8 5 12
10
1
2 3
4 5 6 7
8 19
우선 1 의 키 값을 가진 노드를 삽입
![Page 62: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/62.jpg)
• 삽입 연산들어온 노드의 키 값을 보고 부모 노드와 비교 후 위치를 바꾼다 .
힙 (Heap) 의 연산 - 1
0
2 3
7 8 5 12
10
1
2 3
4 5 6 7
8 19
우선 1 의 키 값을 가진 노드를 삽입부모 노드와 키 값을 비교하여 교환
![Page 63: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/63.jpg)
• 삽입 연산들어온 노드의 키 값을 보고 부모 노드와 비교 후 위치를 바꾼다 .
힙 (Heap) 의 연산 - 1
0
2 3
7
8 5 12
10
1
2 3
4 5 6 7
8
1
9
우선 1 의 키 값을 가진 노드를 삽입부모 노드와 키 값을 비교하여 교환
![Page 64: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/64.jpg)
• 삽입 연산들어온 노드의 키 값을 보고 부모 노드와 비교 후 위치를 바꾼다 .
힙 (Heap) 의 연산 - 1
0
2
3
7
8 5 12
10
1
2 3
4 5 6 7
8
1
9
우선 1 의 키 값을 가진 노드를 삽입부모 노드와 키 값을 비교하여 교환
![Page 65: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/65.jpg)
• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .
힙 (Heap) 의 연산 - 2
0
2
3
7
8 5 12
10
1
2 3
4 5 6 7
8
1
9
![Page 66: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/66.jpg)
• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .
힙 (Heap) 의 연산 - 2
0
2
3
7
8 5 12
10
1
2 3
4 5 6 7
8
1
9
가장 큰 키 값을 가진 1 번 노드 제거
![Page 67: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/67.jpg)
• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .
힙 (Heap) 의 연산 - 2
2
3
7
8 5 12
10
1
2 3
4 5 6 7
8
1
9
가장 큰 키 값을 가진 1 번 노드 제거
![Page 68: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/68.jpg)
• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .
힙 (Heap) 의 연산 - 2
2
3
7
8 5 12
10
1
2 3
4 5 6 7
8
1
9
가장 큰 키 값을 가진 1 번 노드 제거제일 마지막 노드를 1 번 노드로 이동
![Page 69: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/69.jpg)
• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .
힙 (Heap) 의 연산 - 2
2
3
7
8 5 12
10
1
2 3
4 5 6 7
8
1
9
가장 큰 키 값을 가진 1 번 노드 제거제일 마지막 노드를 1 번 노드로 이동
![Page 70: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/70.jpg)
• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .
힙 (Heap) 의 연산 - 2
2
3
7
8 5 12
10
1
2 3
4 5 6 7
8
1
가장 큰 키 값을 가진 1 번 노드 제거제일 마지막 노드를 1 번 노드로 이동
![Page 71: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/71.jpg)
• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .
힙 (Heap) 의 연산 - 2
2
3
7
8 5 12
10
1
2 3
4 5 6 7
8
1
가장 큰 키 값을 가진 1 번 노드 제거제일 마지막 노드를 1 번 노드로 이동자식 노드와 키 값을 비교하여 교환
![Page 72: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/72.jpg)
• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .
힙 (Heap) 의 연산 - 2
2
37
8 5 12
10
1
2 3
4 5 6 7
8
1가장 큰 키 값을 가진 1 번 노드 제거제일 마지막 노드를 1 번 노드로 이동자식 노드와 키 값을 비교하여 교환
![Page 73: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/73.jpg)
• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .
힙 (Heap) 의 연산 - 2
2 3
7 8 5 12
10
1
2 3
4 5 6 7
8
1가장 큰 키 값을 가진 1 번 노드 제거제일 마지막 노드를 1 번 노드로 이동자식 노드와 키 값을 비교하여 교환
![Page 74: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/74.jpg)
이제 우선순위 큐에 필요한 정보를 모두 알았으니이제 구현을 해봅시다 !
Go
Go
![Page 75: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/75.jpg)
구현을 위한 설계• C++ 를 이용한 구현 .PriorityQueue Class 를 만들자 .• 노드 배열의 위치를 기억하기 위한 n 을 사용하자int n =1; 배열의 시작은 1 이기 때문에 n 은 1 부터 시작 !• 배열을 이용하는데 data 와 key 값이 필요하니 구조체 배열을 이용하자 !struct Node{ string data; int key;}; 그리고 구조체 배열을 정적으로 100 개 할당하고 시작 ! Node heap[100]• 데이터를 삽입하기 위한 Push() 와 Pop() 을 그리고 출력을 위한 Show() !void Push() void Pop() void Show() • Push 에는 data 와 key 값을 받을 수 있게 하자 !void Push(string data, int key)• 노드 비교 후 교환을 위한 Swap 을 노드를 참조하여 교환 하자Swap(Node &a, Node &b);
![Page 76: OnePointLesson PriorityQueue 우선순위 큐](https://reader030.vdocuments.pub/reader030/viewer/2022012919/587992e81a28ab95318b5ebd/html5/thumbnails/76.jpg)
End