Post

๐Ÿ’š ์ž๋ฃŒ๊ตฌ์กฐ - ์šฐ์„ ์ˆœ์œ„ ํ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋ฉฐ ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด ๋ณด์‹œ์˜ค.

๐Ÿ’š ์ž๋ฃŒ๊ตฌ์กฐ - ์šฐ์„ ์ˆœ์œ„ ํ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋ฉฐ ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด ๋ณด์‹œ์˜ค.

์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)

์šฐ์„ ์ˆœ์œ„ ํ๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์š”์†Œ๊ฐ€ ๋จผ์ € ์ฒ˜๋ฆฌ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ์ฃผ๋กœ ํž™(Heap)์„ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„๋จ.

์ฆ‰, ๋“ค์–ด๊ฐ„ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋งํ•จ.

์ฃผ์š” ๋™์ž‘

  • insert

  • delete

  • peek() : ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ์ตœ๋Œ€ ์šฐ์„ ์ˆœ์œ„ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ. ์ตœ๋Œ€ ์šฐ์„ ์ˆœ์œ„ ๊ฐ’(์ตœ๋Œ€ ํž™)์€ ํ•ญ์ƒ ๋ฃจํŠธ์— ์žˆ์œผ๋ฏ€๋กœ ๋ฃจํŠธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ.

1

4 -> 8 -> 2 ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ํ•  ๋•Œ, ์šฐ์„ ์ˆœ์œ„ ํ์˜ ์ฒ˜๋ฆฌ ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. (๋†’์€ ๊ฐ’์ด ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค๊ณ  ๊ฐ€์ •)

input : 4 -> 8 -> 2 queue : 4 -> 8 -> 2 priority queue : 8 -> 4 -> 2

๊ตฌํ˜„

๊ตฌํ˜„ ๋ฐฉ๋ฒ•enqueue()dequeue()
๋ฐฐ์—ด (unsorted array)O(1)O(N)
์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (unsorted linked list)O(1)O(N)
์ •๋ ฌ๋œ ๋ฐฐ์—ด (sorted array)O(N)O(1)
์ •๋ ฌ๋œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (sorted linked list)O(N)O(1)
ํž™ (heap)O(logN)O(logN)
  • ํž™ ๋ฐฉ์‹์ด ์ตœ์•…์— ๊ฒฝ์šฐ๋ผ๋„ O(logN)์„ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ํž™์„ ๊ฐ€์ง€๊ณ  ๊ตฌํ˜„์„ ํ•œ๋‹ค.
1
2
3
4
5
6
// ๋‚ฎ์€ ์ˆ˜๊ฐ€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง 
PriorityQueue<Integer> pq =  new  PriorityQueue<>();  
// ๋†’์€ ์ˆ˜๊ฐ€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง 
PriorityQueue<Integer> pq =  new  PriorityQueue<>(Collections.reverseOrder());  
// ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๋” ๋นจ๋ฆฌ์˜ค๋Š” ๋ฌธ์ž์—ด์ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง 
PriorityQueue<String> pq =  new  PriorityQueue<>();

ํž™(Heap)

ํž™์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(Complete Binary Tree) ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋˜๋ฉฐ, ๋…ธ๋“œ๋“ค์€ ์ตœ๋Œ€ ํž™(Max Heap) ๋˜๋Š” ์ตœ์†Œ ํž™(Min Heap)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ •ํ•ด์ง„๋‹ค.

  • ํŠธ๋ฆฌ(tree) : ๋ถ€๋ชจ-์ž๋…€์ฒ˜๋Ÿผ ๊ณ„์ธต์ ์ธ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๋Š” ๊ตฌ์กฐ

  • ์ด์ง„ ํŠธ๋ฆฌ(binary tree) : ์ž๋…€๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์ธ ํŠธ๋ฆฌ

  • max heap : ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค(key)๊ฐ€ ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค(key)๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ํŠธ๋ฆฌ

  • min heap : ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค(key)๊ฐ€ ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค(key)๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ํŠธ๋ฆฌ

์ฃผ์š” ๋™์ž‘

  • insert

  • delete

  • peek

์ •๋ฆฌ

์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์š”์†Œ๊ฐ€ ๋จผ์ € ์ฒ˜๋ฆฌ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํž™(Heap)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋˜๋ฉฐ, ์šฐ์„ ์ˆœ์œ„ ํ์˜ ์‚ฝ์ž…(insert)๊ณผ ์‚ญ์ œ(delete) ์—ฐ์‚ฐ์€ ๋ชจ๋‘ O(log n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

ํž™(Heap)์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(Complete Binary Tree)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๊ฑฐ๋‚˜ ๊ฐ™์€ ์†์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.

์ตœ๋Œ€ ํž™(Max Heap)์—์„œ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค๊ฐ€ ์ž์‹ ๋…ธ๋“œ๋“ค์˜ ํ‚ค๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , ์ตœ์†Œ ํž™(Min Heap)์—์„œ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค๊ฐ€ ์ž์‹ ๋…ธ๋“œ๋“ค์˜ ํ‚ค๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์œผ๋กœ ํž™์€ ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ ์—ฐ์‚ฐ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์‚ฝ์ž… ์—ฐ์‚ฐ (insert): ์ƒˆ๋กœ์šด ์›์†Œ๋ฅผ ํž™์— ์ถ”๊ฐ€ํ•  ๋•Œ, ํž™์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์— ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , ํ•ด๋‹น ์›์†Œ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜๋กœ โ€œํž™ ์ •๋ ฌโ€ํ•˜๋ฉด์„œ ์ด๋™์‹œํ‚จ๋‹ค. ์ด ๊ณผ์ •์—์„œ ํŠธ๋ฆฌ์˜ ๋†’์ด์— ๋น„๋ก€ํ•˜์—ฌ ๋น„๊ต์™€ ๊ตํ™˜์ด ์ผ์–ด๋‚˜๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(log n)์ด๋‹ค.

  • ์‚ญ์ œ ์—ฐ์‚ฐ (delete): ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์›์†Œ(์ตœ์ƒ์œ„ ์›์†Œ, ๋ฃจํŠธ)๋ฅผ ์‚ญ์ œํ•  ๋•Œ๋Š”, ๋ฃจํŠธ ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๋ฃจํŠธ๋กœ ์˜ฌ๋ฆฐ ๋’ค, ํ•ด๋‹น ์›์†Œ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜๋กœ โ€œํž™ ์ •๋ ฌโ€ํ•œ๋‹ค. ์ด ๊ณผ์ •์—์„œ๋„ ๋น„๊ต์™€ ๊ตํ™˜์ด ์ผ์–ด๋‚˜๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(log n)์ด๋‹ค.

  • peek ์—ฐ์‚ฐ: ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๊ฐ’์„ ํ™•์ธํ•˜๋Š” ์—ฐ์‚ฐ์€ O(1)์ด๋‹ค. ์ด๋Š” ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๊ฐ’์„ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋”ฐ๋ผ์„œ, ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ํž™์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋ฉด ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(log n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋ณด์žฅํ•˜๋ฉฐ, ํšจ์œจ์ ์ธ ์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

This post is licensed under CC BY 4.0 by the author.