onepointlesson priorityqueue 우선순위 큐

76
우우우우 우 (Priority Queue) 우우우우우 우우우우우 우우우 [email protected] http://blog.naver.com/ 4roring

Upload: kwangil-kim

Post on 15-Apr-2017

122 views

Category:

Education


0 download

TRANSCRIPT

Page 1: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐(Priority Queue)동명대학교 게임공학과 김광일

[email protected]

http://blog.naver.com/4ror-ing

Page 2: OnePointLesson PriorityQueue 우선순위 큐

큐는 알겠는데우선순위 큐가 뭐지 ?

Page 3: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

Page 4: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .

Page 5: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .

Page 6: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .

Page 7: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .

Page 8: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .

Page 9: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .

Page 10: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .

Page 11: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .

Page 12: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .

Page 13: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .

Page 14: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .

Page 15: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .

Page 16: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .이때 응급환자가 실려온다 .

Page 17: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .이때 응급환자가 실려온다 .

Page 18: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .이때 응급환자가 실려온다 .환자의 상태는 심각하기 때문에 다른 손님보다 우선순위를 가지고 먼저 들어간다 .

Page 19: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .이때 응급환자가 실려온다 .환자의 상태는 심각하기 때문에 다른 손님보다 우선순위를 가지고 먼저 들어간다 .

Page 20: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐란 ? 큐지만 들어간 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 큐 !

예를 들어 병원이 있다 .병원을 이용하기 위해 손님들이 찾아온다 .그리고 하나 둘 병원에 들어가는데 .이때 응급환자가 실려온다 .환자의 상태는 심각하기 때문에 다른 손님보다 우선순위를 가지고 먼저 들어간다 .

Page 21: OnePointLesson PriorityQueue 우선순위 큐
Page 22: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !

Page 23: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .

Page 24: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .

1

Page 25: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .

1 12

Page 26: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .

1 12 2

Page 27: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .

1 12 2 13

Page 28: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .

1 12 2 13 7

Page 29: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .

1 12 2 13 7 9

Page 30: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .

1 12 2 13 7 9 15

Page 31: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .

1 12 2 13 7 9 15

낮은 숫자가 우선순위가 높다고 가정하고 데이터를 출력합니다 .

Page 32: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .

12 2 13 7 9 15

낮은 숫자가 우선순위가 높다고 가정하고 데이터를 출력합니다 .

Page 33: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .

12 13 7 9 15

낮은 숫자가 우선순위가 높다고 가정하고 데이터를 출력합니다 .

Page 34: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .

12 13 9 15

낮은 숫자가 우선순위가 높다고 가정하고 데이터를 출력합니다 .

Page 35: OnePointLesson PriorityQueue 우선순위 큐

다시 한 번 설명 한다 . 집중해서 보자 !우선 큐에 데이터를 채웁니다 .

12 13 9 15

낮은 숫자가 우선순위가 높다고 가정하고 데이터를 출력합니다 .

이제 우리는 우선순위 큐가 무엇인지 알게 되었습니다 .

Page 36: OnePointLesson PriorityQueue 우선순위 큐

이제 우선순위 큐가 뭔지는 알겠다 .

그래서 구현은 어떻게 하지 ?

Page 37: OnePointLesson PriorityQueue 우선순위 큐

우선순위 큐의 구현 힙 (Heap)• 우선순위 큐는 배열과 연결리스트를 이용해서 구현은 가능하다 . 하지만 우선순위를 알 수 있는 키 (key) 값을 찾기 위해서 전체를 탐색함으로 매우 비효율적이다 .

• 그래서 힙을 이용한 구현을 한다 .

Page 38: OnePointLesson PriorityQueue 우선순위 큐

아니 우선순위 큐를 구현하려 했더니 힙 (Heap) 이라니 이게 무슨 소리요 !!!

Page 39: OnePointLesson PriorityQueue 우선순위 큐

힙 (Heap) - 1• 우리는 이진 탐색을 배우면서 이진 트리를 익혔다 .• 하지만 그건 우선 여기서는 패스 !!!• 우리에게 필요한 것은 완전 이진 트리다 .• 뭐 ? 완전 이진 트리 ???

Page 40: OnePointLesson PriorityQueue 우선순위 큐

힙 (Heap) - 1• 우리는 이진 탐색을 배우면서 이진 트리를 익혔다 .• 하지만 그건 우선 여기서는 패스 !!!• 우리에게 필요한 것은 완전 이진 트리다 .• 뭐 ? 완전 이진 트리 ???

5

12 8

16

14 9 1

1

Page 41: OnePointLesson PriorityQueue 우선순위 큐

힙 (Heap) - 1• 우리는 이진 탐색을 배우면서 이진 트리를 익혔다 .• 하지만 그건 우선 여기서는 패스 !!!• 우리에게 필요한 것은 완전 이진 트리다 .• 뭐 ? 완전 이진 트리 ???

5

12 8

16

14 9 1

1

중간에 빈 곳 없이 채워진 트리 !!

Page 42: OnePointLesson PriorityQueue 우선순위 큐

힙 (Heap) - 1• 우리는 이진 탐색을 배우면서 이진 트리를 익혔다 .• 하지만 그건 우선 여기서는 패스 !!!• 우리에게 필요한 것은 완전 이진 트리다 .• 뭐 ? 완전 이진 트리 ???

5

12 8

16

14 9 1

1

중간에 빈 곳 없이 채워진 트리 !!배열을 이용하여 구현한다 !그리고 배열의 0번은 비워둔다 ! 그 이유는 뒤에 !

Page 43: OnePointLesson PriorityQueue 우선순위 큐

힙 (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 우선순위 큐

• 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 우선순위 큐

• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)

힙 (Heap) - 3

1

2 3

4 5 6 7

8

Page 46: OnePointLesson PriorityQueue 우선순위 큐

• 부모와 자식의 관계우선 MIN heap 으로 구현을 생각하고 설명한다 .노드 i 가 있다 . (i 를 2 라고 생각해보자 )( 힙에서는 1 번 노드가 배열 1 부터 시작 !)

힙 (Heap) - 3

1

2 3

4 5 6 7

8

i

Page 47: OnePointLesson PriorityQueue 우선순위 큐

• 부모와 자식의 관계우선 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 우선순위 큐

• 부모와 자식의 관계우선 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 우선순위 큐

• 부모와 자식의 관계우선 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 우선순위 큐

• 부모와 자식의 관계우선 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 우선순위 큐

• 부모와 자식의 관계우선 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 우선순위 큐

• 부모와 자식의 관계우선 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 우선순위 큐

• 부모와 자식의 관계우선 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 우선순위 큐

• 부모와 자식의 관계우선 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 우선순위 큐

• 부모와 자식의 관계우선 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 우선순위 큐

• 부모와 자식의 관계우선 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 우선순위 큐

• 부모와 자식의 관계우선 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 우선순위 큐

• 부모와 자식의 관계우선 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 우선순위 큐

• 삽입 연산들어온 노드의 키 값을 보고 부모 노드와 비교 후 위치를 바꾼다 .

힙 (Heap) 의 연산 - 1

0

2 3

7 8 5 12

10

1

2 3

4 5 6 7

8

Page 60: OnePointLesson PriorityQueue 우선순위 큐

• 삽입 연산들어온 노드의 키 값을 보고 부모 노드와 비교 후 위치를 바꾼다 .

힙 (Heap) 의 연산 - 1

0

2 3

7 8 5 12

10

1

2 3

4 5 6 7

8

우선 1 의 키 값을 가진 노드를 삽입

Page 61: OnePointLesson PriorityQueue 우선순위 큐

• 삽입 연산들어온 노드의 키 값을 보고 부모 노드와 비교 후 위치를 바꾼다 .

힙 (Heap) 의 연산 - 1

0

2 3

7 8 5 12

10

1

2 3

4 5 6 7

8 19

우선 1 의 키 값을 가진 노드를 삽입

Page 62: OnePointLesson PriorityQueue 우선순위 큐

• 삽입 연산들어온 노드의 키 값을 보고 부모 노드와 비교 후 위치를 바꾼다 .

힙 (Heap) 의 연산 - 1

0

2 3

7 8 5 12

10

1

2 3

4 5 6 7

8 19

우선 1 의 키 값을 가진 노드를 삽입부모 노드와 키 값을 비교하여 교환

Page 63: OnePointLesson PriorityQueue 우선순위 큐

• 삽입 연산들어온 노드의 키 값을 보고 부모 노드와 비교 후 위치를 바꾼다 .

힙 (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 우선순위 큐

• 삽입 연산들어온 노드의 키 값을 보고 부모 노드와 비교 후 위치를 바꾼다 .

힙 (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 우선순위 큐

• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .

힙 (Heap) 의 연산 - 2

0

2

3

7

8 5 12

10

1

2 3

4 5 6 7

8

1

9

Page 66: OnePointLesson PriorityQueue 우선순위 큐

• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .

힙 (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 우선순위 큐

• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .

힙 (Heap) 의 연산 - 2

2

3

7

8 5 12

10

1

2 3

4 5 6 7

8

1

9

가장 큰 키 값을 가진 1 번 노드 제거

Page 68: OnePointLesson PriorityQueue 우선순위 큐

• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .

힙 (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 우선순위 큐

• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .

힙 (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 우선순위 큐

• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .

힙 (Heap) 의 연산 - 2

2

3

7

8 5 12

10

1

2 3

4 5 6 7

8

1

가장 큰 키 값을 가진 1 번 노드 제거제일 마지막 노드를 1 번 노드로 이동

Page 71: OnePointLesson PriorityQueue 우선순위 큐

• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .

힙 (Heap) 의 연산 - 2

2

3

7

8 5 12

10

1

2 3

4 5 6 7

8

1

가장 큰 키 값을 가진 1 번 노드 제거제일 마지막 노드를 1 번 노드로 이동자식 노드와 키 값을 비교하여 교환

Page 72: OnePointLesson PriorityQueue 우선순위 큐

• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .

힙 (Heap) 의 연산 - 2

2

37

8 5 12

10

1

2 3

4 5 6 7

8

1가장 큰 키 값을 가진 1 번 노드 제거제일 마지막 노드를 1 번 노드로 이동자식 노드와 키 값을 비교하여 교환

Page 73: OnePointLesson PriorityQueue 우선순위 큐

• 삭제 연산가장 큰 키값을 가진 노드를 삭제하고 제일 마지막에 있는 노드를 맨 처음으로 보낸 후 자식 노드와 비교하여 재정렬한다 .

힙 (Heap) 의 연산 - 2

2 3

7 8 5 12

10

1

2 3

4 5 6 7

8

1가장 큰 키 값을 가진 1 번 노드 제거제일 마지막 노드를 1 번 노드로 이동자식 노드와 키 값을 비교하여 교환

Page 74: OnePointLesson PriorityQueue 우선순위 큐

이제 우선순위 큐에 필요한 정보를 모두 알았으니이제 구현을 해봅시다 !

Go

Go

Page 75: OnePointLesson PriorityQueue 우선순위 큐

구현을 위한 설계• 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 우선순위 큐

End