๐ป ์๋ฃ๊ตฌ์กฐ: Data Structure
โป๏ธ Array
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ก, ๋ ผ๋ฆฌ์ ์ ์ฅ ์์์ ๋ฌผ๋ฆฌ์ ์ ์ฅ ์์๊ฐ ์ผ์นํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค(index)๋ก ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์์ด search์ ๊ฒฝ์ฐ O(1)์ ๋น ๋ฅธ ์๋๋ฅผ ๋ณด์ฌ์ค๋ค.
๋ค๋ง ์ฝ์ /์ญ์ ์ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ์ฐ์์ ์ธ ํน์ง์ด ๊นจ์ง๊ธฐ ๋๋ฌธ์ ๋๋จธ์ง ์์๋ค์ shift ํด์ฃผ๋ O(n)์ ๋น์ฉ์ด ๋ฐ์ํ๊ฒ ๋๋ค.
โป๏ธ Linked List
๋ ผ๋ฆฌ์ ์ ์ฅ ์์์ ๋ฌผ๋ฆฌ์ ์ ์ฅ ์์๊ฐ ์ผ์นํ์ง ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๊ฐ๊ฐ์ ์์๋ ๋ค์ ์์๊ฐ ๋ฌด์์ธ์ง๋ง์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฝ์ /์ญ์ ์ ๋น์ฉ์ O(1)๋ก ๋งค์ฐ ๊ฐ๋จํ๋ค.
๋ค๋ง, ์ฐ์์ ์ด์ง ์์ ํน์ฑ ๋๋ฌธ์ ํน์ ์์์ ์ ๊ทผํ ๊ฒฝ์ฐ ํด๋น ์์๋ฅผ ์ฐพ๊ธฐ ์ํด ๋ชจ๋ ์์๋ฅผ ๋ค์ฌ๋ค ๋ด์ผํ๋ ๋น์ฉ์ด O(n)์ผ๋ก ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ์ฝ์ /์ญ์ ์ ๊ฒฝ์ฐ์๋ ์์ ํ ์์๋ฅผ ์ฐพ๊ธฐ ์ํด ๋น์ฉ์ด ๋ฐ์ํ๋ฏ๋ก ์์น/์ฝ์ /์ญ์ ๋ชจ๋ worst case๋ก O(n)์ ์๊ฐ์ด ์์๋๋ค๊ณ ๋ณผ ์ ์๋ค.
Linked List๋ Tree์ ๊ทผ๊ฐ์ด ๋๋ ์๋ฃ๊ตฌ์กฐ๋ก ์ ์ฉํ๊ฒ ์ฐ์ธ๋ค.
๐ ๐ ๐
โป๏ธ Stack
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก, ํ์ ์ ์ถ(LIFO) ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๋ณดํต Array๋ก ๊ตฌํํ๋๋ฐ, ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ ํ์์์ด ๋ง๋จ index๋ง ์ค์ฌ๊ฐ๋ฉฐ ์ด๊ธฐํ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
โป๏ธ Queue
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก, ์ ์ ์ ์ถ(FIFO)๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๋ณดํต ์๋จ์ ์ฝ์ /์ญ์ ๊ฐ ์ฉ์ดํ๋๋ก ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ตฌํ๋๋ค.
* Priority Queue (์ฐ์ ์์ ํ): ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ๊บผ๋ด๊ธฐ ์ํด ๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ๋ก, ์ผ๋ฐ์ ์ผ๋ก ํ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋๋ค.
โป๏ธ Heap
์์ ์ด์งํธ๋ฆฌ์ ์ผ์ข ์ผ๋ก, ์ฐ์ ์์ ํ๋ฅผ ์ํ์ฌ ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ์ด๋ค.
์ต๋ํ, ์ต์ํ์ด ์์ด ์ฌ๋ฌ ๊ฐ์ ๊ฐ๋ค ์ค์์ ์ต๋๊ฐ์ด๋ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์๋ด๋๋ก ๋ง๋ค์ด์ก๋ค.
ํ์ ์ ์ฅํ๋ ํ์ค์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ ๋ฐฐ์ด์ด๋ค. ์ฝ์ ์ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋ง๋จ์ ๋ฃ์ด์ ๋ฐ๋ก ์ ๋ถ๋ชจ๋ ธ๋๋ ๋น๊ตํด๊ฐ๋ฉฐ ํ์ ์ ๋ ฌํ๊ณ , ์ญ์ ์ ๊ฒฝ์ฐ ๋ฃจํธ๋ ธ๋๋ฅผ ์ ๊ฑฐํ ์๋ฆฌ์ ๋ง๋จ ๋ ธ๋๋ฅผ ๊ฐ์ ธ์จ ๋ค์ ์์๋ ธ๋์ ๋น๊ตํด๊ฐ๋ฉฐ ํ์ ์ ๋ ฌํ๋ค.
๐ ๐ ๐
โป๏ธ Tree
ํธ๋ฆฌ๋ ๋ฐฐ์ด, ์คํ, ํ์ ๊ฐ์ ์ ํ๊ตฌ์กฐ๊ฐ ์๋ ๋น์ ํ ๊ตฌ์กฐ์ด๋ค. ์๋ฃ์ ๊ณ์ธต์ ๊ด๊ณ๋ฅผ ํํํ๋ค.
- Node(๋ ธ๋): ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ณ ์๋ ๊ฐ๊ฐ์ ์์๋ค์ ์๋ฏธํ๋ค.
- Edge(๊ฐ์ ): ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ๋ ธ๋์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ ์ ์๋ฏธํ๋ค.
- Root Node(๋ฃจํธ ๋ ธ๋): ํธ๋ฆฌ์์ ์ต์์์ ์๋ ๋ ธ๋๋ฅผ ์๋ฏธํ๋ค.
- Terminal Node(=Leaf Node, ๋จ๋ง ๋ ธ๋): ํ์์ ๋ค๋ฅธ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋์ด ์์ง ์์ ๋ ธ๋๋ฅผ ์๋ฏธํ๋ค.
- Internal Node(๋ด๋ถ ๋ ธ๋, ๋น๋จ๋ง ๋ ธ๋): ๋จ๋ง ๋ ธ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๋ก ๋ฃจํธ ๋ ธ๋๋ฅผ ํฌํจํ๋ค.
โป๏ธ Binary Tree ์ด์งํธ๋ฆฌ
ํ ๋ ธ๋์ ์ฐจ์๊ฐ 2๋ฅผ ๋์ง์๋ ํธ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
๋ ธ๋์ ๊ฐ์๊ฐ n๊ฐ์ด๊ณ root๊ฐ 0์ด ์๋ 1์์ ์์ํ ๋, i๋ฒ์งธ ๋ ธ๋์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ์์ด ๋ง์กฑ๋๋ค.
-parent(i) = i/2
-left_child(i) = i*2
-right_child(i) = i*2+1
- Perfect Binary Tree(ํฌํ ์ด์ง ํธ๋ฆฌ): ๋ชจ๋ ๋ ๋ฒจ์ด ๊ฝ ์ฐฌ ์ด์งํธ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
- Complete Binary Tree(์์ ์ด์ง ํธ๋ฆฌ): ์์์ ์๋๋ก, ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์์๋๋ก ์ฐจ๊ณก์ฐจ๊ณก ์ฑ์์ง ์ด์งํธ๋ฆฌ๋ฅผ ๊ฐ๋ฅดํจ๋ค.
- Full Binary Tree(์ ์ด์ง ํธ๋ฆฌ): ๋ชจ๋ ๋ ธ๋๊ฐ 0๊ฐ ํน์ 2๊ฐ์ ์์ ๋ ธ๋๋ง์ ๊ฐ๋ ์ด์งํธ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
โป๏ธ BST (Binary Search Tree, ์ด์งํ์ํธ๋ฆฌ)
์ด์งํธ๋ฆฌ์์ ๋ ํจ์จ์ ์ธ ํ์์ ์ํด ์๊ธด ๊ตฌ์กฐ์ด๋ค. ๋ฐ์ดํฐ ์ ์ฅ์ ๊ท์น์ด ๋ฐ๋ฅธ๋ค.
- ์ด์ง ํ์ ํธ๋ฆฌ์ ๋ ธ๋์ ์ ์ฅ๋ ํค๋ ์ ์ผํ๋ค.
- ๋ถ๋ชจ์ ํค๊ฐ ์ผ์ชฝ ์์ ๋ ธ๋์ ํค๋ณด๋ค ํฌ๋ค.
- ๋ถ๋ชจ์ ํค๊ฐ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋์ ํค๋ณด๋ค ์๋ค.
- ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ ์ด์ง ํ์ ํธ๋ฆฌ์ด๋ค.
์ด์งํ์ํธ๋ฆฌ๋ ํ์์ ์์ด O(logN) ์ ํํ ๋งํ์๋ฉด O(h)๋ผ๊ณ ํํํ ์ ์๋ค.
์ฃผ์ํ ์ ์ Skewed Tree(ํธํฅ ํธ๋ฆฌ)๊ฐ ๋ง๋ค์ด์ง ์ ์๋ค๋ ์ ์ด๋ค. ์ ์ฅ ์์์ ๋ฐ๋ผ ํ ์ชฝ์ผ๋ก๋ง ๊ณ์ํด์ ์ ์ฅ๋๋ค๋ฉด ํ์์ Worst Case๋ O(n)์ด ๋์ด ์ด์งํ์ํธ๋ฆฌ์ ์ฅ์ ์ ์ด๋ฆฌ์ง ๋ชปํ๊ฒ ๋๋ค.
์ด๋ฌํ ๋นํจ์จ์ ๊ฐ์ ํ๊ธฐ ์ํด ํธ๋ฆฌ๋ฅผ Rebalancingํ๋ ๊ธฐ๋ฒ๋ค์ด ์๋๋ฐ, ๊ทธ ์ค์์ ๋ํ์ ์ธ ๊ฒ์ด ๋ฐ๋ก Red-Black Tree์ด๋ค.
โป๏ธ Binary Heap
Tree ์ค์์๋ ๋ฐฐ์ด์ ๊ธฐ๋ฐํ Complete Binary Tree์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
์ต๋ํ(Max Heap)๊ณผ ์ต์ํ(Min Heap)์ด ์๋ค. ์ต๋ํ์ ๊ฒฝ์ฐ ๊ฐ ๋ ธ๋์ ๊ฐ์ด childeren์ ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ๋ปํ๋ฉฐ, ์ต์ํ์ ๊ทธ ๋ฐ๋๋ฅผ ์๋ฏธํ๋ค.
๊ฐ์ ์ต๋๊ฐ, ์ต์๊ฐ์ ์ฐพ๋๋ฐ์๋ O(1)์ ๋น ๋ฅธ ์๋๋ฅผ ๋ณด์ด์ง๋ง, ๊ฐ์ ์ฝ์ /์ญ์ ๋ฅผ ํ ๋์๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ฌ๊ตฌ์ฑ ํด์ผํ๊ธฐ ๋๋ฌธ์ O(logN)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ณด์ธ๋ค.
โป๏ธ Red Black Tree
BST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํธ๋ฆฌ ํ์์ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ํน์ ๋ ธ๋์ ๊ฐ์์ ๋ํ์ฌ depth๋ฅผ ์ต์ํํ์ฌ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ด๋ ๊ฒ์ด ํต์ฌ์ผ๋ก, Complete binary tree์ธ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ค. ๋ฐ๋ผ์ Search, Insert, Delete์ ๊ฒฝ์ฐ์ O(logN)์ ์ผ๊ด์ ์ธ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ณด์ธ๋ค.
์ ์๋ ์๋์ ๊ฐ๋ค.
- ๊ฐ ๋ ธ๋๋ Red/Black์ ์๊น์ ๊ฐ๋๋ค.
- Root node์ ์๊น์ Black์ด๋ค.
- ๊ฐ Leaf node์ ์๊น์ Black์ด๋ค.
- ์ด๋ค ๋ ธ๋์ ์๊น์ด red๋ผ๋ฉด, ๋ ๊ฐ์ children์ ์๊น์ ๋ชจ๋ Black์ด๋ค.
- ๊ฐ ๋ ธ๋์ ๋ํด์ ๋ ธ๋๋ก๋ถํฐ descendant leaves๊น์ง์ ๋จ์ ๊ฒฝ๋ก๋ ๋ชจ๋ ๊ฐ์ ์์ black nodes๋ค์ ํฌํจํ๊ณ ์์ด์ผ ํ๋ค. ์ด๋ฅผ ํด๋น ๋ ธ๋์ Black-Height๋ผ๊ณ ํ๋ค.
์ฝ์ /์ญ์ ์ ์๋ฆฌ๋ฅผ ์์๋๋ ๊ฒ๋ ์ข์ ๋ฏ ํ๋ค.
๐ ๐ ๐
โป๏ธ Hash Table
Hashing์ ํน์ ํ ๊ณ์ฐ์ ํตํ์ฌ ๋์จ ๊ฐ์ ํค๋ก ํ์ฌ ๊ฐ์ ์ ๊ทผํ๋ ๊ณผ์ ์ด๋ค. Hash Table๊ณผ Hash Function์ผ๋ก ๊ตฌ์ฑ๋๋ค.
Hash Table์ Key์ Value๋ฅผ ๊ฐ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๋ด๋ถ์ ์ผ๋ก ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ๊ฒ์ ์๋๋ฅผ ๊ฐ๋๋ค. ์ฆ, ํน์ ๊ฐ์ ๊ฒ์ํ๋๋ฐ ์์ด ๋ฐ์ดํฐ ๊ณ ์ ์ ์ธ๋ฑ์ค๋ฅผ ์ฐ๋ฏ๋ก Time Complexity๊ฐ O(1)์ด ๋๋ ๊ฒ์ด๋ค. ๋ค๋ง ์ธ๋ฑ์ค๋ก ์ฌ์ฉ๋๋ key๊ฐ์ด ๋ถ๊ท์นํ๋ฏ๋ก ์ด๋ฅผ ๋ค๋ฃจ๋๋ฐ ์์ด ํน๋ณํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ด๋ค์ง Hash Function์ ์ฌ์ฉํ๊ฒ ๋๋ค.
Hash Function์ด ๋ฆฌํดํ๋ ๊ฐ์ Hashcode๋ผ๊ณ ํ๋๋ฐ, ์ด ํค ๊ฐ์ด ๋์ผํ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ Collision์ด ๋ฐ์ํ๋ค. Collision์ ์ต์ํํ๋ ๋ฐฉํฅ์ผ๋ก ์ค๊ฒ๋ ๊ฒ์ ์ข์ Hash Function์ด๋ผ๊ณ ํ๋ค. ์ด๋ฅผ ์ํ ๋ฐฉ๋ฒ์ผ๋ก๋ ์๋์ ๊ฐ์ ๊ฒ๋ค์ด ์๋ค.
- Open Address ๋ฐฉ์ (๊ฐ๋ฐฉ์ฃผ์๋ฒ)
- ์ ํ ํ์ (Linear Probing): ํด์์ถฉ๋ ์ ๋ค์ ๋ฒ์ผ์ด๋ ๋ช ๊ฐ์ ์์น๋ฅผ ๊ฑด๋๋ฐ์ด ๋น ๊ณณ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ ํ์๋ฒ์ด๋ค.
- ์ ๊ณฑ ํ์ (Quadratic Probing): ํด์์ถฉ๋ ์ ์ ๊ณฑ๋งํผ ๊ฑด๋๋ด ๋ฒ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ ํ์๋ฒ์ด๋ค.
- ์ด์ค ํด์ (Double hashing probing): ํด์์ถฉ๋ ์ ๋ค๋ฅธ ํด์ํจ์๋ฅผ ํ ๋ฒ ๋ ์ ์ฉํ ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํ๋ค. ํด์์ฐ์ฐ์ ๋๋ฒ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ผ๋ก ์ข์ง ์๋ค.
- ๊ฐ๋ฐฉ์ฃผ์๋ฒ์ ์ญ์ ์ ๊ฒฝ์ฐ ์ถฉ๋์ ์ํด ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ๊ฒ์๋์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ญ์ ์์น์ ๋ค์์์น๊น์ง ์ฐ๊ฒฐํด์ฃผ๋ ๋๋ฏธ๋ ธ๋๋ฅผ ์ฝ์ ํด์ผํ๋ค. ๋๋ฏธ๋ ธ๋๊ฐ ๋ง์์ง๋ฉด ๋ฒํท์ ์ฐ์์ ์ผ๋ก ๊ฒ์ํด์ผํ๋ฏ๋ก ์ผ์ ๊ฐ์ ์ด์์ด ๋์์ ๊ฒฝ์ฐ ์ฌํด์๋ฅผ ํด์ค์ผ ์ฑ๋ฅ ์ ์ง๊ฐ ๊ฐ๋ฅํ๋ค.
- ํฌ์ธํฐ๊ฐ ํ์์๊ณ ์ง์ ํ ๋ฉ๋ชจ๋ฆฌ ์ธ ์ถ๊ฐ์ ์ธ ์ ์ฅ๊ณต๊ฐ์ด ํ์ํ์ง ์๋ค. ์ฝ์ /์ญ์ ์ ์ค๋ฒํค๋๊ฐ ๋ ์ ์ด ๋ฐ์ดํฐ๊ฐ ์ ์ ๋ ๋ ์ ๋ฆฌํ๋ค.
- Chaining ๋ฐฉ์ (์ฒด์ด๋)
- ๋ฒ์ผ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ํ ๋นํ์ฌ, ๋ฒ์ผ์์ ํด์์ถฉ๋์ด ๋ฐ์ํ๋ฉด ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๋ฐ์ดํฐ๋ค์ ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ด๋ค.
- ๋ฒ์ผ์ด ๊ฝ ์ฐจ๋๋ผ๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๋๋ ค๊ฐ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ฃผ์๊ฐ์ด ๋ณํ์ง ์๋๋ค.
- ๊ฐ๋ฐฉ์ฃผ์๋ฒ์ ๋นํด ๋ณต์กํ ๊ณ์ฐ์์ด ํ์ํ์ง ์์ผ๋, ํด์ํ ์ด๋ธ์ด ์ฑ์์ง์๋ก ์ฑ๋ฅ์ ํ๊ฐ ๋ฐ์ํ๋ค.
- ๋ฆฌ์ฌ์ด์ง
- ์๋ก์ด ๋ฐฐ์ด์ ๊ธฐ์กด ๋ฐฐ์ด์ ํค๋ฅผ ์๋กญ๊ฒ ์ฌํด์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ๊ฐ๋ฐฉ์ฃผ์๋ฒ์์ ๊ณ ์ ํฌ๊ธฐ์ ๋ฐฐ์ด์ด ๊ฝ ์ฐจ๊ฑฐ๋, ์ฒด์ด๋์์ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง๊ฒ ๋๋ฉด ๊ฒ์ ํจ์จ์ด ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ ๋ฒํท์ ๊ฐ์๋ฅผ ๋๋ ค์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
๐ ๐ ๐
โป๏ธ Graph
ํธ๋ฆฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น์ ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ํธ๋ฆฌ๋ ์ฌ์ดํด์ด ์กด์ฌํ์ง ์๋ ๊ทธ๋ํ์ด๋ค.
๋ฐฉํฅ ๊ทธ๋ํ(Directed Graph)/ ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ(Undireted Graph)/ ๊ฐ์ค์น ๊ทธ๋ํ(Weight Graph)/ ๋น๊ฐ์ค์น ๊ทธ๋ํ/ ๋ถ๋ถ ๊ทธ๋ํ(Sub Graph)์ ๊ฐ์ ์ข ๋ฅ๊ฐ ์๋ค.
๊ทธ๋ํ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ธ์ ํ๋ ฌ(Adjacent Matrix) ๋๋ ์ธ์ ๋ฆฌ์คํธ(Adjacent List)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ค.
- ์ธ์ ํ๋ ฌ(Adjacent Matrix): vertex ๊ฐ์ ์ฐ๊ฒฐ๊ด๊ณ๋ฅผ O(1)๋ก ํ์ ํ ์ ์๋ค. ๋จ, Space Complexity๊ฐ O(V^2)์ด ๋ฐ์ํ๋ฏ๋ก Dense graph ํํ์ ์ ํฉํ๋ค.
- ์ธ์ ๋ฆฌ์คํธ(Adjacent List): vertex๊ฐ์ ์ฐ๊ฒฐ๊ด๊ณ๋ฅผ ํ์ธํ๋๋ฐ ์ค๋ ๊ฑธ๋ฆฐ๋ค. Space Complexity๋ O(V+E)๋ก Sparse Graph๋ฅผ ํํํ๋๋ฐ ์ข๋ค.
๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์๋ค.
- ๊น์ด ์ฐ์ ํ์ (Depth First Search: DFS): Stack
- ๋๋น ์ฐ์ ํ์ (Breadth First Search: BFS): Queue
โป๏ธ ์ต์์ ์ฅํธ๋ฆฌ MST(Minimum Spanning Tree)
๊ทธ๋ํ G์์ edge weight์ ํฉ์ด ์ต์์ธ Spanning Tree(๊ทธ๋ํ G์ ๋ชจ๋ vertex๊ฐ cycle์์ด ์ฐ๊ฒฐ๋ ํํ)๋ฅผ ์๋ฏธํ๋ค.
- Kruskal Algorithm
- ๋ชจ๋ ๊ฐ์ ๋ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๋ค์, ์ต์ ๊ฐ์ค์น๋ฅผ ๋ณด์ด๋ ๊ฐ์ ๋ถํฐ ์ ํํ๋ฉฐ ์คํจ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋ค์ด๊ฐ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๊ฐ์ ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
- Prim Algorithm
- ์์ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฅ ๊ฐ์ค์น๊ฐ ์ ์ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ์ ์ ์ ์ ํํ๋ฉฐ ์ ์ฅ ํธ๋ฆฌ๋ฅผ ํ์ฅ์ํค๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์ ์ ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
๐ ๐ ๐
๐ CS ์ง๋ฌธ ์ ๋ฆฌ
1. ํด์ ํ ์ด๋ธ์ด๋ ๋ฌด์์ธ๊ฐ? ํด์ ํ ์ด๋ธ์ ์๊ฐ ๋ณต์ก๋๋ ์ด๋ป๊ฒ ๋๋๊ฐ?
>> ํด์ ํ ์ด๋ธ์ (Key, Value)์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋์ด๋ค. ๋ด๋ถ์ ์ผ๋ก ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ ๊ทผ์ด O(1)๋ก ๋ฌด์ฒ์ด๋ ๋น ๋ฅด๋ค. ๊ทธ๋ฌ๋ index์ ์ถฉ๋์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ, ์ถ๊ฐ์ ์ธ ์กฐํ๋ฅผ ์ํด Time Complexity๊ฐ O(N)๊น์ง ์ฆ๊ฐํ ์ ์๋ค.
2. ArrayList์ Linked List์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ.
>> ArrayList๋ ๋ฐ์ดํฐ๋ค์ด ์์๋๋ก ๋์ด์ ๋ฐฐ์ด์ ํํ๋ฅผ, Linked List๋ ์๋ฃ์ ์ฃผ์๊ฐ์ผ๋ก ์๋ก ์ฐ๊ฒฐ๋ ํ์์ ๊ฐ์ง๊ณ ์๋ค.
- ArrayList: ์ํ๋ ๋ฐ์ดํฐ์ ๋ฌด์์๋ก ์ ๊ทผํ ์ ์๋ค. ๋ฆฌ์คํธ์ ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ์์ผ๋ฉฐ ์ด๋ฅผ ์ฌ์กฐ์ ํ๋ ๋ฐ์๋ ๋ง์ ์ฐ์ฐ์ด ํ์ํ๋ค. ๋ํ ์ฝ์ /์ญ์ ์ ๊ฒฝ์ฐ ์์๋ฐฐ์ด์ ์์ฑํ์ฌ ๋ณต์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
- LinkedList: ๋ฆฌ์คํธ์ ํฌ๊ธฐ์ ์ํฅ์์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ์ ์๋ค. ์ฝ์ /์ญ์ ์ ๊ฒฝ์ฐ ์ธ์ ๋ฐ์ดํฐ์ ๋งํฌ๋ง ๋ณ๊ฒฝํ๋ฉด ๋๋ฏ๋ก ์๊ฐ์ด ๋งค์ฐ ๋น ๋ฅด๋ค. ๋จ, ๋ฌด์์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ๋ฐ์ดํฐ ์กฐํ์ ์์ฐจ์ ๊ทผ์ ํด์ผํ๋ฏ๋ก ์ฌ๊ธฐ์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
3. ํ์ ์คํ์ ๊ตฌํ์ ์ข์ ์๋ฃ๊ตฌ์กฐ๋?
>> ํ๋ List, ์คํ์ Array
- ํ(Queue): Array ๊ตฌํ์ poll ์ฐ์ฐ ์ดํ ๊ฐ์ฒด๋ฅผ ์๋น๊ธฐ๋ ์์ ์ด ํ์ํ๋ค. ํ์ง๋ง List๋ก ๊ตฌํํ๋ฉด ๊ฐ์ฒด 1๊ฐ๋ง ์ ๊ฑฐํ๋ฉด ๋๋ฏ๋ก ์ฝ์ /์ญ์ ๊ฐ ์ฉ์ดํ Linked List๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค.
- ์คํ(Stack): List๋ก ๊ตฌํํ๋ฉด ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๋ ์์ ์ด ํ์ํ๋ค. ํ์ง๋ง Array๋ก ๊ตฌํํ๋ฉด index๋ง ์ค์ด๊ณ ์ด๊ธฐํํ๋ฉด ๋๋ฏ๋ก ์ญ์ ์์ ์ ํ ํ์๊ฐ ์์ด์ง๋ค. ๋ฐ๋ผ์ Array๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค.
4. ํฌํ ์ด์งํธ๋ฆฌ, ์์ ์ด์งํธ๋ฆฌ, ์ ์ด์งํธ๋ฆฌ์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช ํ์์ค.
5. ํ์ ์๋ฃ๊ตฌ์กฐ์ ๋ํด ์ค๋ช ํ์์ค.
6. ๊ทธ๋ํ์ ํธ๋ฆฌ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ?
7. ์ต์์ ์ฅํธ๋ฆฌ์ ๋ํด ์ค๋ช ํ์์ค.
8. ๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌด์์ด ์๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ํน์ฑ์ ๋ํด ์ค๋ช ํ์์ค.
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ
'Programming > ์ทจ์ ์ค๋น&CS Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS ์คํฐ๋ #03] ๋คํธ์ํฌ-OSI 7๊ณ์ธต๊ณผ ๊ด๋ จ ํ๋กํ ์ฝ (0) | 2021.11.15 |
---|---|
[๋ฉด์ ์ค๋น] ๊ฐ๋ฐ์ "๊ธฐ์ " ๊ด๋ จ ๊ณตํต ์ง๋ฌธ๋ค ๋ชจ์ (0) | 2021.11.13 |
๋ฐ์ดํฐ ํฌ๋งท ์ ๋ฆฌ/ CSV, XML, JSON์ด๋ ๋ฌด์์ธ๊ฐ? (0) | 2021.11.12 |
[CS ์คํฐ๋ #02] ์ด์์ฒด์ (OS)-ํ๋ก์ธ์ค/์ค๋ ๋, CPU ์ค์ผ์ฅด๋ง (0) | 2021.11.04 |
[CS์คํฐ๋ #01] ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ (0) | 2021.11.02 |