์๋ฃ๊ตฌ์กฐ ์ข ๋ฅ๋ ์๋์ ๊ฐ๋ค
ํ๋์ฉ ์ดํด๋ณด๋ ์๊ฐ์ ๊ฐ์ง๋๋ก ํ์
๊ต์๋... ์ ๋ ์ค์ํ๋ค๊ณ ์๋ ค์ฃผ์์ง ์์ผ์ จ๋์
** ๋๋ฌด์ํค์ ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ ์ธํฐ๋ทฐ๋ฅผ ์ฐธ๊ณ ํ์๋ค **
1. ๋จ์ ๊ตฌ์กฐ
์ฐ๋ฆฌ๊ฐ ํํ ๋งํ๋ ๋ฐ์ดํฐ ํ์ ๋๋ ์๋ฃํ์ด ์ฌ๊ธฐ์ ํด๋น๋๋ค
๋๋ Python ๊ฐ์ด ์๋ฃํ์ ์ ์ฐํ ์ธ์ด๋ฅผ ์ฌ์ฉํ ๋
๊ฐ์ฅ ์ ์ ์๋๋๊ฒ ์๋ฃํ์ด์๋ค
C๋ C++์ ์๋ฃํ์ ์ํ๋ค
์๋ฃํ์ ์ข ๋ฅ๋ ๋งํฌ๋ฅผ ํตํด ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค
์๋ฃํ ๋ฒ์๋ ํฌ๊ธฐ ๊ฐ์ ์์ธ ๋ถ๋ถ์ ๋ค๋ฅธ ๊ฒ์๋ฌผ๋ก ์ ๋ฆฌํ๊ฒ ๋ค
2. ์ ํ๊ตฌ์กฐ
์ ํ๊ตฌ์กฐ๋ ์์ ๊ทธ๋ฆผ์์ ๋ณธ ๊ฒ์ฒ๋ผ ๋ฆฌ์คํธ, ์คํ, ํ, ๋ฑ ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋๋ค
๊ทธ๋ฆผ์๋ ์์ง๋ง ๋ฐฐ์ด๋ ํฌํจ๋จ ใ ใ
๋ฆฌ์คํธ๋ ์ ํ ๋ฆฌ์คํธ(Linear List)์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Linked List)๊ฐ ์๋ค
์ ํ ๊ตฌ์กฐ๋ ์๋ฃ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ์ดํฐ๊ฐ
์์ฐจ์ ์ผ๋ก ๋์ด๋์ด ์๋ ํํ์ฌ์ ์ ํ์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค
(1) ๋ฐฐ์ด (Array)
๋ฐฐ์ด์ ์ธ๋ฑ์ค(index)๋ฅผ ๊ฐ์ง ์์๋ค์ด ์์ฐจ์ ์ผ๋ก ๋์ด๋์ด ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค
์ธ๋ฑ์ค๋ฅผ ๊ฐ์ก๋ค๋ ๊ฒ์ ์ ๊ทธ๋ฆผ์ฒ๋ผ 0, 1, 2... ์ด๋ ๊ฒ
๋ฒํธ๊ฐ ๋ถ์ด์ ธ ์๋ ๊ฒ์ ์๋ฏธํ๋ค
๊ทธ๋์ ๊ฐ ์์์ ์ ๊ทผํ๋๋ฐ ๋๋ ์๊ฐ์ O(1)์ด๋ผ๊ณ ์ค๋ช ๋๋ค
์๊ฐ ๋ณต์ก๋
- ์์ ์ ๊ทผ → O(1)
- ์์ ์ฐพ์ ๋ ๋๋ ์๊ฐ → O(1)
- ์์ ๋์ ์ ์์น ์ฐพ์์ผ ํ๋๊น → O(1)
- ์์ ์ญ์ ์ → O(n)
(์ญ์ ํ ๋ฐฐ์ด ๊ธธ์ด๊ฐ ํ๋ ์ค์ด์ ๋ค ํ ๋ฒ์ฉ ์ด๋ํ๋๊น)
** ์ฐธ๊ณ **
์๊ฐ ๋ณต์ก๋์ O ํ๊ธฐ
O๋ ์ ๊ทผ ํ๊ธฐ๋ฒ์ด๋ผ๊ณ ํด์ ํจ์์ ์ฆ๊ฐํ๋ ๋ชจ์์ ๋น๊ตํ๋ ํ๊ธฐ ๋ฒ์ด๋ค
ํฐ O-ํ๊ธฐ๋ฒ (Big O ํ๊ธฐ๋ฒ) ๋๋ ๋๋ค์ฐ ํ๊ธฐ๋ฒ(Landau)์ผ๋ก ๋ถ๋ฅด๊ธฐ๋ ํ๋ค
์๊ฐ ๋ณต์ก๋์ ๋ํด์๋ ๋ค๋ฅธ ๊ฒ์๋ฌผ๋ก ๋ค์ ์ ๋ฆฌํ๊ฒ ๋ค
๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ํตํด array[3] ์ด๋ ๊ฒ ์ํ๋ ์์น์ ์ ๊ทผํ ์ ์๋ค
๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์ฐ์๋๊ธฐ ๋๋ฌธ์, ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๋ ๊ฑด ํ ์ ์๋ค
์ ์ํ ํฌ๊ธฐ๋งํผ ์ฌ์ฉ ๊ฐ๋ฅํ๋จ ์๊ธฐ ใ ใ
์๋ฃ๊ตฌ์กฐ malloc์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น๋ฐ๋ ๊ฑธ ์ซ์ดํด์
๋ฐฐ์ด์ ์ ๋ง ์์ฃผ ์ฐ๋ ๋ฏ.
(2) ๋ฆฌ์คํธ (List)
๋ฆฌ์คํธ๋ ์ด๋ค ์์๋ฅผ ๊ฐ์ง๊ณ ์์๋ค์ด ์ผ๋ ฌ๋ก ์ญ์ฑ ๋์ดํ ํํ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค
๋ฆฌ์คํธ๋ ๊ฐ ์์์ ๋ฒํธ๋ฅผ ๋ถ์ผ ์๋ ์๊ณ
์์๋ฅผ ์ฐพ์ ์ ์๋ ์ฐ์ฐ๋ ๊ตฌํ ๊ฐ๋ฅํ๋ค
(๊ทธ๋์ ๋ฐฐ์ด์ ๋ฆฌ์คํธ์ ํฌํจ์ํค๊ธฐ๋ ํ๋ค)
๊ฐ์ฅ ๋ง์ด ์ฐ๋ ์ข ๋ฅ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ด๋ค
๋ง ๊ทธ๋๋ก ์ฐ๊ฒฐ์ด ๋์ด ์๋ ๋ชจ์์ด์ด์
๊ฐ node(๊ทธ๋ฆผ์์ ์ง์ก๋ฉด์ฒด ๊ฒ๋ค)๋ค์ด ๋ค์ node์ ์ฃผ์๋ฅผ ์๊ณ ์๊ณ
๊ทธ ์ฃผ์๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ /์ญ์ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค
๋ด๊ฐ ์ ์ผ ๋ง์ด ์ฐ๋ ๊ฒฝ์ฐ๋ ๊ฐ node์ ๊ธฐ์ตํด์ผ ํ key์ value๋ฅผ ์ ์ฅํ๊ณ
(์๋ฅผ ๋ค์ด ์ฌ๋ ์ฃผ๋ฏผ๋ฒํธ ๊ฐ์ key๋๊น?)
๊ทธ key๋ก ํด๋น value๋ฅผ ์ฐพ์ ๋ ์ด๋ค
C++์ iterator ๊ฐ๋ ์ด ์์ง๋ง C๋ ๊ทธ๋ฐ ๊ฒ ์์ด์ ์ง์ ๊ตฌํํ๋ค ๋ณด๋
core๊ฐ ์ฐธ ๋ง์ด ๋๋ค ใ ใ
์๊ฐ ๋ณต์ก๋
- node ๊ฒ์ → O(1) ๋๋ O(n)
(๋ฐ๋ก ์ฐพ์ผ๋ฉด ์ด๋์ธ๋ฐ ๋๊น์ง ๋ค ์ฐพ๊ฒ ๋๋ฉด n ์๊ฐ์)
- node ์ฝ์ → O(1)
- node ์ญ์ → O(1)
* O(1)๊ฐ ํ๋ฒ ๊ฑธ๋ฆฌ๋ ์๋๋ผ๋ ์๋ฏธ๋ ์๋. ์์๋ฅผ ๋ปํ๋ ๊ฒ์ผ ๋ฟ
(3) ์คํ (Stack)
์คํ์ ํ ๋ฒ์ฏค ๋ค์ด๋ดค์ LIFO(Last In First Out)๋ฅผ ๊ฐ์ง๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค
๋์ค์ ์จ ๋์ด ๋จผ์ ๋๊ฐ๋ค~
(ํ๋ ์ ์ ์ ์ถ์ธ FIFO์ด๋ค)
์คํ ๋ชจ์ ์์ฒด๋ ๋ฐ์ดํฐ๊ฐ ์์ฌ์๋ ๋ชจ์์ด๋ค
๋ฆฌ์คํธ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐ/๊ฒ์/์ถ๋ ฅ/์ญ์ ํ๋ฏ์ด, ์คํ๋ ์ ๋ ฅ ์ฐ์ฐ์ด ์๋๋ฐ,
์ถ๊ฐ ๊ฐ๋ ์ Push, ์ถ๋ ฅ ๊ฐ๋ ์ Pop ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค
๋งจ ์์ ๋ฐ์ดํฐ ์กฐํ ์ฐ์ฐ์ Peek๋ผ๊ณ ํ๋ค... ํผํฌ๋ ์ฒ์ ์์๋ค;;
๊ตฌํํ ๋ index ๊ด๋ฆฌ์ ๋ํด์๋ง ์ํ๋ฉด ๋ค๋ฅธ ์๋ฃํ์ ๋นํด
์ฝ๋ค๊ณ ํ๋, ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋น๊ตํ ๊ทธ๋ฆผ๋ง ๋ณด๊ณ ๋์ด๊ฐ๋๋ก ํ๊ฒ ๋ค
์๊ฐ ๋ณต์ก๋
- Push → O(1)
- Pop → O(1)
- Peek → O(n)
** ์ฐธ๊ณ **
Stack Overflow (์คํ ์ค๋ฒํ๋ก์ฐ)
์คํ ํฌ์ธํฐ๊ฐ ์คํ์ ๊ฒฝ๊ณ๋ฅผ ๋์ด์ค ๋ ์ผ์ด๋๋ ํ์?์ผ๋ก
(4) ํ (Queue)
ํ๋ ๋ด๊ฐ ์ ์ผ ์ข์ํ๋ ์๋ฃ๊ตฌ์กฐ๋ค
์์์ ์คํ์ ํ์ ์ ์ถ์ธ LIFO๋ผ๊ณ ์ธ๊ธํ์๋ค
ํ๋ ๊ทธ ๋ฐ๋์ธ ์ ์ ์ ์ถ์ธ FIFO (First In First Out) ๊ฐ๋ ์ด๋ค
๋จผ์ ์จ ๋์ด ๋จผ์ ๋๊ฐ๋ค~
(ํ ์์ด ๋ป์ ํ๋ฅผ ์ฌ๋ฌ ์ผ๋ ฌ๋ก ๋์ด์ ์ฌ๋๋ค๋ก ์ด๋ฃจ์ด์ง ์ค์ด๋ผ๊ณ ํ๋ค)
์คํ์์๋ Push/Pop/Peek ๊ฐ๋ ์ด ์๋ค๊ณ ํ๋ค
ํ๋ Put(Insert)/Get(Delete) ์ฐ์ฐ์ด ์ฌ์ฉ๋๋ค
๋ํ ํ์์ ๋ฐ์ดํฐ๊ฐ ๋๊ฐ๊ณ ๋ค์ด๊ฐ๊ณ ํ๋ ๊ฑธ
Enqueue/Dequeue ๋ผ๊ณ ๋ถ๋ฅธ๋ค
๋ฐ๋ก ์๋ ๊ฒ..!
๋จผ์ ๋ค์ด์จ ์น๊ตฌ๋ฅผ Front, ๋ง์ง๋ง์ ๋ค์ด์จ ์น๊ตฌ๋ฅผ Back์ด๋ผ๊ณ ํํํ๋ค
FIFO๋๊น ๋จผ์ ๋ค์ด์จ Front๊ฐ ๋จผ์ Dequeue ๋๋ค
์๊ฐ ๋ณต์ก๋
- Push → O(1)
- Pop → O(1)
- Search → O(n)
ํ๋ ๋งจ ์์ ์ ๊ฐ ๋๊ฐ๋ฉด ์์ ์๋ฆฌ๊ฐ ๋น์ด์ ์ ๋ ฌ์ ๋ค์ ํด์ค์ผ ํจ...
๊ทธ๋์ ๋์จ ๊ฑฐ ๋ฐฉ์์ด ์ํ ํ์ด๋ค
์ํ ํ
๋ง ๊ทธ๋๋ก ์ํ์ผ๋ก ๋ ํ์ด๋ค
์ํ ํ์๋ Front ์ Back ์ฉ์ด ๋์ Front์ Rear๋ผ๋ ์ฉ์ด๊ฐ ์ฌ์ฉ๋๋ค
Front → ๊ฐ์ด ์๋ ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ์์น (๋ฌด์กฐ๊ฑด 0์ด์ด์ front๊ฐ ์๋)
Rear (ํ๋ฐฉ) → ๊ฐ์ด ์๋ ๊ฐ์ฅ ๋ง์ง๋ง ์์น
์ฒ์ ์์ ์์น๋ front์ rear๊ฐ ๊ฐ์ ๊ฐ์ ๊ฐ๋๋ค
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์์ ๋ค์ด์จ ์น๊ตฌ๊ฐ ์์ผ๋ฉด rear ๊ฐ์ +1 ์ํจ๋ค
ํ๋ ๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ์น๊ตฌ๊ฐ ๋จผ์ ๋๊ฐ๊ธฐ ๋๋ฌธ์
deQueue๊ฐ ๋๋ฉด front์ ์๋ ๊ฐ์ด ๋๊ฐ๋ค
๊ทธ๋ฌ๋ฉด front ๊ฐ์ +1 ์ํค๋ฉด ๋จใ
์ด๋ฐ ์์ผ๋ก ๋ง์น ๋น๋น ๋๋ฉด์ ํ ๋ฐฐ์ด์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ํ ํ๋ผ๊ณ ํ๋ค
๊ธฐ๋ณธ ํ (์ ํ ํ)๋ฅผ ๋ณด์ํ๊ธฐ ์ํ ๋ฐฉ์์ด๋ค
(5) ๋ฑ (Deque)
๋ฑ์ ํ์ ๋ค๋ฅด๊ฒ front์ back ๋ ๋ค์์ ์ญ์ ์ ์ฝ์ ์ด ๊ฐ๋ฅํ ์๋ฃ๊ตฌ์กฐ์ด๋ค
๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ด๊ณ , ์ค๊ฐ์ค๊ฐ ์ฝ์ /์ญ์ ๋ ์ํ์จ๋ธ
( ์/๋ค ๋ณด๋ค ์ค๊ฐ ๋ ธ๋ ์ฐ์ฐ์ ์ฑ๋ฅ์ด ์ ์ข์ )
์๋ ๊ทธ๋ฆผ๋ง ์ฒจ๋ถํ๊ณ ์ ๋ฆฌ๋ฅผ ๋ง์น๊ฒ ๋ค
์๊ฐ ๋ณต์ก๋
- Push → O(1)
- Pop → O(1)
- Search → O(1)
3. ๋น์ ํ ๊ตฌ์กฐ
๋น์ ํ ๊ตฌ์กฐ๋ ์ผ๋ ฌ๋ก ๋์ดํ๊ธฐ๊ฐ ์ด๋ ต๊ณ , ์๋ฃ์ ์์๊ฐ ๋ถ๊ท์นํด์
์๋ฃ๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ๋ปํ๋ค
๋ํ์ ์ผ๋ก ํธ๋ฆฌ์ ๊ทธ๋ํ๊ฐ ์๋ค
์๋ฃ๊ตฌ์กฐ ๊ณต๋ถํ ๋ ์ฌ๊ธฐ์๋ถํฐ ๊ณต๋ถ ์ ํ๋ ๊ธฐ์ต์ด ๋๋ค
์ด์ ์๋ฉด ๋๋ ๊ฑฐ์ง ^^7
(1) ํธ๋ฆฌ
ํธ๋ฆฌ๋ ์์ ์ฒจ๋ถํ ๋น์ ํ ๊ตฌ์กฐ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๋ชจ์์ ๊ฐ์ง๋ค
๋๋ฌด์ฒ๋ผ ๊ฐ์ง๋ฅผ ๋ป์ ๋ชจ์์ด ์ฐ์๋ผ์ ํธ๋ฆฌ๋ผ๊ณ ๋ถ๋ฅด๋ ๋ฏ
๋๋ฌด๋ฅผ ๋ค์ง์ด ๋์ ๋ชจ์์ด๋๊น!?
ํธ๋ฆฌ์๋ ์ฉ์ด ์ ๋ฆฌ๊ฐ ์กฐ๊ธ ๋ง์ด ํ์ํ๋ค
๋
ธ๋(node): ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ์ด ๋๋ ์น๊ตฌ (๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ์ ๊ทธ ๋
ธ๋ ๋ง์ต๋๋ค)
๋ฃจํธ ๋
ธ๋(root node/root): ๋ฟ๋ฆฌ(?). ๋ถ๋ชจ๊ฐ ์๋ ์ต์์ ๋
ธ๋์
๋ถ๋ชจ ๋
ธ๋(parent node): ๋ฃจํธ์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ๋
ธ๋
์์ ๋
ธ๋(child node): ๋ถ๋ชจ ๋
ธ๋์ ๋ถ์ด ์๋ ๋
ธ๋
ํ์ ๋
ธ๋(siblings node): ๊ฐ์ ๋ถ๋ชจ ๋
ธ๋๋ฅผ ๋ฐ๋ผ๋ณด๋ ๋
ธ๋๋ค
๋ฆฌํ (leaf) ํน์ ๋จ๋ง(terminal) ๋
ธ๋: ์. ์ฐจ์๊ฐ 1์ธ ๋
ธ๋. ์ ์ผ ๋ ๋
ธ๋๋ค
๋งํฌ(link): ๋
ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ . Edge ๋๋ branch๋ผ๊ณ ๋ถ๋ฆ. ๊ฐ์
๊ฒฝ๋ก(path): ํ ๋
ธ๋์์ ๋ค๋ฅธ ํ ๋
ธ๋์ ์ด๋ฅด๋ ๊ธธ ์ฌ์ด์ ์๋ ๋
ธ๋๋ค์ ์์
๊ธธ์ด(length): ์ถ๋ฐ ๋
ธ๋์์ ๋์ฐฉ ๋
ธ๋๊น์ง ๊ฑฐ์น๋ ๋
ธ๋์ ๊ฐ์
๊น์ด(depth): [๋ฃจํธ ๋
ธ๋ - ํ์ฌ ๋
ธ๋]๊น์ง์ ๊ฑฐ๋ฆฌ
๋ ๋ฒจ(level): 0๋ถํฐ ์์ํ๋ ๋งํฌ์ ๋จ๊ณ
๋์ด(height): [๋ฃจํธ ๋
ธ๋ - ๋ฆฌํ ๋
ธ๋] ๊น์ง์ ๊ฑฐ๋ฆฌ
์ฐจ์(degree): ๊ฐ ๋
ธ๋์ ์์์ ๊ฐ์[5]
ํธ๋ฆฌ์ ์ฐจ์(degree of tree): ํธ๋ฆฌ์ ์ต๋ ์ฐจ์ = max[deg1, deg2, ..., degn]
ํฌ๊ธฐ(size): ๋
ธ๋์ ์ ์ฒด ๊ฐ์
๋๋น(width): ๊ฐ์ฅ ๋ง์ ๋
ธ๋๋ฅผ ๊ฐ๊ณ ์๋ ๋ ๋ฒจ์ ํฌ๊ธฐ
๋ํ ์ด์งํธ๋ฆฌ(Binary Tree)์ ์ด์ง ํ์ ํธ๋ฆฌ(Binary Search Tree) ๋ฑ์ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์๋ค
์ ๋ฆฌํ๋ ค๊ณ ๋ณด๋ ์ข ๋ฅ๊ฐ ์๊ฐ๋ณด๋ค ๋ค์ํด์ ์๊ฒ๋ ๋ฐ๋ก ์ ๋ฆฌํ๋ ๊ฑธ๋ก
(2) ๊ทธ๋ํ
๊ทธ๋ํ๋ ํธ๋ฆฌ์ ๋น์ทํ๊ฒ ๋ ธ๋์ ์ฃ์ง๋ก ๊ตฌ์ฑ๋๋๋ฐ
๋ถ๋ชจ/์์ ๊ด๊ณ๋ก ๊ณ์ธต์ด ์ด๋ฃจ์ด์ง ๊ฒ ์๋๋ผ
๋ ธ๋์ ๋ ธ๋๋ค๋ผ๋ฆฌ ์ฐ๊ฒฐ๋์ด ๊ตฌ์ฑ๋๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค
ํํ ์๊ณ ์๋ ์ฐจํธ ํ์์ ๊ทธ๋ํ๋ ๊ทธ๋ํ ๋ง์ต๋๋ค
๋ค๋ง ์ปดํจํฐ๊ฐ ์์๋จน์ ๊ทธ๋ํ๋ก ๋ฐ๊พผ ๊ฒ๋ฟ
๋ ธ๋๋ค ์ฌ์ด์๋ ๋ฐฉํฅ/๋ฌด๋ฐฉํฅ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง ์ ์์ด์
๊ทธ๋ํ ์ข ๋ฅ๋ ๋ฐฉํฅ ๊ทธ๋ํ์ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ๊ฐ ์๋ค
๋ฐ๋ก ์๋ ๊ฒ...
๋ฐฉํฅ ๊ทธ๋ํ
๊ฐ์ ์ ๋ฐฉํฅ์ฑ์ด ์กด์ฌํ๋ ๊ทธ๋ํ (ํ์ดํ๋ก ํํ๋จ)
A → B๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฐ์ ์ (A, B)๋ก ํ๊ธฐ
๋ฌด๋ฐฉํฅ ๊ทธ๋ํ
์๋ฐฉํฅ์ผ๋ก ๊ฐ์ ์ ํตํด ๊ฐ ์ ์๋ ๊ทธ๋ํ
A์ B๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฐ์ ์ (A, B)์ (B, A)๋ก ํ๊ธฐ
๋ํ ๊ทธ๋ํ์๋ ํธ๋ฆฌ ์ฉ์ด์ ์ด์ด์ ์ถ๊ฐ๋ ์ฉ์ด๊ฐ ์๋ค
์ ์ (vertext): ๊ทธ๋ํ์์ ์์น๋ฅผ ๋ํ๋
์ธ์ ์ ์ (adjacent vertex): ์ฃ์ง์ ์ง์ ์ฐ๊ฒฐ๋ ์ ์
์ฌ์ดํด(cycle): ํ ์ ์ ์์ ์์~๋ค์ ๋์ฐฉํด์ ๋์์ค๋ ๊ฒฝ๋ก
์ ๋ ฅ ์ฐจ์(in-degree): ์ ์ ์ ๋ค์ด์ค๋ ๊ฐ์ ์ ์
์ถ๋ ฅ ์ฐจ์(in-degree): ์ ์ ์์ ๋๊ฐ๋ ๊ฐ์ ์ ์
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ํ์์๋ ๊ผญ ์์์ผ ํ ๊ฐ๋ ์ด ๋ ๊ฐ์ง๊ฐ ์๋ค
A. ์ธ์ ํ๋ ฌ (Adjacency Matrix)
→ Edge ์ถ๊ฐ ์ญ์ ๊ฐ ๋น๋ฒํ ๋ ์ฌ์ฉํ๋ ๊ฒ ์ข์
๊ทธ๋ํ๋ ์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ฐฐ์ด๋ก ํํ๋ ์ ์๋ค
ํ๋ ฌ์ 0๊ณผ 1๋ก ํํํ ์ ์์ง ์๊ฐ์ต๋๊น?
๊ทธ๋์ ์ฃ์ง๊ฐ ์กด์ฌํ๋ ๋ ธ๋๋ฉด ๋ฐฐ์ด๋ก (0, 1) ์ด๋ฐ ์์ผ๋ก
์ธ ์ ์๋ค ์ด๋ง์ด๋ค
์ฃ์ง๋ก ์ฐ๊ฒฐ๋์ด ์์ง ์์ (์๋ฅผ ๋ค์ด (0, 2))๋ ํ๋ ฌ์ 0์ผ๋ก ํ๊ธฐ ใ ใ
๋ฐฐ์ด๋ก ๋ง๋ค์ด ๋ชจ๋ ์ ๋ณด๋ฅผ ์๊ณ ์๋ ๊ฑด ์ฅ์ ์ด์ง๋ง
ํญ์ n^2์ 2์ฐจ์ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์กํ๋๊น ๊ณต๊ฐ ๋ญ๋น๊ฐ ์์ ์๋
์ ์ CNN ๊ณต๋ถํ์ ๋ ๊ฐ์ค์น ๊ทธ๋ํ ์ฉ์ด๊ฐ ์ ๊น ๋์์๋๋ฐ
์ด์ ์ดํด๊ฐ ๊ฐ๋๊ตฌ๋...
์๊ฐ ๋ณต์ก๋
(N์ ๋ ธ๋ ๊ฐ์, E๋ Edge์ ์ ์ฒด ๊ฐ์)
- Node ์ถ๊ฐ → O(N^2)
- Node ์ญ์ → O(N^2)
- Edge ์ถ๊ฐ → O(1)
- Edge ์ญ์ → O(1)
ํน์ ์ ๋ง ๋ณ๊ฒฝํ๋ฉด ์์ ์๊ฐ์ธ๋ฐ, ๋ ธ๋ ์ถ๊ฐ/์ญ์ ํ๋๊น
๋ชจ๋ ์ ๋ค ์ฑ์์ค์ผ ํด์ ์ค๋๊ฑธ๋ ค๋ฒ๋ฆผ...์ดํฌ
B. ์ธ์ ๋ฆฌ์คํธ (Adjacency List)
→ Node ์ถ๊ฐ ์ญ์ ๊ฐ ๋น๋ฒํ ๋ ์ฌ์ฉํ๋ ๊ฒ ์ข์
์ธ์ ๋ฆฌ์คํธ๋ ๋ง ๊ทธ๋๋ก ๋ฆฌ์คํธ๋ก ํํํ ๊ฑฐ๋ค
๊ฐ ๋ ธ๋๋ค์ ํค๋ ๋ ธ๋๋ก ํํํ ์ ์๊ณ , ์ ์ ์ ๊ฐ์๋งํผ ๋ฆฌ์คํธ๋ ์กด์ฌํ๋ค
์กด์ฌํ๋ ๊ฐ์ ๋ง ๊ด๋ฆฌํ ์ ์์ด์ ํ๋ ฌ๋ณด๋ค๋ ๋ฉ๋ชจ๋ฆฌ๋ฉด์์ ํจ์จ์ ์
๊ทผ๋ฐ ๋ ์ ์ ์ ์ฐ๊ฒฐํ๋ ๊ฐ์ ์กฐํ๋ ์ฐจ์๋ฅผ ๊ตฌํ๋ ค๋ฉด ๋ฆฌ์คํธ ํ์์ ํด์ผ ํด์
์ชผ๋ ์ค๋ ๊ฑธ๋ฆด ์๋ด
(์ผ๋จ ๊ตฌํ์ด ์ด๋ ค์)
์๊ฐ ๋ณต์ก๋
(N์ ๋ ธ๋ ๊ฐ์, E๋ Edge์ ์ ์ฒด ๊ฐ์)
- ๋ ธ๋ ์ถ๊ฐ → O(1)
- ๋ ธ๋ ์ญ์ → O(N+E)
(๋ ธ๋ ์ญ์ ํ๋ฉด ์ญ์ ๋ ๊ณต๊ฐ์ ๋ค์ ์ฑ์์ค์ผ ํ๋๊น ์ด๋งํผ)
- ์ฃ์ง ์ถ๊ฐ → O(1)
- ์ฃ์ง ์ญ์ → O(E)
(ํ ์ค๋ก ๋ค ์ฐ๊ฒฐ์ด ๋์ด ์์ผ๋ฉด ๋ค ๋ค์ ธ์ผ ํจ)
4. ํ์ผ ๊ตฌ์กฐ
ํ์ผ ๊ตฌ์กฐ๋ ์ปดํฐ ๋ณด์กฐ๊ธฐ์ต ์ฅ์น์ ์ ์ฅ๋๋ ํ์ผ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค
ํ์ผ์ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค
[ ์ถ์ฒ ]
https://namu.wiki/w/%EB%B0%B0%EC%97%B4
https://www.onlybook.co.kr/entry/algorithm-interview
'๐Algorithm ------------ > ๊ฐ๋ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Composite Pattern (0) | 2023.03.01 |
---|