CS

[์ž๋ฃŒ๊ตฌ์กฐ] ํž™(heap) ์ž๋ฃŒ๊ตฌ์กฐ

meeeeejin 2021. 9. 30. 11:01

 

ํž™์€ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์œ„ํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํž™์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ „์—, ์šฐ์„ ์ˆœ์œ„ ํ์˜ ์ •์˜์™€ ํŠน์ง•์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ดค๋‹ค. 

  • ์šฐ์„ ์ˆœ์œ„์˜ ๊ฐœ๋…์„ ํ์— ๋„์ž…ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋ฐ์ดํ„ฐ๋“ค์ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ
  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ, ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด, OS์—์„œ ์ž‘์—…์˜ ์Šค์ผ€์ฅด๋ง ๋“ฑ์— ์‚ฌ์šฉ๋จ
  • ๋ฐฐ์—ด, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ํž™์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํž™์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ์œจ์ 
์šฐ์„  ์ˆœ์œ„ ํ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์‚ฝ์ž… ์‹œ๊ฐ„ ๋ณต์žก๋„ ์‚ญ์ œ ์‹œ๊ฐ„ ๋ณต์žก๋„
์ˆœ์„œ ์—†๋Š” ๋ฐฐ์—ด O(1) O(N)
์ˆœ์„œ ์—†๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ O(1) O(N)
์ •๋ ฌ๋œ ๋ฐฐ์—ด O(N) O(1)
์ •๋ ฌ๋œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ O(N) O(1)
ํž™(heap) O(logN) O(logN)

 

 

ํž™(heap) ์ž๋ฃŒ๊ตฌ์กฐ

๐Ÿ’ก ํž™(heap)์ด๋ž€?

  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ผ์ข…์ธ ์ž๋ฃŒ๊ตฌ์กฐ
    - ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ: ๋งˆ์ง€๋ง‰์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ž์‹๋“ค์ด ๊ฝ‰ ์ฑ„์›Œ์ง„ ์ด์ง„ ํŠธ๋ฆฌ
  • ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์œ„ํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’๋“ค ์ค‘์—์„œ ์ตœ๋Œ“๊ฐ’/์ตœ์†Ÿ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ด๋„๋ก ๋งŒ๋“ค์–ด์ง
  • ์ตœ๋Œ€ ํž™(max heap): (๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’ >= ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’)์„ ๋งŒ์กฑํ•˜๋Š” ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ
  • ์ตœ์†Œ ํž™(min heap): (๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’ <= ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’)์„ ๋งŒ์กฑํ•˜๋Š” ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ
  • ๋Š์Šจํ•œ ์ •๋ ฌ ์ƒํƒœ(๋ฐ˜์ •๋ ฌ ์ƒํƒœ) ์œ ์ง€
  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์™€ ๋‹ฌ๋ฆฌ ์ค‘๋ณต ๊ฐ’ ํ—ˆ์šฉ

 

 

๐Ÿ’ก ๋ฐฐ์—ด๋กœ ํž™ ๊ตฌํ˜„ํ•˜๊ธฐ

ํž™์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋นˆ ๊ณต๊ฐ„์ด ์—†์–ด ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ์— ์šฉ์ดํ•˜๋‹ค. ๊ตฌํ˜„์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ 1๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜๋ฉด, ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ 1๋ฒˆ์œผ๋กœ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค. ์ดํ›„ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์„ ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ €์žฅํ•œ๋‹ค. 

 

 

๐Ÿ’ก ํž™ ์žฌ๊ตฌ์กฐํ™”(heapify)

ํž™์—์„œ ์›์†Œ์˜ ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚˜๋ฉด ์ตœ๋Œ€ ํž™์˜ ์กฐ๊ฑด์ด ๊นจ์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋‹ค์‹œ ์ตœ๋Œ€ ํž™์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋„๋ก ๋…ธ๋“œ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ์žฌ๊ตฌ์กฐํ™”(heapify)๋ผ๊ณ  ํ•œ๋‹ค. 

 

์‚ฝ์ž…๊ณผ ์‚ญ์ œ์˜ ๊ฒฝ์šฐ ์—ฐ์‚ฐ ์ž์ฒด๋Š” O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ, heapify์˜ ๊ณผ์ •์ด O(logN)์ด๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ข…์ ์œผ๋กœ O(logN)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. 

 

<์ตœ๋Œ€ ํž™ ์‚ฝ์ž… ๊ณผ์ •>

์›์†Œ๋ฅผ ๊ฐ€์žฅ ๋ง๋‹จ ๋…ธ๋“œ์— ์‚ฝ์ž…ํ•œ ๋‹ค์Œ, ๊ฐ€์žฅ ๋ง๋‹จ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ๊ฐ’์„ ๋น„๊ตํ•˜๋ฉด์„œ ์ตœ๋Œ€ ํž™ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. 

 

 

 

์ตœ์•…์˜ ๊ฒฝ์šฐ ๊ฐ€์žฅ ๋ง๋‹จ์— ์‚ฝ์ž…ํ•œ ์›์†Œ๊ฐ€ ๋ฃจํŠธ ๋…ธ๋“œ๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋˜๊ณ , ์ด๋•Œ์˜ ๋น„๊ต ํšŸ์ˆ˜๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด๋งŒํผ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฝ์ž…์˜ ๊ฒฝ์šฐ heapify์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(logN)์ด ๋œ๋‹ค. 

 

 

<์ตœ๋Œ€ ํž™ ์‚ญ์ œ ๊ณผ์ •>

๊ฐ€์žฅ ํฐ ์›์†Œ์ธ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‚˜๋ฉด, ๊ฐ€์žฅ ๋ง๋‹จ์˜ ์›์†Œ๋ฅผ ๋ฃจํŠธ๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ์ดํ›„ ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ž์‹ ๋…ธ๋“œ์™€ ๋น„๊ตํ•˜์—ฌ ์ตœ๋Œ€ ํž™ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. 

 

์‚ฝ์ž… ๊ณผ์ •๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ, ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ๋ง๋‹จ ๋…ธ๋“œ๊นŒ์ง€ ๋‚ด๋ ค์˜ค๊ฒŒ ๋˜๋ฏ€๋กœ ๋น„๊ต ํšŸ์ˆ˜๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด๋งŒํผ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์‚ญ์ œ ๊ณผ์ •์—์„œ heapify์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(logN)์ด ๋œ๋‹ค. 

 

 

๐Ÿ’ก ํž™ ๋งŒ๋“ค๊ธฐ(build heap)

build heap์€ ํž™์ด ์•„๋‹Œ ๋ฐฐ์—ด์„ ํž™์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด๋‹ค. ์ด๋•Œ heapify๋ฅผ N๋ฒˆ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(NlogN)์ด๋‹ค. 

 

<build heap ๊ณผ์ •>

๊ฐ€์žฅ ๋ง๋‹จ์˜ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ถ€ํ„ฐ ์œ„์—์„œ ์•„๋ž˜๋กœ heapify๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. 

 

 

 

๐Ÿ’ก ํž™ ์ •๋ ฌ(heap sort)

ํž™ ์ •๋ ฌ์€ ์ถ”๊ฐ€์ ์ธ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์‹œ๊ฐ„ ๋ณต์žก๋„ O(NlogN)์— ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค. 

  • ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ -> ์ตœ๋Œ€ ํž™ ์‚ฌ์šฉ
  • ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ -> ์ตœ์†Œ ํž™ ์‚ฌ์šฉ

ํž™ ์ •๋ ฌ์€ ์ „์ฒด ์ž๋ฃŒ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ€์žฅ ํฐ ๊ฐ’ ๋ช‡ ๊ฐœ๋งŒ ํ•„์š”ํ•  ๋•Œ ๊ฐ€์žฅ ์œ ์šฉํ•˜๋‹ค. ๋งŒ์•ฝ 10๊ฐœ ์›์†Œ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’ 3๊ฐœ๋งŒ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด, ์ตœ๋Œ€ ํž™์„ ๊ตฌ์„ฑํ•œ ๋‹ค์Œ ๊ฐ€์žฅ ํฐ ๊ฐ’(๋ฃจํŠธ ๋…ธ๋“œ)์„ 3๋ฒˆ ์‚ญ์ œํ•˜๋ฉฐ ๊ฐ’์„ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค. 

 

<ํž™ ์ •๋ ฌ ๊ณผ์ •>

  1. ์ •๋ ฌํ•  N๊ฐœ์˜ ์›์†Œ๋กœ ์ตœ๋Œ€ ํž™ ๊ตฌ์„ฑ
  2. ์ตœ๋Œ€ ํž™์˜ ๋ฃจํŠธ ๋…ธ๋“œ(๊ฐ€์žฅ ํฐ ์›์†Œ)์™€ ๋งˆ์ง€๋ง‰ ์›์†Œ ์œ„์น˜ ๊ตํ™˜
  3. ์ƒˆ ๋ฃจํŠธ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์ตœ๋Œ€ ํž™ ๊ตฌ์„ฑ
  4. ์›์†Œ ๊ฐœ์ˆ˜๋งŒํผ 2์™€ 3์„ ๋ฐ˜๋ณต ์ˆ˜ํ–‰

๊ณผ์ • 1์€ ์•ž์—์„œ ์‚ดํŽด๋ณธ build heap ๊ณผ์ •์œผ๋กœ O(NlogN)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. 

๊ณผ์ • 2์™€ 3์€ ์ตœ๋Œ€ ํž™์—์„œ ์›์†Œ๋ฅผ ํ•˜๋‚˜ ์‚ญ์ œํ•œ ๋‹ค์Œ heapify๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์œผ๋ฏ€๋กœ O(logN)์ด ๊ฑธ๋ฆฐ๋‹ค. ์ด ๊ณผ์ •์ด ์›์†Œ์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต๋˜๋ฏ€๋กœ ๊ฒฐ๊ตญ O(NlogN)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. 

๋”ฐ๋ผ์„œ ํž™ ์ •๋ ฌ์˜ O(NlogN) + O(NlogN) = O(NlogN)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. 

 

 

 

Reference

 

 

 

728x90