Heap(Max Heap, Min Heap) - accidentlywoo/legacyVue GitHub Wiki
์๋ฃ๊ตฌ์กฐ์ ์ผ์ข ์ผ๋ก Tree์ ํ์์ ํ๊ณ ์์ผ๋ฉฐ, Tree ์ค์์๋ ๋ฐฐ์ด์ ๊ธฐ๋ฐํ Complete Binary Tree์ด๋ค. ๋ฐฐ์ด์ ํธ๋ฆฌ์ ๊ฐ๋ค์ ๋ฃ์ด์ค ๋, 0๋ฒ์งธ๋ ๊ฑด๋๋ฐ๊ณ 1๋ถํฐ ๋ฃจํธ๋ ธ๋๊ฐ ์์๋๋ค. ์ด๋ ๋ ธ๋์ ๊ณ ์ ๋ฒํธ ๊ฐ๊ณผ ๋ฐฐ์ด์ index๋ฅผ ์ผ์น์์ผ ํผ๋์ ์ค์ด๊ธฐ ์ํจ์ด๋ค. ํ์๋ ์ต์ํ(min heap), ์ต๋ํ(max heap) ๋ ์ข ๋ฅ๊ฐ ์๋ค. Max Heap์ด๋, ๊ฐ ๋ ธ๋์ ๊ฐ์ด children์ ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ complete binary tree๋ฅผ ๋งํ๋ค. (min heap์ ๊ทธ ๋ฐ๋์ด๋ค.)
Max heap์์๋ Root node์ ์๋ ๊ฐ์ด ์ ์ผ ํฌ๋ฏ๋ก, ์ต๋๊ฐ์ ์ฐพ๋๋ฐ ์์๋๋ ์ฐ์ฐ์ time complexity์ด O(1)์ด๋ค. ๊ทธ๋ฆฌ๊ณ complete binary tree์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.(์ฆ, random access๊ฐ ๊ฐ๋ฅํ๋ค. Min heap์์๋ ์ต์๊ฐ์ ์ฐพ๋๋ฐ ์์๋๋ ์ฐ์ฐ์ time complexity๊ฐ O(1)์ด๋ค.)
๋ฐฐ์ด์ ์ ์ฅํ์์ ๋์ ์ฅ์ ์ ์ด๋ฆฌ๊ธฐ ์ํด์๋ ์ธ๋ฑ์ค ๊ฐ์ ์์์ผ ํ๋ค. ์ด๋ป๊ฒ ์์๋ผ ์ ์์๊น? complete binary tree๋ ๋ ธ๋์ ๊ฐ์๊ฐ n๊ฐ ์ผ ๋, i๋ฒ์งธ ๋ ธ๋์ ๋ํด์ parent(i) = i/2, left_child(i) = 2i, right_child(i) = 2i+1์ index๊ฐ์ ๊ฐ๋๋ค.
๋ ๊ฐ์ subtree๊ฐ max-heap์ผ ๋ root๋ฅผ ํฌํจํ ์ ์ฒด๊ฐ heap์ด ๋๋๋ก ์์น๋ฅผ ์กฐ์ ํ๋ ๊ณผ์ ์ ๋งํ๋ค. ๋ฃจํธ์์ ์์ ๊ฐ์ด ํ๋ฌ๋ด๋ ค๊ฐ๋ฉด์ ์ฒ๋ฆฌ๋๋ ๋ฐฉ์(float-down)์ผ๋ก ์งํ๋๋ค. Max heapify์ ๊ฒฝ์ฐ, root๊ฐ child๋ณด๋ค ์์ผ๋ฉด ๋ ๊ฐ์ child ์ค ๊ฐ์ด ํฐ ๋ ธ๋์ root๋ฅผ ๊ต์ฑํ ๋ ธ๋๊ฐ ์์ ๋๊น์ง (์ฒ์์ root์๋ ๋ ธ๋๊ฐ leaf node๋ก ๋ ๋๊น์ง) ๋ฐ๋ณตํด์ค๋ค.
์ต๋๊ฐ์ ์ถ์ถํ๋ ๊ธฐ๋ฅ์ด ํ์ํ๋ค. ๋๋ ์ต์๊ฐ์ ์ถ์ถํ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ ํ๋ ค๊ณ ํ๋ค. ๊ทธ๋ด ๋,heap ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ป๊ฒ ํ๋๊ฐ? Max Heap์์ ์ต๋๊ฐ์ ๋ฃจํธ ๋ ธ๋์ด๋ค. ์ต๋๊ฐ์ ์ถ์ถํ๋๋ฐ <Big-O(1)>์ ์๊ฐ์ด ์์๋๋ค. ํ์ง๋ง ์ด๊ฒ ๋ค๊ฐ ์๋๋ผ ๋ฃจํธ ๋ ธ๋๊ฐ ์ฌ๋ผ์ง ๋ค์์๋ ํธ๋ฆฌ๋ Max Heap์ ๋ง์กฑํด์ผ ํ๋ค. ์ฆ, heapify๋ฅผ ํด์ค์ผ ํ๋ ๊ฒ์ด๋ค. ๋ฐฐ์ด์ ๊ธฐ๋ฐํ์๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ์ฌ heap์์ ๊ฐ์ฅ ๋ง์ง๋ง ์์๋ฅผ root์ ์ฎ๊ธฐ๊ณ heapify๋ฅผ ํด์ค๋ค. ์ด ๋ง์ง๋ง ์์๋ฅผ root์ ์ถ๊ฐํ์ฌ heapify ํ๋ ๊ณผ์ ์ <Big-O(log n)>์ด ๋๋ค.
heap์ ์๋ก์ด ๊ฐ์ด ์ฝ์ ๋๋ ๊ฒฝ์ฐ์๋ ์ด๋ค ์กฐ์น๋ฅผ ์ทจํด์ค์ผ heap์ ํํ๊ฐ ์ ์ง๋ ์ ์์๊น?(Max heap์ ๊ฒฝ์ฐ) ์ผ๋จ ์๋ก ๋ค์ด์จ ๋ ธ๋์ ๊ฐ์ด ์ ์ผ ์๋ค๊ณ ๊ฐ์ ํ์. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฐ์ ๋ฐฐ์ด์ ์ ์ผ ๋ง์ง๋ง์ ์ฝ์ ์ ํ ๋ค, ๋ถ๋ชจ ๋ ธ๋์ ๋น๊ตํ๋ฉด์, ์ญ heapify๋ฅผ ํด์ค๋ค.์ฝ์ ๋ ๋ ธ๋์ ๊ฐ์ด ๋ถ๋ชจ ๋ ธ๋์ ๋น๊ตํ์ ๋, ๊ทธ ๊ฐ์ด ๋ ํฌ๋ค๋ฉด, ๋ถ๋ชจ ๋ ธ๋์ swap์ด ์ผ์ด๋ ๊ฒ์ด๊ณ ,๋ ์๋ค๋ฉด, ๊ทธ ์ํ๋ก max heap ์๋ฃ๊ตฌ์กฐ์ ์ฑ์ง์ ๋ง์กฑํ๋ฏ์ค ๋น๊ต๋ฅผ ๋ฉ์ถ๋ค. ์ด๋ ๊ฒ ์ฝ์ ์ด ์ด๋ฃจ์ด์ง๋ค.