๐ก ๋ณธ ๊ธ์ ๋ฉด์ ์ ์ํ CS ์ ๊ณต์ง์ ๋ ธํธ ๋์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ์์ต๋๋ค.
5.1 ์ ํ ์๋ฃ๊ตฌ์กฐ
5.2.1 ์ฐ๊ฒฐ ๋ฆฌ์คํธ
intro
- ์ ํ = linear = ์ ํ 1:1 ์ฐ๊ฒฐ ํํ
- ๋น์ ํ = nonlinear = ์ ํ ๅค:ๅค ์ฐ๊ฒฐ ํํ
๐ ์ ํ ์๋ฃ๊ตฌ์กฐ๋ ์์๊ฐ ์ผ๋ ฌ๋ก ๋์ด๋์ด ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
ํ๋์ ์๋ฃ ๋ค์ ํ๋์ ์๋ฃ๊ฐ ์กด์ฌํ๋ค. (๋น์ ํ์ ํ๋์ ์๋ฃ ๋ค์ ์ฌ๋ฌ๊ฐ์ ์๋ฃ๊ฐ ์กด์ฌํ ์ ์์)
์ ํ ๊ตฌ์กฐ์ ๋ฆฌ์คํธ๋ ์ ํ ๋ฆฌ์คํธ(linear list)์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ(linked list)๋ก ๋๋๋ค.
์ฐ๊ฒฐ ๋ฆฌ์คํธ - Linked List
๋ฐ์ดํฐ๋ฅผ ๊ฐ์ผ ๋ ธ๋๋ฅผ ํฌ์ธํฐ๋ก ์ฐ๊ฒฐํด์ ๊ณต๊ฐ์ ์ธ ํจ์จ์ฑ์ ๊ทน๋ํ์ํจ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
์ฆ, ๊ฐ๊ฐ์ ๋ ธ๋๊ฐ ๋ฐ์ดํฐ์ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ํ ์ค๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๋ฐฉ์์ด๋ค.
์ด๋, ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ ๋ค์ ๋ ธ๋์ ์ฃผ์๋ฅผ ๊ฐ์ผ๋ก ๊ฐ์ง๊ณ ์๋ค.
prev ํฌ์ธํฐ์ next ํฌ์ธํฐ๋ก ์๊ณผ ๋ค์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ค.
- ์ฒซ๋ฒ์งธ ๋
ธ๋๋ฅผ
head
, ๋ง์ง๋ง ๋ ธ๋๋ฅผtail
์ด๋ผ๊ณ ํ๋ค. - ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐ์์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋๋ค.
- ์์ฐจ์ ์ผ๋ก ์ ๊ทผํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์์๋ ๋ถ๋ฆฌํ๋, ์ฝ์ · ์ญ์ ์๋ ์ฉ์ดํ๋ค.
- Tree ๊ตฌ์กฐ์ ๊ทผ๊ฐ์ด ๋๋ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, Tree์์ ์ฌ์ฉ๋์์ ๋ ๊ทธ ์ ์ฉ์ฑ์ด ๋๋ฌ๋๋ค.
์ข ๋ฅ
1) ์ฑ๊ธ ์ฐ๊ฒฐ ๋ฆฌ์คํธ - Singly Linked List (=๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ)
- ๋ค์ ๋ ธ๋์ ๋ํ ํฌ์ธํฐ(next ํฌ์ธํฐ)๋ง ๊ฐ์ง๊ณ ์๋ค.
2) ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ - Doubly Linked List
- ๋ค์ ๋ ธ๋(next ํฌ์ธํฐ), ์ด์ ๋ ธ๋(prev ํฌ์ธํฐ)์ ๋ํ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ์ · ํ๋ก ํ์์ด ๊ฐ๋ฅํ๋ค.
- ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์๋ ์ต์ ์ ๊ฒฝ์ฐ n๋ฒ์ ํ์์ ํด์ผํ๋ค. ๋ฐ๋ฉด ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์๋ ์ป๊ณ ์ ํ๋ ๋ฐ์ดํฐ์ ์์น๊ฐ tail์ ๊ฐ๊น์ฐ๋ฉด tail์์๋ถํฐ ์ญ๋ฐฉํฅ์ผ๋ก ํ์์ด ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ํ์ ์๊ฐ ์ ์ฝ์ด ๊ฐ๋ฅํ๋ค.
3) ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ - Circular Linked List
- ์ฑ๊ธ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ฐ์ง๋ง, ๋ง์ง๋ง ๋
ธ๋์ next ํฌ์ธํฐ๊ฐ null์ด ์๋ head ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
4) ์ํ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ - Doubly Circular Linked List
- ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ฐ์ง๋ง, ๋ง์ง๋ง ๋ ธ๋์ next ํฌ์ธํฐ๊ฐ null์ด ์๋ head ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์๊ฐ ๋ณต์ก๋
- ์ฝ์
· ์ญ์ : O(1)
- ์ฒ์์ ์ฝ์ · ์ญ์ : O(1)
- ์ค๊ฐ์ ์ฝ์ · ์ญ์ : O(n)
- ๋์ ์ฝ์
· ์ญ์
- ๋์ ๊ฐ๋ฆฌํค๋ ๋ณ๋์ ํฌ์ธํฐ๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ : O(1)
- ๋์ ๊ฐ๋ฆฌํค๋ ๋ณ๋์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง ์๋ ๊ฒฝ์ฐ : O(n) ← ํ์ ์๊ฐ์ด ์์๋๊ธฐ ๋๋ฌธ
- ํ์ : O(n)
์ฝ์ , ์ญ์ ๋ ์ฉ์ดํ์ง๋ง ์ ๊ทผ ์๋๊ฐ ๋๋ฆฌ๋ค.
5.2.2 ๋ฐฐ์ด
๋ฐฐ์ด
โ๏ธ ๋์ ๋ฐฐ์ด๋ ์์ง๋ง ์ ์ ๋ฐฐ์ด์ ๊ธฐ๋ฐ์ผ๋ก ์ค๋ช ํ๋ค.
- ๊ฐ์ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ๊ฐ ๋์ดํ ์ ํ ์๋ฃ๊ตฌ์กฐ
- ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์์ฐจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ชจ์๋์
- ํฌ๊ธฐ๊ฐ ์ ํด์ ธ ์์ (์ ์ธํ ๋ ํฌ๊ธฐ๋ฅผ ์ ํ๋ฉด, ๊ทธ ํฌ๊ธฐ๋ก ๊ณ ์ ๋๋ค.)
- ์ค๋ณต ํ์ฉ, ์์๊ฐ ์๋ค.
๋๋ค ์ ๊ทผ๊ณผ ์์ฐจ์ ์ ๊ทผ
์์ฐจ ์ ๊ทผ - Sequential Access
ํน์ ๋ฐ์ดํฐ์์ ์ํ๋ ๋ฐ์ดํฐ๋ก ์ ๊ทผํ๊ธฐ ์ํด์๋ ๊ทธ ์ฌ์ด์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฑฐ์ณ์ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํด์ผ ํ๋ค.
๋๋ค ์ ๊ทผ - Random Access (=๋น์์ฐจ ์ ๊ทผ)
์ธ๋ฑ์ค๋ฅผ ํตํด ์ํ๋ ๋ฐ์ดํฐ์ ๋ฐ๋ก ์ ๊ทผํ ์ ์๋ค.
๋ฐฐ์ด vs. ์ฐ๊ฒฐ ๋ฆฌ์คํธ
๋ฐฐ์ด | ์ฐ๊ฒฐ ๋ฆฌ์คํธ |
---|---|
ํฌ๊ธฐ ๊ณ ์ → ์ง์ ๋ ํฌ๊ธฐ ์ด์์ ๋ฐ์ดํฐ ์ ์ฅ ๋ถ๊ฐ๋ฅ | ํฌ๊ธฐ์ ์ ํ์ด ์์ → ์ฝ์ ·์ญ์ ์์ ๋ก์ |
์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํ ๋น ๋ฐ์ | ์ฐ์๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ํ ๋น ๋ฐ์ |
random access ๊ฐ๋ฅ | random access ๋ถ๊ฐ๋ฅ |
ํ์ ๋น ๋ฆ O(1) | ํ์ ๋๋ฆผ O(n) |
์ฝ์ · ์ญ์ ๋๋ฆผ | ์ฝ์ · ์ญ์ ๋น ๋ฆ |
index ์กด์ฌ | node ์กด์ฌ |
ํ์ฉ ์ฌ๋ก
- ๋ฐฐ์ด
- ์ ๋ณด๋ฅผ ์ ์ฅํ ๋ ๋ง์ด ์ฌ์ฉ (๋ฐ๊ตฌ๋ ์ญํ )
- ๋ถ๊ท์น์ ์ธ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ฑฐ๋, ์ดํ์ ๋ค์ ์ฌ์ฉํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ฑฐ๋ ํ ๋ ํ์ฉ
- ์ฐ๊ฒฐ๋ฆฌ์คํธ
- ์์ ์คํธ๋ฆฌ๋ฐ ์ดํ์์ ์ด์ ๊ณก-๋ค์๊ณก์ ์ฐ๊ฒฐํ ๋ ๋ง์ด ํ์ฉ
- ํฌํ ์ต์ history ๊ธฐ๋ฅ
- history ๋ด์ญ์ด ์์ฌ์ ํน์ ์์ ์์ ์ผ๋ก ๋์๊ฐ๊ฑฐ๋ ๋ค์ ์ต๊ทผ์ผ๋ก ๋์์ฌ ์ ์๋ค.
5.2.3 ๋ฒกํฐ
๋์ ์ผ๋ก ์์๋ฅผ ํ ๋นํ ์ ์๋ ๋์ ๋ฐฐ์ด์ด๋ค. ์ปดํ์ผ ์์ ์ ๊ฐ์๋ฅผ ๋ชจ๋ฅธ๋ค๋ฉด ๋ฒกํฐ๋ฅผ ์จ์ผ ํ๋ค.
- ์ค๋ณต ํ์ฉ
- ์์๊ฐ ์์
- ๋๋ค ์ ๊ทผ ๊ฐ๋ฅ
- ํ์ or ๋งจ ๋ค์ ์์๋ฅผ ์ญ์ ·์ฝ์ : O(1)
- ๋งจ ๋ค๋ ๋งจ ์์ด ์๋ ์์๋ฅผ ์ญ์ ·์ฝ์ : O(n)
5.2.4 ์คํ
์คํ
์คํ์ ๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๊ฐ์ฅ ๋ง์ง๋ง์ผ๋ก ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋์ค๋ ์ ์ ํ์ถ ๊ตฌ์กฐ์ด๋ค. (LIFO, Last In First Out)
push
: ์คํ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐpop
: ์คํ์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์
ํ์ฉ ๋ถ์ผ
- ์ฌ๊ท์ ์ธ ํจ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ๋จ
- ์น ๋ธ๋ผ์ฐ์ ๋ฐฉ๋ฌธ ๊ธฐ๋ก
์๊ฐ ๋ณต์ก๋
- ์ฝ์ · ์ญ์ : O(1)
- ํ์ : O(n)
5.2.5 ํ
ํ
ํ๋ ๊ฐ์ฅ ๋จผ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋์ค๋ ์ ์ ์ ์ถ ๊ตฌ์กฐ์ด๋ค. (FIFO, First In First Out)
enqueue
: ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์dequeue
: ํ์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋front
: ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๋ ์ชฝrear
: ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ์ชฝ
ํ์ฉ ๋ถ์ผ
- CPU ์์ ์ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค
- ์ค๋ ๋ ํ๋ ฌ or ๋คํธ์ํฌ ์ ์์ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ ฌ
- ๋๋น ์ฐ์ ํ์(BFS)
- ์บ์์๊ฐ ๋ณต์ก๋
- ์ฝ์ · ์ญ์ : O(1)
- ํ์ : O(n)
'์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ๋ณต์ก๋ (1) | 2023.10.22 |
---|