๐ ์ง๋ฌธ์ WeareSoft๋์ tech-interview๋ฅผ ์ฐธ๊ณ ํ์์ผ๋ฉฐ, ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ์ง์ ์์ฑํ์์ต๋๋ค.
linked list๋ ์๋ก ๋จ์ด์ ธ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํจ์ผ๋ก์จ ์ด์ด์ง ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค. linked list๋ ๊ตฌ์กฐ์ฒด๊ฐ ์ด์ด์ง ํํ๋ก ์กด์ฌํ๋ฉฐ, ์ด ๊ตฌ์กฐ์ฒด๋ฅผ ๋
ธ๋
๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋
ธ๋๋ ๊ฐ์ ๋ด๊ณ ์๋ ๋ฐ์ดํฐ ํ๋
์ ๋ค์ ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋งํฌ ํ๋(ํฌ์ธํฐ)
๋ก ๊ตฌ์ฑ๋๋ค. ์ ํํ๋, ํฌ์ธํฐ๊ฐ ๋ค์ ๊ตฌ์กฐ์ฒด์ ์ฃผ์๋ฅผ ๋ด๊ณ ์๋ค. ๋ณดํต, linked list์ ๋งจ ์ฒซ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ head ํฌ์ธํฐ์ ๋งจ ๋ง์ง๋ง ์์๋ฅผ ๊ฐ๋ฆฌํค๋ tail ํฌ์ธํฐ๋ฅผ ํตํด, ๋ฆฌ์คํธ์ ์์์ ์ ๊ทผํ๊ฑฐ๋ ์์ ํ๋ค. linked list๋ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ, single linked list์ double linked list, circular linked list ๋ฑ์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
Array vs. Linked list
array์์ ์ค๊ฐ์ ๊ฐ์ ์ฝ์ ํ๊ณ ์ถ๋ค๋ฉด, ์ฝ์ ํ ์์น ๋ค์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ ์นธ์ฉ ์ด๋ํด์ผ ํ๋ค๋ ๋จ์ ์ด ์๋ค. ๋ํ, array๊ฐ ํ ๋น๋ฐ์ ๊ณต๊ฐ์ด ๋ถ์กฑํ๋ฐ, ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ชฝ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋น์ด์์ง ์์ผ๋ฉด, ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ ํฐ ํ๋ก ์ด์ฌ๋ฅผ ๊ฐ์ผ ํ๋ค๋ ๋จ์ ๋ ์กด์ฌํ๋ค. linked list๋ ์ฐ์๋ ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ์์ ์ธ๊ธํ๋ array์ ๋จ์ ์ ๋ชจ๋ ํด์ํ ์ ์๋ค. ๊ทธ๋ฌ๋ N๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๊ณ ์ถ์ ๋, ๊ณ์ํด์ ๋ค์ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ ํ์์ผ๋ก ๋ฐ๋ผ๊ฐ์ผ ํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค. ๋ฐ๋ผ์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ์๋ linked list๋ฅผ ์ฌ์ฉํ๊ณ , ์ฐธ์กฐ๊ฐ ๋น๋ฒํ๊ฒ ์ผ์ด๋ ๋๋ array๋ฅผ ์ฐ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
Time Complexity ๋น๊ต
๊ตฌ๋ถ | Array | Linked List |
---|---|---|
insert |
||
delete |
||
find |
์ฝ์ , ์ญ์ , ์ ๊ทผ ๋ฐฉ๋ฒ
- ์ ๊ทผ: ์ํ๋ ์์๊ฐ ๋์ฌ๋๊น์ง ๋งํฌ ํ๋(ํฌ์ธํฐ, ๋ค์ ๋ ธ๋)๋ฅผ ๊ณ์ํด์ ํ์ํ๋ค.
- ์ฝ์ : ์ฝ์ ํ ๋ ธ๋์ next์ ํ์ฌ ์์น์ next๋ฅผ ์ฐ๊ฒฐํ ํ, ํ์ฌ ์์น์ next์ ์ฝ์ ํ ๋ ธ๋์ ์ฃผ์๋ฅผ ๋ฃ์ด์ค๋ค.
- ์ญ์ : ์ญ์ ํ ๋ ธ๋์ next๋ฅผ ์์ ๋ ธ๋์ next์ ์ฐ๊ฒฐํด์ค๋ค.
๊ธฐ๋ณธ์ ์ธ linked list ๊ตฌ์กฐ (=Single linked list ๊ตฌ์กฐ)
#1 Linked list์์ ์ธ๊ธํ ๋ด์ฉ์ ๋ชจ๋ Single linked list์ ํด๋นํ๋ค. Single linked list๋ linked list ์ค์์๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋ก ๋์ด ์์ผ๋ฉฐ, head์์ tail๊น์ง ๋จ๋ฐฉํฅ์ผ๋ก ํฌ์ธํฐ๊ฐ ์ด์ด์ ธ ์์ผ๋ฏ๋ก N ๋ฒ์งธ ๋ ธ๋์์ N-1 ๋ฒ์งธ ๋ ธ๋์ ์ ๊ทผํ ์ ์๋ค. ๋์ , ๋ค์ head๋ก๋ถํฐ N-1 ๋ฒ์ ํ์์ ํตํด ์ ๊ทผํด์ผ ํ๋ค.
#1-1 Single linked list์ ๋จ๋ฐฉํฅ ์ฐ๊ฒฐ์ด๊ธฐ ๋๋ฌธ์ ํ๋ฒ ๋ค์ ๋ ธ๋๋ก ์ด๋ํ๋ฉด, ์ด์ ๋ ธ๋๋ก ๋์๊ฐ๊ธฐ ํ๋ค๋ค๋ ๋จ์ ์ด ์์๋ค. ๊ทธ๋ฌ๋ Double linked list๋ ๋ค์ ๋ ธ๋์ ์ฃผ์๋ฟ๋ง ์๋๋ผ, ์ด์ ๋ ธ๋์ ์ฃผ์๋ ๋ด๊ณ ์๋ค. ํ๋์ ๋ ธ๋๋ ํ๋์ ๋ฐ์ดํฐ์ ๋ ๊ฐ์ ๋งํฌ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ๋งํฌ๋ฅผ prev์ next๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ค์ ๋ ธ๋๋ฅผ ์ฐธ์กฐํ๊ณ ์ถ๋ค๋ฉด next ๋งํฌ๊ฐ ๋ด๊ณ ์๋ ์ฃผ์๋ฅผ ํ์ธํ๋ฉด ๋๊ณ , ์ด์ ์ ๋ ธ๋๋ฅผ ์ฐธ์กฐํ๊ณ ์ถ๋ค๋ฉด prev ๋งํฌ๊ฐ ๊ฐ์ง๋ ์ฃผ์๋ฅผ ํ์ธํ๋ฉด ๋๋ค.
์์ ์ธ๊ธํ๋ linked list ์ ํ๋ค๊ณผ๋ ๋ค๋ฅด๊ฒ, tail์ด ๋ค์ head๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ฐ๋ผ์, tail ๋ ธ๋์ next์๋ NULL์ด ๋ค์ด๊ฐ๋ ๊ฒ ๋์ , head์ ์ฃผ์๊ฐ ๋ค์ด๊ฐ๋ค.
ํด์ ํ ์ด๋ธ์ (Key, Value)๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ํด์ ํ ์ด๋ธ์ด ๋น ๋ฅธ ๊ฒ์์๋๋ฅผ ์ ๊ณตํ๋ ์ด์ ๋ ๋ด๋ถ์ ์ผ๋ก ๋ฐฐ์ด(๋ฒํท)์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ด๋ค. ํด์ ํ ์ด๋ธ์ ๊ฐ๊ฐ์ Key๊ฐ์ ํด์ํจ์๋ฅผ ์ ์ฉํด ๋ฐฐ์ด์ ๊ณ ์ ํ index๋ฅผ ์์ฑํ๊ณ , ์ด index๋ฅผ ํ์ฉํด ๊ฐ์ ์ ์ฅํ๊ฑฐ๋ ๊ฒ์ํ๊ฒ ๋๋ค. ์ฌ๊ธฐ์ ์ค์ ๊ฐ์ด ์ ์ฅ๋๋ ์ฅ์๋ฅผ ๋ฒํท ๋๋ ์ฌ๋กฏ์ด๋ผ๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด, (Key, Value)์
๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ ๋ฐ์ดํฐ ("John Smith", "521-1234")
๋ฅผ ํฌ๊ธฐ๊ฐ 16์ธ ํด์ ํ
์ด๋ธ์ ์ ์ฅํ๋ค๊ณ ํ์. ๊ทธ๋ฌ๋ฉด ๋จผ์ index = hash_function("John Smith") % 16
์ฐ์ฐ์ ํตํด index ๊ฐ์ ๊ณ์ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ array[index] = "521-1234"
๋ก value๋ฅผ ์ ์ฅํ๊ฒ ๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉด Key๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ ํด์ ํจ์๋ฅผ 1๋ฒ๋ง ์ํํ๋ฉด ๋๋ฏ๋ก ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ/์ญ์ /์กฐํํ ์ ์๋ค. ํด์ํ
์ด๋ธ์ ํ๊ท ์๊ฐ๋ณต์ก๋๋ O(1)์ด๋ค.
ํด์(Hash)๊ฐ์ด ์ถฉ๋ํ๋ ๊ฒฝ์ฐ
๋ง์ฝ "John Smith"๋ฅผ ํด์ ํจ์๋ฅผ ๋๋ ค ๋์จ ๊ฐ๊ณผ "Sandra Dee"๋ฅผ ํด์ ํจ์๋ฅผ ๋๋ ค ๋์จ ๊ฐ์ด ๋์ผํ๋ค๋ฉด, ์๋์ ๊ฐ์ด ํด๊ฒฐํ ์ ์๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ 1: Separate Chaining(๋ถ๋ฆฌ ์ฐ๊ฒฐ๋ฒ)
๋์ผํ ๋ฒํท์ ๋ฐ์ดํฐ์ ๋ํด ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํด ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋์ผํ ํด์ ๊ฐ์ ๊ฐ์ง๋ฉด, ๋์ผํ ๋ฒํท ์์ ์ํธ๋ฆฌ๋ฅผ ํ ๋นํด์ค์ผํ๋ค. ์ด ๋, ๋ฒํท ๋ด๋ถ์ ์ํธ๋ฆฌ ๊ฐ๋ค์ linked list ํํ๋ก ์ด์ด์ค๋ค. ์ด๋ฌํ Chaining ๋ฐฉ์์ ํด์ ํ ์ด๋ธ์ ํ์ฅ์ด ํ์์๊ณ ๊ฐ๋จํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ฉฐ, ์์ฝ๊ฒ ์ญ์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ํ์ง๋ง ๋ฐ์ดํฐ์ ์๊ฐ ๋ง์์ง๋ฉด ๋์ผํ ๋ฒํท์ chaining๋๋ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉฐ ๊ทธ์ ๋ฐ๋ผ ์บ์์ ํจ์จ์ฑ์ด ๊ฐ์ํ๋ค๋ ๋จ์ ์ด ์๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ 2: Open Addressing(๊ฐ๋ฐฉ์ฃผ์๋ฒ)
Open Addressing์ด๋ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ Chaining ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ ๋น์ด์๋ ํด์ ํ ์ด๋ธ์ ๊ณต๊ฐ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. Open Addressing์ ๊ตฌํํ๊ธฐ ์ํ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ 3๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํ๋ค.
- Linear Probing: ํ์ฌ์ ๋ฒํท index๋ก๋ถํฐ ๊ณ ์ ํญ ๋งํผ์ฉ ์ด๋ํ์ฌ ์ฐจ๋ก๋๋ก ๊ฒ์ํด ๋น์ด ์๋ ๋ฒํท์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- Quadratic Probing: ํด์์ ์ ์ฅ์์ ํญ์ ์ ๊ณฑ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. ์๋ฅผ ๋ค์ด ์ฒ์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ์๋ 1๋งํผ ์ด๋ํ๊ณ ๊ทธ ๋ค์ ๊ณ์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด 2^2, 3^2 ์นธ์ฉ ์ฎ๊ธฐ๋ ๋ฐฉ์์ด๋ค.
- Double Hashing Probing: ํด์๋ ๊ฐ์ ํ๋ฒ ๋ ํด์ฑํ์ฌ ํด์์ ๊ท์น์ฑ์ ์์ ๋ฒ๋ฆฌ๋ ๋ฐฉ์์ด๋ค. ํด์๋ ๊ฐ์ ํ๋ฒ ๋ ํด์ฑํ์ฌ ์๋ก์ด ์ฃผ์๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค๋ณด๋ค ๋ง์ ์ฐ์ฐ์ ํ๊ฒ ๋๋ค.
์ถฉ๋์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ๋ค์ ๋ฐ์ดํฐ์ ๊ท์น์ฑ(ํด๋ฌ์คํฐ๋ง)์ ๋ฐฉ์งํ๊ธฐ ์ํ ๋ฐฉ์์ด์ง๋ง ๊ณต๊ฐ์ ๋ง์ด ์ฌ์ฉํ๋ค๋ ์น๋ช ์ ์ธ ๋จ์ ์ด ์๋ค. ๋ง์ฝ ํ ์ด๋ธ์ด ๊ฝ ์ฐจ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด ํ ์ด๋ธ์ ํ์ฅํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ด๋ ๋งค์ฐ ์ฌ๊ฐํ ์ฑ๋ฅ์ ์ ํ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ์ด๋ฉด ํ์ ์ ํ์ง ์๋๋ก ํ ์ด๋ธ์ ์ค๊ณํด์ฃผ์ด์ผ ํ๋ค. (ํต๊ณ์ ์ผ๋ก ํด์ ํ ์ด๋ธ์ ๊ณต๊ฐ ์ฌ์ฉ๋ฅ ์ด 70% ~ 80%์ ๋๊ฐ ๋๋ฉด ํด์์ ์ถฉ๋์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ์ฌ ์ฑ๋ฅ์ด ์ ํ๋๊ธฐ ์์ํ๋ค๊ณ ํ๋ค.) ๋ํ ํด์ ํ ์ด๋ธ์์ ์์ฃผ ์ฌ์ฉํ๊ฒ ๋๋ ๋ฐ์ดํฐ๋ฅผ Cache์ ์ ์ฉํ๋ฉด ํจ์จ์ ๋์ผ ์ ์๋ค. ์์ฃผ hitํ๊ฒ ๋๋ ๋ฐ์ดํฐ๋ฅผ ์บ์์์ ๋ฐ๋ก ์ฐพ์์ผ๋ก์จ ํด์ ํ ์ด๋ธ์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
์๊ฐ ๋ณต์ก๋
์ฝ์
, ์ญ์ , ํ์์ ๋ํด ํด์ ์ถฉ๋์ด ์ผ์ด๋์ง ์๋ ๊ฒฝ์ฐ์
์๋ํ๋ฉด ํด์ ์ถฉ๋๋ก ์ธํด์ ํ๋์ ๋ฒํท์ ์ฌ๋ฌ ์ํธ๋ฆฌ๊ฐ ์ฐ๊ฒฐ๋์ด์๋ ๊ฒฝ์ฐ์ ๋ชจ๋ ์ํธ๋ฆฌ๋ฅผ ํ์ํด์ผํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
LIFO (Last In First Out) ๊ตฌ์กฐ์ ์๋ฃํ์ผ๋ก ํ ์ชฝ์ผ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋บ ์ ์๋ค. push
๋ช
๋ น์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ , pop
๋ช
๋ น์ผ๋ก ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋นผ๋ธ๋ค.
stack ์ ๋ธ๋ผ์ฐ์ ์ ๋ค๋ก๊ฐ๊ธฐ ๊ธฐ๋ฅ, ctrl + z (๋๋๋ฆฌ๊ธฐ), ์ง์ญ ๋ณ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ฅํ๋ stack ๋ฉ๋ชจ๋ฆฌ ๋ฑ์ ์ฌ์ฉ๋๋ค. ์ด์ธ์๋ DFS ์๊ณ ๋ฆฌ์ฆ ๋ฑ ๋ค์ํ ๊ณณ์ ์ฌ์ฉ๋๋ ์๋ฃํ์ด๋ค.
stack ์ ๋ฐ์ดํฐ๊ฐ ๊ฝ ์ฐจ์ ๋ ๋ฃ์ ๊ณต๊ฐ์ด ์๋๋ฐ ๋ฐ์ดํฐ๋ฅผ push ํ๋ ๊ฒฝ์ฐ overflow
, ๋ฐ๋๋ก ๋ฐ์ดํฐ๊ฐ ์๋๋ฐ pop ํ๋ ๊ฒฝ์ฐ๋ฅผ underflow
๋ผ๊ณ ํ๋ค.
- [์๋ฃ๊ตฌ์กฐ] ์คํ, ํ๋ ๋ฌด์์ธ๊ฐ? - ๋ง์ด๊ตฌ๋ฏธ
- [์๋ฃ๊ตฌ์กฐ] ์คํ(Stack), ํ(Queue), ๋ฑ(Deque) - Choiiis
FIFO (First In First Out) ๊ตฌ์กฐ์ ์๋ฃํ์ผ๋ก ์ถ๊ตฌ(front)์ ์ ๊ตฌ(rear or back)๊ฐ ๋ฐ๋ก ์กด์ฌํ์ฌ ๋จผ์ ์ ๋ ฅ๋ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋ฐํ๋๋ค.
push
๋ช
๋ น์ผ๋ก rear ์ ์๋ฃ๋ฅผ ๋ฃ๋๋ค. rear += 1 ๋์ด ๋ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌ์ผ์ผ ํ๋ค. pop
๋ช
๋ น์ผ๋ก front ์์ ๋ฐ์ดํฐ๋ฅผ ๋นผ๋ธ๋ค. front += 1 ๋์ด ๋ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌ์ผ์ผ ํ๋ค.
queue ๋ CPU ์ฐ์ฐ์ฒ๋ฆฌ ์์ ๋๊ธฐ, ํ๋ฆฐํฐ ์ธ์, ํ๋ก์ธ์ค ๊ด๋ฆฌ ๋ฑ ๋ค์ด์จ ์์๋ฅผ ๋ณด์ฅํด์ผํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ๋๋ค. ์ด์ธ์๋ BFS ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ ์ฌ์ฉ๋๋ค.
queue ์ rear ๊ฐ ๊ธฐ๋ฆฌํค๋ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋๋ฐ ๋ฐ์ดํฐ๋ฅผ push ํ๋ ๊ฒฝ์ฐ overflow
, ๋ฐ๋๋ก front ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋๋ฐ pop ํ๋ ๊ฒฝ์ฐ๋ฅผ underflow
๋ผ๊ณ ํ๋ค.
- [์๋ฃ๊ตฌ์กฐ] ์คํ, ํ๋ ๋ฌด์์ธ๊ฐ? - ๋ง์ด๊ตฌ๋ฏธ
- [์๋ฃ๊ตฌ์กฐ] ์คํ(Stack), ํ(Queue), ๋ฑ(Deque) - Choiiis
ํฌ๊ธฐ๊ฐ N ์ธ queue ์์ ๋ชจ๋ ์์๋ฅผ ๋ค ์ฑ์ฐ๋ฉด rear ๋ N-1 ์ ๊ฐ๋ฆฌํจ๋ค. ์ด ๋, pop ์ผ๋ก ์ ์ผ ์ฒ์ ์์๋ฅผ ์ ๊ฑฐํ๋ฉด queue ์ ๋จ์ ๊ณต๊ฐ 1๊ฐ๊ฐ ์๊ธด๋ค. ํ์ง๋ง rear ๋ ๋ง์ง๋ง์ ๊ฐ๋ฆฌํค๊ณ ์๊ธฐ ๋๋ฌธ์ ๋์ด์ ์์๋ฅผ ์ถ๊ฐํ ์ ์๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ํ ํํ์ circular queue
๋ฅผ ์ฌ์ฉํ๋ค. queue ์ ๊ฐ์ด FIFO ๊ตฌ์กฐ์ ์๋ฃํ์ด๋ค.
๋์ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฒ์์๋ front ์ rear ๊ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ธฐ ์ํด rear ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฝ์ฐผ๋์ง ๊ฒ์ฌํ๋ค. ๊ฝ์ฐฌ ๊ฒฝ์ฐ๋ rear ๋ค์ ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ front ๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒฝ์ฐ (rear + 1 == front) ์ธ๋ฐ, ๊ฝ์ฐจ์ง ์์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ณ rear ๋ ๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ด๋ํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ธฐ ์ํด front ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋น์๋์ง ๊ฒ์ฌํ๋ค. ๋น ๊ฒฝ์ฐ์๋ ํ์ฌ front ์์น์ rear ์์น๊ฐ ๊ฐ์ ๊ฒฝ์ฐ (rear == front) ์ธ๋ฐ, ๋น์ง ์์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ณ front ๋ ๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ด๋ํ๋ค.
๊ทธ๋ํ๋ ์ ์ ๊ณผ ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ ์ ๊ฐ์ ์ฐ๊ฒฐ๊ด๊ณ๋ ๊ฐ์ ์ผ๋ก ๋ํ๋ธ๋ค.
๊ทธ๋ํ์ ์ข ๋ฅ
๊ฐ์ ์ด ๋ด๊ณ ์๋ ์ ๋ณด์ ์ฐ๊ฒฐ ์ํ์ ๋ฐ๋ผ ๊ทธ๋ํ์ ์ข
๋ฅ๊ฐ ๋๋๋ค. ๋ ์ ์ ์ ์ฐ๊ฒฐํ๋ ๊ฐ์ ์ ๋ฐฉํฅ์ด ์๋ค๋ฉด ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ
, ๋ ์ ์ ์ ์ฐ๊ฒฐํ๋ ๊ฐ์ ์ ๋ฐฉํฅ์ด ์กด์ฌํ๋ฉด ๋ฐฉํฅ ๊ทธ๋ํ
๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ฐฉํฅ ๊ทธ๋ํ๋ ๊ฐ์ ์ ๋ฐฉํฅ์ผ๋ก๋ง ์ด๋ํ ์ ์๋ค. ๋ ์ ์ ์ ์ด๋ํ ๋ ๋น์ฉ์ด ๋ฐ์ํ๋ฉด ๊ฐ์ค์น ๊ทธ๋ํ
๋ก ๋ํ๋ผ ์ ์๋ค. ๋ชจ๋ ์ ์ ์ด ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ, ์์ ๊ทธ๋ํ
๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๊ทธ๋ํ ๊ตฌํ ๋ฐฉ์
์ฒซ ๋ฒ์งธ๋ก ์ธ์ ํ๋ ฌ ๋ฐฉ์์ด ์๋ค. ๋ ธ๋๋ฅผ ์ธ๋ฑ์ค๋ก ์ผ๋ 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค์ด ๊ฐ ๋ ธ๋๊ฐ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์์ผ๋ฉด ๋ฐฐ์ด์ 1์ ๋ฃ์ด์ฃผ๊ณ , ์ฐ๊ฒฐ๋์ง ์์๋ค๋ฉด 0์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๋ ๋
ธ๋์ ์ฐ๊ฒฐ๊ด๊ณ๋ฅผ ์กฐํํ ๋,
๋ ธ๋์ ์๊ฐ ๋ง๊ณ , ๊ฐ์ ์ ์๊ฐ ์ ์ ๊ทธ๋ํ์ ๊ฒฝ์ฐ์, ๊ณต๊ฐ์ ๋ญ๋นํ๊ฒ ๋๋ค.
๋ ๋ฒ์งธ๋ก ์ธ์ ๋ฆฌ์คํธ ๋ฐฉ์์ด ์๋ค. ๊ทธ๋ํ์ ๋ ธ๋๋ค์ ๋ฆฌ์คํธ๋ก ํํํ๋ค. head ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ๋งํฌ์ ๋ฌ์์ฃผ๋ฉด ๋๋ค.
ํ ์ ์ ์ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ค์ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด์
๊ทธ๋ํ ์ฉ์ด
์ ์ (vertice)
: ๋ ธ๋(node)๋ผ๊ณ ๋ ํ๋ฉฐ ์ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค.๊ฐ์ (edge)
: ๋งํฌ(arcs)๋ผ๊ณ ๋ ํ๋ฉฐ ๋ ธ๋๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค.์ธ์ ์ ์ (adjacent vertex)
: ๊ฐ์ ์ ์ํด ์ง์ ์ฐ๊ฒฐ๋ ์ ์ ์ด๋ค.๋จ์ ๊ฒฝ๋ก(simple-path)
: ๊ฒฝ๋ก ์ค ๋ฐ๋ณต๋๋ ์ ์ ์ด ์๋๊ฒ, ๊ฐ์ ๊ฐ์ ์ ์๋๊ฐ์ง ์๋ ๊ฒฝ๋ก์ด๋ค.์ฐจ์(degree)
: ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์์ ํ๋์ ์ ์ ์ ์ธ์ ํ ์ ์ ์ ์์ด๋ค.์ง์ถ ์ฐจ์(out-degree)
: ๋ฐฉํฅ๊ทธ๋ํ์์ ์ฌ์ฉ๋๋ ์ฉ์ด๋ก ํ ๋ ธ๋์์ ์ธ๋ถ๋ก ํฅํ๋ ๊ฐ์ ์ ์๋ฅผ ๋ปํ๋ค.์ง์ ์ฐจ์(in-degree)
: ๋ฐฉํฅ๊ทธ๋ํ์์ ์ฌ์ฉ๋๋ ์ฉ์ด๋ก ์ธ๋ถ ๋ ธ๋์์ ๋ค์ด์ค๋ ๊ฐ์ ์ ์๋ฅผ ๋ปํ๋ค.
tree๋ ๊ทธ๋ํ์ ์ผ์ข ์ผ๋ก, ๋ถ๋ชจ ๋ ธ๋ ๋ฐ์ ์ฌ๋ฌ ์์ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋๊ณ , ์์ ๋ ธ๋ ๊ฐ๊ฐ์ ๋ค์ ์์ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋๋ ์ฌ๊ท์ ํํ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๋ ธ๋๋ค์ ์๋ก ๋ค๋ฅธ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ฉฐ ์ด๋ ๊ฐ ๋ ธ๋๋ ์ฌ์ฌ์ฉ ๋์ง ์๋๋ค. ํธ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ๋๋ค.
- ๋ฐ๋์ ํ๋์ ๋ฃจํธ ๋ ธ๋๋ง์ด ์กด์ฌํ๋ค.
- ๋ชจ๋ ์์ ๋ ธ๋๋ ํ ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ง์ ๊ฐ์ง๋ค.
- ์๋ก ๋ค๋ฅธ ์์์ ๋ ๋ ธ๋์ ๋ํด ๋ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒฝ๋ก๋ ์ ์ผํ๋ค.
- ์ฌ์ดํด์ ๊ฐ์ง๋ ๋ ธ๋ ์งํฉ์ด ์กด์ฌํ์ง ์๋๋ค.
- ๋ ธ๋๊ฐ N๊ฐ์ธ ํธ๋ฆฌ๋ ํญ์ N-1๊ฐ์ ๊ฐ์ ์ ๊ฐ์ง๋ค.
ํธ๋ฆฌ ์ฉ์ด
๋ ธ๋(node)
: ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ์์๋ฃจํธ ๋ ธ๋(root node/root)
: ํธ๋ฆฌ์์ ๋ถ๋ชจ๊ฐ ์๋ ์ต์์ ๋ ธ๋, ํธ๋ฆฌ์ ์์์ ๋ถ๋ชจ ๋ ธ๋(parent node)
: ๋ฃจํธ ๋ ธ๋ ๋ฐฉํฅ์ผ๋ก ์ง์ ์ฐ๊ฒฐ๋ ๋ ธ๋์์ ๋ ธ๋(child node)
: ๋ฃจํธ ๋ ธ๋ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์ง์ ์ฐ๊ฒฐ๋ ๋ ธ๋ํ์ ๋ ธ๋(siblings node)
: ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ๋ ๋ ธ๋๋ค์ ๋ ธ๋(leaf node)/๋จ๋ง ๋ ธ๋(terminal node)
: ์์์ด ์๋ ๋ ธ๋๊ฒฝ๋ก(path)
: ํ ๋ ธ๋์์ ๋ค๋ฅธ ํ ๋ ธ๋์ ์ด๋ฅด๋ ๊ธธ ์ฌ์ด์ ์๋ ๋ ธ๋๋ค์ ์์๊ธธ์ด(length)
: ์ถ๋ฐ ๋ ธ๋์์ ๋์ฐฉ ๋ ธ๋๊น์ง ๊ฑฐ์น๋ ๋ ธ๋์ ๊ฐ์๊น์ด(depth)
: ๋ฃจํธ ๊ฒฝ๋ก์ ๊ธธ์ด๋ ๋ฒจ(level)
: ๋ฃจํธ ๋ ธ๋(level=1)๋ถํฐ ๋ ธ๋๊น์ง ์ฐ๊ฒฐ๋ ๋งํฌ ์์ ํฉ๋์ด(height)
: ๊ฐ์ฅ ๊ธด ๋ฃจํธ ๊ฒฝ๋ก์ ๊ธธ์ด์ฐจ์(degree)
: ๊ฐ ๋ ธ๋์ ์์์ ๊ฐ์ํธ๋ฆฌ์ ์ฐจ์(degree of tree)
: ํธ๋ฆฌ์ ์ต๋ ์ฐจ์ = max[deg1, deg2, ..., degn]ํฌ๊ธฐ(size)
: ๋ ธ๋์ ๊ฐ์๋๋น(width)
: ๊ฐ์ฅ ๋ง์ ๋ ธ๋๋ฅผ ๊ฐ๊ณ ์๋ ๋ ๋ฒจ์ ํฌ๊ธฐ
- [์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ(Tree)๋ - HeeJeong Kwon
- ํธ๋ฆฌ์ ์ข ๋ฅ์ ์ดํด - cjmp1
- [์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ? + ์ด์ง ํธ๋ฆฌ (Binary Tree) - Suyeon's Blog
- ํธ๋ฆฌ(๊ทธ๋ํ) - ๋๋ฌด์ํค
์ด์ง ํธ๋ฆฌ(binary tree)๋ ๊ฐ๊ฐ์ ๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ ํธ๋ฆฌ๋ฅผ ๋งํ๋ค. ์ฆ, ๋ชจ๋ ๋ ธ๋์ ์ฐจ์(degree)๊ฐ 2 ์ดํ์ธ ํธ๋ฆฌ๋ฅผ ๋งํ๋ค. ์ด์ง ํธ๋ฆฌ์ ๋ชจ๋ ์๋ธ ํธ๋ฆฌ๋ค์ ๋ชจ๋ ์ด์ง ํธ๋ฆฌ์ด๋ค.
์ํ(Traversal) ๋ฐฉ๋ฒ
- ์ ์ ์ํ(preorder)
- ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
- ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ์ ์ ์ํํ๋ค.
- ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ์ ์ ์ํํ๋ค.
- ์ค์ ์ํ(inorder)
- ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ์ค์ ์ํํ๋ค.
- ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
- ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ์ค์ ์ํํ๋ค.
- ํ์ ์ํ(postorder)
- ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ํ์ ์ํํ๋ค.
- ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ํ์ ์ํํ๋ค.
- ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
- ๋ ๋ฒจ ์์ ์ํ(level-order)
- ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฎ์ ๋ ๋ฒจ๋ถํฐ ์ฐจ๋ก๋๋ก ์ํํ๋ค. ๋ ๋ฒจ ์์ ์ํ๋ ๋๋น ์ฐ์ ์ํ(breadth-first traversal)๋ผ๊ณ ๋ ํ๋ค.
- ์ด์ง ํธ๋ฆฌ - ์ํค๋ฐฑ๊ณผ
- ์ด์ง ํ์ ํธ๋ฆฌ: ์ด๋ก ๊ณผ ์๊ฐ - ์ค๋๋ MadPlay!
- ํธ๋ฆฌ ์ํ - ์ํค๋ฐฑ๊ณผ
full binary tree๋ ๋จ๋ง ๋ ธ๋๋ค์ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๋ค์ด 2๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ binary tree์ด๋ค.
์์ ์ด์ง ํธ๋ฆฌ(complete binary tree)๋ ๋ง์ง๋ง level์ ์ ์ธํ ๋๋จธ์ง level์ ๋ ธ๋๋ค์ด ๊ฐ๋ ์ฐจ์๊ณ , ๋ง์ง๋ง level์์ ๋ ธ๋๋ ๊ฐ์ฅ ์ผ์ชฝ๋ถํฐ ์ฑ์์ง๋ ํํ์ binary tree์ด๋ค.
์ด์ง ํ์ ํธ๋ฆฌ(binary search tree)๋ ์๋์ ์ฑ์ง์ ๊ฐ๊ณ ์๋ ์ด์ง ํธ๋ฆฌ์ด๋ค.
- ๊ฐ๊ฐ์ ๋ชจ๋ ๋ ธ๋๋ค์ ๊ฐ(key)์ ์ค๋ณต๋ ๊ฐ์ด ์๋๋ค.
- ๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์๋ ๊ทธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ ๊ฐ๋ค์ ์ง๋ ๋ ธ๋๋ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์๋ ๊ทธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฐ ๊ฐ๋ค์ ์ง๋ ๋ ธ๋๋ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ์ข์ฐ ์๋ธํธ๋ฆฌ๋ ๊ฐ๊ฐ์ด ๋ค์ ์ด์ง ํ์ ํธ๋ฆฌ์ฌ์ผ ํ๋ค.
ํ์(Search)
๊ฒ์ํ๊ณ ์ ํ๋ ๊ฐ์ ๋ฃจํธ ๋ ธ๋์ ๋จผ์ ๋น๊ตํ๊ณ , ์ผ์นํ ๊ฒฝ์ฐ ๋ฃจํธ ๋ ธ๋๋ฅผ ๋ฆฌํดํ๋ค.
- ๋ถ์ผ์นํ๊ณ ๊ฒ์ํ๊ณ ์ ํ๋ ๊ฐ์ด ๋ฃจํธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์์ ์ฌ๊ท์ ์ผ๋ก ๊ฒ์ํ๋ค.
- ๋ถ์ผ์นํ๊ณ ๊ฒ์ํ๊ณ ์ ํ๋ ๊ฐ์ด ๋ฃจํธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฐ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์์ ์ฌ๊ท์ ์ผ๋ก ๊ฒ์ํ๋ค.
์ฝ์ (Insert)
์ฝ์ ์ ํ๊ธฐ ์ , ํ์์ ์ํํ๋ค. ํธ๋ฆฌ๋ฅผ ํ์ํ ํ ํค์ ์ผ์นํ๋ ๋ ธ๋๊ฐ ์์ผ๋ฉด ๋ง์ง๋ง ๋ ธ๋์์ ํค์ ๋ ธ๋์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํด์ ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ ์๋ก์ด ๋ ธ๋๋ฅผ ์ฝ์ ํ๋ค.
์ญ์ (Delete)
์ญ์ ํ๋ ค๋ ๋ ธ๋์ ์์ ์์ ๋ฐ๋ผ
- ์์ ๋ ธ๋๊ฐ ์๋ ๋ ธ๋(๋ฆฌํ ๋ ธ๋) ์ญ์ : ํด๋น ๋ ธ๋๋ฅผ ๋จ์ํ ์ญ์ ํ๋ค.
- ์์ ๋ ธ๋๊ฐ 1๊ฐ์ธ ๋ ธ๋ ์ญ์ : ํด๋น ๋ ธ๋๋ฅผ ์ญ์ ํ๊ณ ๊ทธ ์์น์ ํด๋น ๋ ธ๋์ ์์ ๋ ธ๋๋ฅผ ๋์ ํ๋ค.
- ์์ ๋ ธ๋๊ฐ 2๊ฐ์ธ ๋ ธ๋ ์ญ์ : ์ญ์ ํ๊ณ ์ ํ๋ ๋ ธ๋์ ๊ฐ์ ํด๋น ๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ํฐ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๊ฑฐ๋, ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ ๋ค, ํด๋น ๋ ธ๋(์ผ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ฐ์ง๋ ๋ ธ๋ ๋๋ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ์ง๋ ๋ ธ๋)๋ฅผ ์ญ์ ํ๋ค.
์๊ฐ ๋ณต์ก๋
BST์ ํ์, ์ฝ์
, ์ญ์ ์ ๋ณต์ก๋๋ ๋ชจ๋
ํธ๋ฆฌ๊ฐ complete binary tree ๊ฑฐ๋ full binary tree ์ด๋ฉด
์ต๋๊ฐ ๋ฐ ์ต์๊ฐ์ ์ฐพ์๋ด๋ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด ๊ณ ์๋ ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ ์๋ฃ๊ตฌ์กฐ๋ก์ ๋ค์์ ์์ฑ์ ๋ง์กฑํ๋ค.
A๊ฐ B์ ๋ถ๋ชจ ๋ ธ๋์ด๋ฉด, A์ ํค๊ฐ๊ณผ B์ ํค๊ฐ ์ฌ์ด์๋ ๋์๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋ค.
heap์ ์ข ๋ฅ์๋ min heap, max heap์ด ์๋ค.
๊ฐ ๋ ธ๋์ ์์ ๋ ธ๋์ ์ต๋ ๊ฐ์๋ ํ์ ์ข ๋ฅ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ๋ ์์ ๋ ธ๋์ ๊ฐ์๊ฐ ์ต๋ 2๊ฐ์ธ ์ด์ง ํ(binary heap)์ ์ฌ์ฉํ๋ค.
ํ์์๋ ๊ฐ์ฅ ๋์(ํน์ ๊ฐ์ฅ ๋ฎ์) ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ ๋ ธ๋๊ฐ ํญ์ ๋ฃจํธ ๋ ธ๋์ ์ค๊ฒ ๋๋ ํน์ง์ด ์์ผ๋ฉฐ, ์ด๋ฅผ ์์ฉํ์ฌ ์ฐ์ ์์ ํ์ ๊ฐ์ ์ถ์์ ์๋ฃํ์ ๊ตฌํํ ์ ์๋ค.
์ด์ง ํ(binary heap)
์ด์ง ํ์ ๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ง ํน์ง์ ๊ฐ๋๋ค. ํธ๋ฆฌ๋ฅผ T, ์์ ๋ด๋ถ ๋ ธ๋๋ฅผ v๋ผ๊ณ ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฃจํธ ๋
ธ๋๋ฅผ ์ ์ธํ ๊ฐ ๋ด๋ถ ๋
ธ๋๋
key(T.parent(v)) < key(v)
๋๋key(T.parent(v)) > key(v)
์ด๋ค. (์ฆ, ํค ๊ฐ์ ์ค๋ฆ์ฐจ์์ด๊ฑฐ๋ ๋ด๋ฆผ์ฐจ์์ด๋ค.) - ๋ง์ง๋ง ์ผ์ชฝ ๊ฒฐํฉ ๋ ธ๋๋ค์ ๋ ๋ฒจ์ ์ ์ธํ ๋ค๋ฅธ ๋ชจ๋ ๋ ๋ฒจ๋ค์ ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ํ์ฑํ๋ค.
ํ ๋ฆฌ์คํธ(heap list)๋ก ํํํ ๋ i๋ฒ์งธ ๋ ธ๋์ ์ผ์ชฝ ์์ ๋ ธ๋์ ์์น๋ 2i๊ฐ ๋๋ฉฐ, i๋ฒ์งธ ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋์ ์์น๋ 2i+1์ด๊ณ , ๋ํ i๋ฒ์งธ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋์ ์์น๋ i/2๊ฐ ๋๋ค.
์ด์ง ํ์ ์๊ฐ๋ณต์ก๋๋
์ต์ ํ(min heap)์ ๋ถ๋ชจ ๋ ธ๋์ ํค ๊ฐ์ด ์์ ๋ ธ๋์ ํค ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ด์ง ํธ๋ฆฌ์ด๋ค.
์ต๋ ํ(max heap)์ ๋ถ๋ชจ ๋ ธ๋์ ํค ๊ฐ์ด ์์ ๋ ธ๋์ ํค ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์์ ์ด์ง ํธ๋ฆฌ์ด๋ค.
๋ ๋-๋ธ๋ํธ๋ฆฌ์ ์ ์
๋ ๋-๋ธ๋ ํธ๋ฆฌ(Red-Black Tree)๋ ์ด์งํ์ํธ๋ฆฌ(Binary Search Tree)์ ํ ์ข
๋ฅ๋ก, ์ฝ์
(insert), ์ญ์ (delete), ๊ฒ์(retrieval) ์ฐ์ฐ์
๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ๋ค์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
- ๋ชจ๋ ๋ ธ๋๋ ๋นจ๊ฐ์ ํน์ ๊ฒ์์์ด๋ค.
- ๋ฃจํธ ๋ ธ๋๋ ๊ฒ์์์ด๋ค.
NULL
ํน์NIL
๋ก ํ๊ธฐ๋ ๋ฆฌํ๋ ธ๋๋ ๊ฒ์ ์์ด๋ค.- ๋นจ๊ฐ์ ๋ ธ๋์ ์์ ๋ ธ๋๋ ๊ฒ์ ์์ด๋ค. ์ฆ, ๋นจ๊ฐ์ ๋ ธ๋๊ฐ ์ฐ์์ ์ผ๋ก ๋์ฌ ์ ์๋ค.
- ๋ฆฌํ๋ ธ๋์์ ๋ฃจํธ๋ ธ๋๊น์ง ๊ฐ๋ ๊ฒฝ๋ก์์ ๋ง๋๋ ๊ฒ์์ ๋ ธ๋์ ๊ฐ์๋ ๊ฐ๋ค.
๋ ๋-๋ธ๋ํธ๋ฆฌ๊ฐ ๊ท ํ ์กํ ํธ๋ฆฌ์ธ ์ด์
๋ ๋-๋ธ๋ ํธ๋ฆฌ์ 5๋ฒ์งธ ์กฐ๊ฑด ๋๋ฌธ์ธ๋ฐ, ๊ฒ์์ ๋
ธ๋์ ๊ฐ์๊ฐ B์ด๊ณ ๋นจ๊ฐ์ ๋
ธ๋๊ฐ ์ต์๊ฐ ๋๋ ๊ฒฝ์ฐ์ ์ต๋๊ฐ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์. ๋นจ๊ฐ์ ๋
ธ๋๊ฐ ์ต์๊ฐ ๋๋ ค๋ฉด, ๋นจ๊ฐ์ ๋
ธ๋ ์์ฒด๊ฐ ์์ด์ผ ํ๊ณ ์ด ๋
ธ๋์ ๊ฐ์๋ B๊ฐ์ด๋ค. ๋นจ๊ฐ์ ๋
ธ๋๊ฐ ์ต๋๊ฐ ๋๋ ค๋ฉด, ๊ฒ์ -๋นจ๊ฐ-๊ฒ์ -๋นจ๊ฐ-...
์ผ๋ก ๋ฐ๋ณต๋์ด์ผ ํ๋ค. ์ด ๊ฒฝ์ฐ ์ด ๋
ธ๋์ ๊ฐ์๋ 2B์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ต์ ๊ฒฝ๋ก์ ์ต๋ ๊ฒฝ๋ก์ ์ฐจ์ด๋ 2๋ฐฐ๋ณด๋ค ํฌ์ง ์์ผ๋ฏ๋ก ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ๊ท ํ ์กํ ํธ๋ฆฌ๋ผ๊ณ ๋งํ ์ ์๋ค.
๋ ๋-๋ธ๋ ํธ๋ฆฌ์ ์ฐ์ฐ
๋ ๋-๋ธ๋ ํธ๋ฆฌ์ ์ฐ์ฐ์ผ๋ก ๊ฒ์
, ์ฝ์
, ์ ๊ฑฐ
๊ฐ ์๋ค. ์์ธํ ๋ด์ฉ์ ๋ ๋-๋ธ๋ ํธ๋ฆฌ/๋์ - ์ํค๋ฐฑ๊ณผ๋ฅผ ์ฐธ๊ณ !
- ์๊ณ ๋ฆฌ์ฆ) Red-Black Tree - ZeddiOS
- ๊ณ ๊ธ ์ฃผ์ - ์ฝ๋ฉ์ธํฐ๋ทฐ ์์ ๋ถ์
- [๋ ๋-๋ธ๋ ํธ๋ฆฌ - ์ํค๋ฐฑ๊ณผ]
B-ํธ๋ฆฌ์ ์ ์
B-ํธ๋ฆฌ๋ ์ด์ง ํธ๋ฆฌ(Binary Tree)๋ฅผ ํ์ฅํด ๋ชจ๋ ๋ฆฌํ ๋ ธ๋๋ค์ด ๊ฐ์ ๋์ด๋ฅผ ๊ฐ๋๋ก ํ๋ ํธ๋ฆฌ์ด๋ค. ๋ ธ๋ ๋ด์ ์ฌ๋ฌ ๊ฐ์ key๊ฐ ์์ ์ ์์ผ๋ฉฐ, ์ต๋ key์ ๊ฐ์์ ๋ฐ๋ผ 2๊ฐ์ด๋ฉด 2์ฐจ B-ํธ๋ฆฌ, N๊ฐ๋ฉด N์ฐจ B-ํธ๋ฆฌ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
B-ํธ๋ฆฌ๋ ๋ค์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
- ๋ ธ๋์ key์ ๊ฐ์๊ฐ N์ด๋ฉด, ์์ ๋ ธ๋์ ๊ฐ์๋ N+1์ด๋ค.
- ๋ ธ๋ ๋ด์ key๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์๋ค.
- ๋ฃจํธ ๋ ธ๋๋ 2๊ฐ ์ด์์ ์์์ ๊ฐ์ ธ์ผ ํ๋ค.
- ๋ฃจํธ ๋
ธ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋
ธ๋๋ค์ ์ ์ด๋ ์ต๋ M/2๊ฐ์ key๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
- M์ B-ํธ๋ฆฌ์ ์ฐจ์๋ฅผ ๋งํ๋ค.
- ๋ฆฌํ ๋ ธ๋๋ ๋ชจ๋ ๊ฐ์ ๋ ๋ฒจ์ ์์ด์ผ ํ๋ค.
B-ํธ๋ฆฌ์ ์ฐ์ฐ
B-ํธ๋ฆฌ์ ์ฐ์ฐ์ ๊ฒ์
๊ณผ ์ฝ์
, ์ ๊ฑฐ
๊ฐ ์๋ค. ๋ค์ ์ฐ์ฐ์ B-ํธ๋ฆฌ ์ฐ์ฐ์ ์ดํดํ ์ ์๋ ์๋ฃ๋ก ์ด๊ฒ์ ์ฐธ๊ณ !
- B-ํธ๋ฆฌ ์ฐ์ฐ ์๋ฎฌ๋ ์ด์ : B-Tree Algorithm Visualizations
- B-ํธ๋ฆฌ ์ฐ์ฐ ๊ฐ๋ ์ ๋ฆฌ: [์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ฆผ์ผ๋ก ์์๋ณด๋ B-Tree - emplam27.log
B-ํธ๋ฆฌ vs B+ ํธ๋ฆฌ
B+ ํธ๋ฆฌ๋ B-ํธ๋ฆฌ์ ๋น์ทํ์ง๋ง ๋ฆฌํ๋
ธ๋๊ฐ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ํํ๋ฅผ ๋์ด ์ ํ ๊ฒ์์ด ๊ฐ๋ฅํ ํธ๋ฆฌ์ด๋ค. ๋ชจ๋ ๋
ธ๋์ key์ data๊ฐ ์๋ B ํธ๋ฆฌ์๋ ๋ฌ๋ฆฌ B+ ํธ๋ฆฌ๋ ๋ฆฌํ ๋
ธ๋์๋ง data๊ฐ ์กด์ฌํ๋ค. ๋ํ ์ฝ์
๊ณผ ์ ๊ฑฐ
์ฐ์ฐ ๋ชจ๋ ๋ฆฌํ ๋
ธ๋์์๋ง ์ด๋ฃจ์ด์ง๋ค.