6. ์๋ฃ๊ตฌ์กฐ
Linked list
-
Linked list: ์๋ก ๋จ์ด์ ธ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํจ์ผ๋ก์จ ์ด๋ฌ์ง ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ๋ฐ์ดํฐ ํ๋์ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฅดํค๋ ํฌ์ธํฐ๋ถ๋ถ์ผ๋ก ๋ ธ๋๊ฐ ์ด๋ฃจ์ด์ ธ์๋ค.
๊ตฌํ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ, single linked list์ double linked list, circular linked list ๋ฑ์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
-
Array vs Linked list
- Array
- ์ค๊ฐ์ ๊ฐ์ ์ฝ์ ํ๊ณ ์ถ๋ค๋ฉด, ์ฝ์ ํ ์์น ๋ค์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ ์นธ์ฉ ์ด๋ํด์ผ ํ๋ค๋ ๋จ์ ์กด์ฌ
- ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ชฝ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋น์ด์์ง ์์ผ๋ฉด, ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ ํฐ ํ๋ก ์ด์ฌ๋ฅผ ๊ฐ์ผ ํ๋ค๋ ๋จ์ ๋ ์กด์ฌ
- Linked list
- array์ ๋จ์ ์ ๋ชจ๋ ํด์
- N๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๊ณ ์ถ์ ๋, ๊ณ์ํด์ ๋ค์ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ ํ์์ผ๋ก ๋ฐ๋ผ๊ฐ์ผ ํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
- Array
- Linked list: ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ์ ์ฌ์ฉ
- Array: ์ฐธ์กฐ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ์ ์ฌ์ฉ
- ์๊ฐ๋ณต์ก๋ ๋น๊ต
๊ตฌ๋ถ | Array | Linked list |
---|---|---|
insert | ||
delete | ||
find |
-
linked list ์ฝ์ , ์ญ์ , ์ ๊ทผ ๋ฐฉ๋ฒ
- ์ ๊ทผ: ์ํ๋ ์์๊ฐ ๋์ฌ๋๊น์ง ๋งํฌ ํ๋(ํฌ์ธํฐ, ๋ค์ ๋ ธ๋)๋ฅผ ๊ณ์ํด์ ํ์ํ๋ค.
- ์ฝ์ : ์ฝ์ ํ ๋ ธ๋์ next์ ํ์ฌ ์์น์ next๋ฅผ ์ฐ๊ฒฐํ ํ, ํ์ฌ ์์น์ next์ ์ฝ์ ํ ๋ ธ๋์ ์ฃผ์๋ฅผ ๋ฃ์ด์ค๋ค.
- ์ญ์ : ์ญ์ ํ ๋ ธ๋์ next๋ฅผ ์์ ๋ ธ๋์ next์ ์ฐ๊ฒฐํด์ค๋ค.
-
Single linked list
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋ก ๋์ด ์์ผ๋ฉฐ, head์์ tail๊น์ง ๋จ๋ฐฉํฅ์ผ๋ก ํฌ์ธํฐ๊ฐ ์ด์ด์ ธ ์์ผ๋ฏ๋ก N ๋ฒ์งธ ๋
ธ๋์์ N-1 ๋ฒ์งธ ๋
ธ๋์ ์ ๊ทผํ ์ ์๋ค. ๋์ , ๋ค์ head๋ก๋ถํฐ N-1 ๋ฒ์ ํ์์ ํตํด ์ ๊ทผํด์ผ ํ๋ค.
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋ก ๋์ด ์์ผ๋ฉฐ, head์์ tail๊น์ง ๋จ๋ฐฉํฅ์ผ๋ก ํฌ์ธํฐ๊ฐ ์ด์ด์ ธ ์์ผ๋ฏ๋ก N ๋ฒ์งธ ๋
ธ๋์์ N-1 ๋ฒ์งธ ๋
ธ๋์ ์ ๊ทผํ ์ ์๋ค. ๋์ , ๋ค์ head๋ก๋ถํฐ N-1 ๋ฒ์ ํ์์ ํตํด ์ ๊ทผํด์ผ ํ๋ค.
-
Double linked list
- ๋ค์ ๋
ธ๋์ ์ฃผ์๋ฟ๋ง ์๋๋ผ, ์ด์ ๋
ธ๋์ ์ฃผ์๋ ๋ด๊ณ ์๋ค. ํ๋์ ๋
ธ๋๋ ํ๋์ ๋ฐ์ดํฐ์ ๋ ๊ฐ์ ๋งํฌ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ๋งํฌ๋ฅผ prev์ next๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ค์ ๋
ธ๋๋ฅผ ์ฐธ์กฐํ๊ณ ์ถ๋ค๋ฉด next ๋งํฌ๊ฐ ๋ด๊ณ ์๋ ์ฃผ์๋ฅผ ํ์ธํ๋ฉด ๋๊ณ , ์ด์ ์ ๋
ธ๋๋ฅผ ์ฐธ์กฐํ๊ณ ์ถ๋ค๋ฉด prev ๋งํฌ๊ฐ ๊ฐ์ง๋ ์ฃผ์๋ฅผ ํ์ธํ๋ฉด ๋๋ค.
- ๋ค์ ๋
ธ๋์ ์ฃผ์๋ฟ๋ง ์๋๋ผ, ์ด์ ๋
ธ๋์ ์ฃผ์๋ ๋ด๊ณ ์๋ค. ํ๋์ ๋
ธ๋๋ ํ๋์ ๋ฐ์ดํฐ์ ๋ ๊ฐ์ ๋งํฌ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ๋งํฌ๋ฅผ prev์ next๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ค์ ๋
ธ๋๋ฅผ ์ฐธ์กฐํ๊ณ ์ถ๋ค๋ฉด next ๋งํฌ๊ฐ ๋ด๊ณ ์๋ ์ฃผ์๋ฅผ ํ์ธํ๋ฉด ๋๊ณ , ์ด์ ์ ๋
ธ๋๋ฅผ ์ฐธ์กฐํ๊ณ ์ถ๋ค๋ฉด prev ๋งํฌ๊ฐ ๊ฐ์ง๋ ์ฃผ์๋ฅผ ํ์ธํ๋ฉด ๋๋ค.
-
Circular linked list
- tail์ด ๋ค์ head๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ฐ๋ผ์, tail ๋ ธ๋์ next์๋ NULL์ด ๋ค์ด๊ฐ๋ ๊ฒ ๋์ , head์ ์ฃผ์๊ฐ ๋ค์ด๊ฐ๋ค.
Hash table
-
ํด์ ํ ์ด๋ธ: (Key, Value)๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๋น ๋ฅธ ๊ฒ์์๋๋ฅผ ์ ๊ณตํ๋ ์ด์ ๋ ๋ด๋ถ์ ์ผ๋ก ๋ฐฐ์ด(๋ฒํท)์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฐ๊ฐ์ Key๊ฐ์ ํด์ํจ์๋ฅผ ์ ์ฉํด ๋ฐฐ์ด์ ๊ณ ์ ํ index๋ฅผ ์์ฑํ๊ณ , ์ด index๋ฅผ ํ์ฉํด ๊ฐ์ ์ ์ฅํ๊ฑฐ๋ ๊ฒ์ํ๊ฒ ๋๋ค. ์ฌ๊ธฐ์ ์ค์ ๊ฐ์ด ์ ์ฅ๋๋ ์ฅ์๋ฅผ ๋ฒํท ๋๋ ์ฌ๋กฏ์ด๋ผ๊ณ ํ๋ค.
-
ํด์ ๊ฐ์ด ์ถฉ๋ํ๋ ๊ฒฝ์ฐ
๋ง์ฝ "John Smith"๋ฅผ ํด์ ํจ์๋ฅผ ๋๋ ค ๋์จ ๊ฐ๊ณผ "Sandra Dee"๋ฅผ ํด์ ํจ์๋ฅผ ๋๋ ค ๋์จ ๊ฐ์ด ๋์ผํ๋ค๋ฉด, ์๋์ ๊ฐ์ด ํด๊ฒฐํ ์ ์๋ค.-
ํด๊ฒฐ๋ฐฉ๋ฒ 1: Separate Chaining(๋ถ๋ฆฌ ์ฐ๊ฒฐ๋ฒ)
- ๋์ผํ ๋ฒํท์ ๋ฐ์ดํฐ์ ๋ํด ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํด ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋์ผํ ํด์ ๊ฐ์ ๊ฐ์ง๋ฉด, ๋์ผํ ๋ฒํท ์์ ์ํธ๋ฆฌ๋ฅผ ํ ๋นํด์ค์ผํ๋ค.
- ์ฅ์
- Chaining ๋ฐฉ์์ ํด์ ํ ์ด๋ธ์ ํ์ฅ์ด ํ์์๊ณ ๊ฐ๋จํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ฉฐ, ์์ฝ๊ฒ ์ญ์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
- ๋จ์
- ๋ฐ์ดํฐ์ ์๊ฐ ๋ง์์ง๋ฉด ๋์ผํ ๋ฒํท์ chaining๋๋ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉฐ ๊ทธ์ ๋ฐ๋ผ ์บ์์ ํจ์จ์ฑ์ด ๊ฐ์ํ๋ค๋ ๋จ์ ์ด ์๋ค.
-
ํด๊ฒฐ๋ฐฉ๋ฒ 2: Open Addressing(๊ฐ๋ฐฉ์ฃผ์๋ฒ)
- ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ Chaining ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ ๋น์ด์๋ ํด์ ํ
์ด๋ธ์ ๊ณต๊ฐ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. Open Addressing์ ๊ตฌํํ๊ธฐ ์ํ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ 3๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํ๋ค.
- Linear Probing: ํ์ฌ์ ๋ฒํท index๋ก๋ถํฐ ๊ณ ์ ํญ ๋งํผ์ฉ ์ด๋ํ์ฌ ์ฐจ๋ก๋๋ก ๊ฒ์ํด ๋น์ด ์๋ ๋ฒํท์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- Quadratic Probing: ํด์์ ์ ์ฅ์์ ํญ์ ์ ๊ณฑ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. ์๋ฅผ ๋ค์ด ์ฒ์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ์๋ 1๋งํผ ์ด๋ํ๊ณ ๊ทธ ๋ค์ ๊ณ์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด 2^2, 3^2 ์นธ์ฉ ์ฎ๊ธฐ๋ ๋ฐฉ์์ด๋ค.
- Double Hashing Probing: ํด์๋ ๊ฐ์ ํ๋ฒ ๋ ํด์ฑํ์ฌ ํด์์ ๊ท์น์ฑ์ ์์ ๋ฒ๋ฆฌ๋ ๋ฐฉ์์ด๋ค. ํด์๋ ๊ฐ์ ํ๋ฒ ๋ ํด์ฑํ์ฌ ์๋ก์ด ์ฃผ์๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค๋ณด๋ค ๋ง์ ์ฐ์ฐ์ ํ๊ฒ ๋๋ค.
- ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ Chaining ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ ๋น์ด์๋ ํด์ ํ
์ด๋ธ์ ๊ณต๊ฐ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. Open Addressing์ ๊ตฌํํ๊ธฐ ์ํ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ 3๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํ๋ค.
-
์ถฉ๋ ๋ฐฉ์ง ๋ฐฉ๋ฒ์ ๋ฐ์ดํฐ ํด๋ฌ์คํฐ๋ง์ ์ค์ด์ง๋ง ๊ณต๊ฐ์ ๋ง์ด ์ฌ์ฉํจ
-
ํด์ ํ ์ด๋ธ์ด 70~80% ์ด์ ์ฐจ๋ฉด ์ถฉ๋์ด ๋ง์์ ธ ์ฑ๋ฅ์ด ์ ํ๋จ
-
ํ ์ด๋ธ ํ์ฅ์ ์ฑ๋ฅ์ ํฌ๊ฒ ๋จ์ด๋จ๋ฆฌ๋ฏ๋ก ๊ฐ๊ธ์ ํผํด์ผ ํจ
-
์์ฃผ ์ฐ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ์ฅํ๋ฉด ์ฑ๋ฅ ํฅ์ ๊ฐ๋ฅ
-
Stack
-
์คํ: LIFO (Last In First Out)ย ๊ตฌ์กฐ์ ์๋ฃํ์ผ๋ก ํ ์ชฝ์ผ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋บ ์ ์๋ค.ย
push
ย ๋ช ๋ น์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ,ยpop
ย ๋ช ๋ น์ผ๋ก ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋นผ๋ธ๋ค. -
๋ธ๋ผ์ฐ์ ์ ๋ค๋ก๊ฐ๊ธฐ ๊ธฐ๋ฅ, ctrl + z (๋๋๋ฆฌ๊ธฐ), ์ง์ญ ๋ณ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ฅํ๋ stack ๋ฉ๋ชจ๋ฆฌ ๋ฑ์ ์ฌ์ฉ๋๋ค. ์ด์ธ์๋ DFS ์๊ณ ๋ฆฌ์ฆ ๋ฑ ๋ค์ํ ๊ณณ์ ์ฌ์ฉ๋๋ ์๋ฃํ์ด๋ค.
-
๋ ๋ฃ์ ๊ณต๊ฐ์ด ์๋๋ฐ ๋ฐ์ดํฐ๋ฅผ push ํ๋ ๊ฒฝ์ฐย
overflow
, ๋ฐ๋๋ก ๋ฐ์ดํฐ๊ฐ ์๋๋ฐ pop ํ๋ ๊ฒฝ์ฐ๋ฅผยunderflow
ย ๋ผ๊ณ ํ๋ค.
Queue
-
ํ: FIFO (First In First Out)ย ๊ตฌ์กฐ์ ์๋ฃํ์ผ๋ก ์ถ๊ตฌ(front)์ ์ ๊ตฌ(rear or back)๊ฐ ๋ฐ๋ก ์กด์ฌํ์ฌ ๋จผ์ ์ ๋ ฅ๋ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋ฐํ๋๋ค.
-
push
ย ๋ช ๋ น์ผ๋ก rear ์ ์๋ฃ๋ฅผ ๋ฃ๋๋ค. rear += 1 ๋์ด ๋ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌ์ผ์ผ ํ๋ค.ยpop
ย ๋ช ๋ น์ผ๋ก front ์์ ๋ฐ์ดํฐ๋ฅผ ๋นผ๋ธ๋ค. front += 1 ๋์ด ๋ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌ์ผ์ผ ํ๋ค. -
CPU ์ฐ์ฐ์ฒ๋ฆฌ ์์ ๋๊ธฐ, ํ๋ฆฐํฐ ์ธ์, ํ๋ก์ธ์ค ๊ด๋ฆฌ ๋ฑ ๋ค์ด์จ ์์๋ฅผ ๋ณด์ฅํด์ผํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ๋๋ค. ์ด์ธ์๋ BFS ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ ์ฌ์ฉ๋๋ค.
-
rear ๊ฐ ๊ธฐ๋ฆฌํค๋ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋๋ฐ ๋ฐ์ดํฐ๋ฅผ push ํ๋ ๊ฒฝ์ฐย
overflow
, ๋ฐ๋๋ก front ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋๋ฐ pop ํ๋ ๊ฒฝ์ฐ๋ฅผยunderflow
ย ๋ผ๊ณ ํ๋ค.
Circular queue
- ์ผ๋ฐ Queue๋ ๊ฝ ์ฐจ๋ฉด rear๊ฐ ๋ง์ง๋ง(N-1)์ ๊ฐ๋ฆฌ์ผ ๋ ์ด์ ์ถ๊ฐํ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ํ ํ๋ฅผ ์ฌ์ฉํ๋ค.
- ์ฒ์์๋ front ์ rear ๊ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ธฐ ์ํด rear ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฝ์ฐผ๋์ง ๊ฒ์ฌํ๋ค. ๊ฝ์ฐฌ ๊ฒฝ์ฐ๋ rear ๋ค์ ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ front ๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒฝ์ฐ (rear + 1 == front) ์ธ๋ฐ, ๊ฝ์ฐจ์ง ์์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ณ rear ๋ ๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ด๋ํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ธฐ ์ํด front ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋น์๋์ง ๊ฒ์ฌํ๋ค. ๋น ๊ฒฝ์ฐ์๋ ํ์ฌ front ์์น์ rear ์์น๊ฐ ๊ฐ์ ๊ฒฝ์ฐ (rear == front) ์ธ๋ฐ, ๋น์ง ์์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ณ front ๋ ๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ด๋ํ๋ค.
Graph
- ๊ทธ๋ํ ๊ตฌํ ๋ฐฉ์
-
์ธ์ ํ๋ ฌ: ๋ ธ๋๋ฅผ ์ธ๋ฑ์ค๋ก ์ผ๋ 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค์ด ๊ฐ ๋ ธ๋๊ฐ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์์ผ๋ฉด ๋ฐฐ์ด์ 1์ ๋ฃ์ด์ฃผ๊ณ , ์ฐ๊ฒฐ๋์ง ์์๋ค๋ฉด 0์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๋ ๋ ธ๋์ ์ฐ๊ฒฐ๊ด๊ณ๋ฅผ ์กฐํํ ๋,ย
ย ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ์ ์ ์ ๋ํด, ๊ฐ์ ์ ๋ณด๋ฅผ ์ ๋ ฅํด์ผํ๋ฏ๋ก ์ด๊ธฐํ์ย ย ์๊ฐ์ด ์์๋๋ค.
๋ ธ๋์ ์๊ฐ ๋ง๊ณ , ๊ฐ์ ์ ์๊ฐ ์ ์ ๊ทธ๋ํ์ ๊ฒฝ์ฐ์, ๊ณต๊ฐ์ ๋ญ๋นํ๊ฒ ๋๋ค.
-
์ธ์ ๋ฆฌ์คํธ: ๊ทธ๋ํ์ ๋ ธ๋๋ค์ ๋ฆฌ์คํธ๋ก ํํํ๋ค. head ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ๋งํฌ์ ๋ฌ์์ฃผ๋ฉด ๋๋ค.
- ํ ์ ์ ์ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ค์ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด์ย
ย ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.(M์ ๊ฐ์ ์ ์) ๊ฐ์ ์ ๋ณด๋ง ์ ์งํ๋ค. - ๊ณต๊ฐ ๋ญ๋น๊ฐ ์ ์ผ๋ ๋ ์ ์ ์ด ์ฐ๊ฒฐ๋์๋์ง ํ์ธํ๊ธฐ ์ํด์ย
์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฉฐ, ๊ตฌํ์ด ๋น๊ต์ ์ด๋ ต๋ค.
- ํ ์ ์ ์ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ค์ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด์ย
-
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)
: ๊ฐ์ฅ ๋ง์ ๋ ธ๋๋ฅผ ๊ฐ๊ณ ์๋ ๋ ๋ฒจ์ ํฌ๊ธฐ
Binary tree
-
๊ฐ๊ฐ์ ๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ ํธ๋ฆฌ๋ฅผ ๋งํ๋ค. ์ฆ, ๋ชจ๋ ๋ ธ๋์ ์ฐจ์(degree)๊ฐ 2 ์ดํ์ธ ํธ๋ฆฌ๋ฅผ ๋งํ๋ค. ์ด์ง ํธ๋ฆฌ์ ๋ชจ๋ ์๋ธ ํธ๋ฆฌ๋ค์ ๋ชจ๋ ์ด์ง ํธ๋ฆฌ์ด๋ค.
-
์ํ ๋ฐฉ๋ฒ
-
- ์ ์ ์ํ(preorder)
- ์์: ๋ฃจํธ โ ์ผ์ชฝ โ ์ค๋ฅธ์ชฝ
- ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
- ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ์ ์ ์ํํ๋ค.
- ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ์ ์ ์ํํ๋ค.
- ์ค์ ์ํ(inorder)
- ์์: ์ผ์ชฝ โ ๋ฃจํธ โ ์ค๋ฅธ์ชฝ
- ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ์ค์ ์ํํ๋ค.
- ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
- ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ์ค์ ์ํํ๋ค.
- ํ์ ์ํ(postorder)
- ์์: ์ผ์ชฝ โ ์ค๋ฅธ์ชฝ โ ๋ฃจํธ
- ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ํ์ ์ํํ๋ค.
- ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ํ์ ์ํํ๋ค.
- ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
- ๋ ๋ฒจ ์์ ์ํ(level-order)
- ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฎ์ ๋ ๋ฒจ๋ถํฐ ์ฐจ๋ก๋๋ก ์ํํ๋ค. ๋ ๋ฒจ ์์ ์ํ๋ ๋๋น ์ฐ์ ์ํ(breadth-first traversal)๋ผ๊ณ ๋ ํ๋ค.
- ์ ์ ์ํ(preorder)
์์ ์ด์งํธ๋ฆฌ
- ๋ง์ง๋ง level์ ์ ์ธํ ๋๋จธ์ง level์ ๋ ธ๋๋ค์ด ๊ฐ๋ ์ฐจ์๊ณ , ๋ง์ง๋ง level์์ ๋ ธ๋๋ ๊ฐ์ฅ ์ผ์ชฝ๋ถํฐ ์ฑ์์ง๋ ํํ์ binary tree์ด๋ค.
Binary Search Tree
-
BST: ์๋์ ์ฑ์ง์ ๊ฐ์ง๊ณ ์๋ ์ด์งํธ๋ฆฌ์ด๋ค.
- ๊ฐ๊ฐ์ ๋ชจ๋ ๋ ธ๋๋ค์ ๊ฐ(key)์ ์ค๋ณต๋ ๊ฐ์ด ์๋๋ค.
- ๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์๋ ๊ทธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ ๊ฐ๋ค์ ์ง๋ ๋ ธ๋๋ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์๋ ๊ทธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฐ ๊ฐ๋ค์ ์ง๋ ๋ ธ๋๋ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ์ข์ฐ ์๋ธํธ๋ฆฌ๋ ๊ฐ๊ฐ์ด ๋ค์ ์ด์ง ํ์ ํธ๋ฆฌ์ฌ์ผ ํ๋ค.
-
ํ์
- ๊ฒ์ํ๊ณ ์ ํ๋ ๊ฐ์ ๋ฃจํธ ๋
ธ๋์ ๋จผ์ ๋น๊ตํ๊ณ , ์ผ์นํ ๊ฒฝ์ฐ ๋ฃจํธ ๋
ธ๋๋ฅผ ๋ฆฌํดํ๋ค.
- ๋ถ์ผ์นํ๊ณ ๊ฒ์ํ๊ณ ์ ํ๋ ๊ฐ์ด ๋ฃจํธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์์ ์ฌ๊ท์ ์ผ๋ก ๊ฒ์ํ๋ค.
- ๋ถ์ผ์นํ๊ณ ๊ฒ์ํ๊ณ ์ ํ๋ ๊ฐ์ด ๋ฃจํธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฐ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์์ ์ฌ๊ท์ ์ผ๋ก ๊ฒ์ํ๋ค.
- ๊ฒ์ํ๊ณ ์ ํ๋ ๊ฐ์ ๋ฃจํธ ๋
ธ๋์ ๋จผ์ ๋น๊ตํ๊ณ , ์ผ์นํ ๊ฒฝ์ฐ ๋ฃจํธ ๋
ธ๋๋ฅผ ๋ฆฌํดํ๋ค.
-
์ฝ์
- ์ฝ์ ์ ํ๊ธฐ ์ , ํ์์ ์ํํ๋ค. ํธ๋ฆฌ๋ฅผ ํ์ํ ํ ํค์ ์ผ์นํ๋ ๋ ธ๋๊ฐ ์์ผ๋ฉด ๋ง์ง๋ง ๋ ธ๋์์ ํค์ ๋ ธ๋์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํด์ ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ ์๋ก์ด ๋ ธ๋๋ฅผ ์ฝ์ ํ๋ค.
-
์ญ์
- ์ญ์ ํ๋ ค๋ ๋
ธ๋์ ์์ ์์ ๋ฐ๋ผ
- ์์ ๋ ธ๋๊ฐ ์๋ ๋ ธ๋(๋ฆฌํ ๋ ธ๋) ์ญ์ : ํด๋น ๋ ธ๋๋ฅผ ๋จ์ํ ์ญ์ ํ๋ค.
- ์์ ๋ ธ๋๊ฐ 1๊ฐ์ธ ๋ ธ๋ ์ญ์ : ํด๋น ๋ ธ๋๋ฅผ ์ญ์ ํ๊ณ ๊ทธ ์์น์ ํด๋น ๋ ธ๋์ ์์ ๋ ธ๋๋ฅผ ๋์ ํ๋ค.
- ์์ ๋ ธ๋๊ฐ 2๊ฐ์ธ ๋ ธ๋ ์ญ์ : ์ญ์ ํ๊ณ ์ ํ๋ ๋ ธ๋์ ๊ฐ์ ํด๋น ๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ํฐ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๊ฑฐ๋, ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ ๋ค, ํด๋น ๋ ธ๋(์ผ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ฐ์ง๋ ๋ ธ๋ ๋๋ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ์ง๋ ๋ ธ๋)๋ฅผ ์ญ์ ํ๋ค.
- ์ญ์ ํ๋ ค๋ ๋
ธ๋์ ์์ ์์ ๋ฐ๋ผ
-
์๊ฐ ๋ณต์ก๋
- BST์ ํ์, ์ฝ์ , ์ญ์ ์ ๋ณต์ก๋๋ ๋ชจ๋ย O(h)์ด๋ค. (h๋ BST์ ๋์ด) BST๋ ํ๊ท ์๊ฐ ๋ณต์ก๋๊ฐย O(log2โกn)์ด์ง๋ง ์ต์ ์ ๊ฒฝ์ฐย O(n)์ด๋ค.(ํ์ชฝ์ ์น์ฐ์น ํธ๋ฆฌ์ธ ๊ฒฝ์ฐ)
Heap(binary heap)
-
์ต๋๊ฐ ๋ฐ ์ต์๊ฐ์ ์ฐพ์๋ด๋ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด ๊ณ ์๋ ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- A๊ฐ B์ ๋ถ๋ชจ ๋
ธ๋์ด๋ฉด, A์ ํค๊ฐ๊ณผ B์ ํค๊ฐ ์ฌ์ด์๋ ๋์๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋ค.
- heap ์ข ๋ฅ์๋ min heap, max heap์ด ์กด์ฌํ๋ค.
- ๊ฐ์ฅ ๋์(ํน์ ๊ฐ์ฅ ๋ฎ์) ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ ๋ ธ๋๊ฐ ํญ์ ๋ฃจํธ ๋ ธ๋์ ์ค๊ฒ ๋๋ ํน์ง์ด ์์ผ๋ฉฐ, ์ด๋ฅผ ์์ฉํ์ฌ ์ฐ์ ์์ ํ์ ๊ฐ์ ์ถ์์ ์๋ฃํ์ ๊ตฌํํ ์ ์๋ค.
- A๊ฐ B์ ๋ถ๋ชจ ๋
ธ๋์ด๋ฉด, A์ ํค๊ฐ๊ณผ B์ ํค๊ฐ ์ฌ์ด์๋ ๋์๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋ค.
-
์ด์ง ํ
- ํธ๋ฆฌ๋ฅผ T, ์์ ๋ด๋ถ ๋
ธ๋๋ฅผ v๋ผ๊ณ ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฃจํธ ๋
ธ๋๋ฅผ ์ ์ธํ ๊ฐ ๋ด๋ถ ๋
ธ๋๋ย
key(T.parent(v)) < key(v)
ย ๋๋ยkey(T.parent(v)) > key(v)
์ด๋ค. (์ฆ, ํค ๊ฐ์ ์ค๋ฆ์ฐจ์์ด๊ฑฐ๋ ๋ด๋ฆผ์ฐจ์์ด๋ค.) - ๋ง์ง๋ง ์ผ์ชฝ ๊ฒฐํฉ ๋ ธ๋๋ค์ ๋ ๋ฒจ์ ์ ์ธํ ๋ค๋ฅธ ๋ชจ๋ ๋ ๋ฒจ๋ค์ ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ํ์ฑํ๋ค.
- ๋ฃจํธ ๋
ธ๋๋ฅผ ์ ์ธํ ๊ฐ ๋ด๋ถ ๋
ธ๋๋ย
- ํธ๋ฆฌ๋ฅผ T, ์์ ๋ด๋ถ ๋
ธ๋๋ฅผ v๋ผ๊ณ ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
-
ํ ๋ฆฌ์คํธ(heap list)๋ก ํํํ ๋ i๋ฒ์งธ ๋ ธ๋์ ์ผ์ชฝ ์์ ๋ ธ๋์ ์์น๋ 2i๊ฐ ๋๋ฉฐ, i๋ฒ์งธ ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋์ ์์น๋ 2i+1์ด๊ณ , ๋ํ i๋ฒ์งธ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋์ ์์น๋ i/2๊ฐ ๋๋ค.
-
์ด์ง ํ์ ์๊ฐ๋ณต์ก๋๋ย
์ด๋ค.
min heap
- ์ต์ ํ(min heap)์ ๋ถ๋ชจ ๋ ธ๋์ ํค ๊ฐ์ด ์์ ๋ ธ๋์ ํค ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ด์ง ํธ๋ฆฌ์ด๋ค.
Max heap
- ์ต๋ ํ(max heap)์ ๋ถ๋ชจ ๋ ธ๋์ ํค ๊ฐ์ด ์์ ๋ ธ๋์ ํค ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์์ ์ด์ง ํธ๋ฆฌ์ด๋ค.
B Tree
-
์ด์ง ํธ๋ฆฌ(Binary Tree)๋ฅผ ํ์ฅํด ๋ชจ๋ ๋ฆฌํ ๋ ธ๋๋ค์ด ๊ฐ์ ๋์ด๋ฅผ ๊ฐ๋๋ก ํ๋ ํธ๋ฆฌ์ด๋ค. ๋ ธ๋ ๋ด์ ์ฌ๋ฌ ๊ฐ์ key๊ฐ ์์ ์ ์์ผ๋ฉฐ, ์ต๋ key์ ๊ฐ์์ ๋ฐ๋ผ 2๊ฐ์ด๋ฉด 2์ฐจ B-ํธ๋ฆฌ, N๊ฐ๋ฉด N์ฐจ B-ํธ๋ฆฌ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
-
B-ํธ๋ฆฌ๋ย ๋ค์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
- ๋ ธ๋์ key์ ๊ฐ์๊ฐ N์ด๋ฉด, ์์ ๋ ธ๋์ ๊ฐ์๋ N+1์ด๋ค.
- ๋ ธ๋ ๋ด์ key๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์๋ค.
- ๋ฃจํธ ๋ ธ๋๋ 2๊ฐ ์ด์์ ์์์ ๊ฐ์ ธ์ผ ํ๋ค.
- ๋ฃจํธ ๋
ธ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋
ธ๋๋ค์ ์ ์ด๋ ์ต๋ M/2๊ฐ์ key๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
- M์ B-ํธ๋ฆฌ์ ์ฐจ์๋ฅผ ๋งํ๋ค.
- ๋ฆฌํ ๋ ธ๋๋ ๋ชจ๋ ๊ฐ์ ๋ ๋ฒจ์ ์์ด์ผ ํ๋ค.
-
B+ ํธ๋ฆฌ: B-ํธ๋ฆฌ์ ๋น์ทํ์ง๋ง ๋ฆฌํ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ํํ๋ฅผ ๋์ด ์ ํ ๊ฒ์์ด ๊ฐ๋ฅํ ํธ๋ฆฌ์ด๋ค. ๋ชจ๋ ๋ ธ๋์ key์ data๊ฐ ์๋ B ํธ๋ฆฌ์๋ ๋ฌ๋ฆฌ B+ ํธ๋ฆฌ๋ ๋ฆฌํ ๋ ธ๋์๋ง data๊ฐ ์กด์ฌํ๋ค. ๋ํย
์ฝ์
๊ณผย์ ๊ฑฐ
ย ์ฐ์ฐ ๋ชจ๋ ๋ฆฌํ ๋ ธ๋์์๋ง ์ด๋ฃจ์ด์ง๋ค.