ํ์ ์ฐ์ ์์ ํ๋ฅผ ์ํ์ฌ ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ์ด๋ค. ํ์ ๋ํด ์์๋ณด๊ธฐ ์ ์, ์ฐ์ ์์ ํ์ ์ ์์ ํน์ง์ ๋ํด์ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํด๋ดค๋ค.
- ์ฐ์ ์์์ ๊ฐ๋ ์ ํ์ ๋์ ํ ์๋ฃ๊ตฌ์กฐ
- ๋ฐ์ดํฐ๋ค์ด ์ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ฐ์ ์์๊ฐ ๋์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ
- ์๋ฎฌ๋ ์ด์ ์์คํ , ๋คํธ์ํฌ ํธ๋ํฝ ์ ์ด, 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๋ฒ ์ญ์ ํ๋ฉฐ ๊ฐ์ ํ์ธํ๋ฉด ๋๋ค.
<ํ ์ ๋ ฌ ๊ณผ์ >
- ์ ๋ ฌํ N๊ฐ์ ์์๋ก ์ต๋ ํ ๊ตฌ์ฑ
- ์ต๋ ํ์ ๋ฃจํธ ๋ ธ๋(๊ฐ์ฅ ํฐ ์์)์ ๋ง์ง๋ง ์์ ์์น ๊ตํ
- ์ ๋ฃจํธ ๋ ธ๋์ ๋ํด ์ต๋ ํ ๊ตฌ์ฑ
- ์์ ๊ฐ์๋งํผ 2์ 3์ ๋ฐ๋ณต ์ํ
๊ณผ์ 1์ ์์์ ์ดํด๋ณธ build heap ๊ณผ์ ์ผ๋ก O(NlogN)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๊ณผ์ 2์ 3์ ์ต๋ ํ์์ ์์๋ฅผ ํ๋ ์ญ์ ํ ๋ค์ heapify๋ฅผ ์งํํ๋ ๊ฒ๊ณผ ๊ฐ์ผ๋ฏ๋ก O(logN)์ด ๊ฑธ๋ฆฐ๋ค. ์ด ๊ณผ์ ์ด ์์์ ๊ฐ์๋งํผ ๋ฐ๋ณต๋๋ฏ๋ก ๊ฒฐ๊ตญ O(NlogN)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๋ฐ๋ผ์ ํ ์ ๋ ฌ์ O(NlogN) + O(NlogN) = O(NlogN)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
Reference
- https://ko.wikipedia.org/wiki/%ED%9E%99_%EC%A0%95%EB%A0%AC
- https://ratsgo.github.io/data%20structure&algorithm/2017/09/27/heapsort/
- https://velog.io/@emplam27/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-%ED%9E%99Heap
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OS] ํ๋ก์ธ์ค(Process) vs ์ค๋ ๋(Thread) (0) | 2021.10.12 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ(Tree) ์๋ฃ๊ตฌ์กฐ (0) | 2021.10.02 |
[WEB] HTTP ์ํ ์ฝ๋ (0) | 2021.09.28 |
[Network] CIDR(์ฌ์ด๋)์ด๋? CIDR ๊ธฐ๋ณธ ๊ฐ๋ (0) | 2021.04.24 |
[Network] IP์ฃผ์(IPv4)์ Class(ํด๋์ค) (0) | 2021.04.24 |