- ํธ๋ฆฌ
- ๋ ธ๋๋ก ์ด๋ฃจ์ด์ง ์๋ฃ๊ตฌ์กฐ
- ์ฌ๊ท์ ์ค๋ช
๋ฒ
- ํธ๋ฆฌ๋ ํ๋์ ๋ฃจํธ ๋ ธ๋๋ฅผ ๊ฐ๋๋ค.
- ๋ฃจํธ ๋ ธ๋๋ 0๊ฐ ์ด์์ ์์ ๋ ธ๋๋ฅผ ๊ฐ๊ณ ์๋ค.
- ๊ทธ ์์ ๋ ธ๋ ๋ํ 0๊ฐ ์ด์์ ์์ ๋ ธ๋๋ฅผ ๊ฐ๊ณ ์๊ณ , ์ด๋ ๋ฐ๋ณต์ ์ผ๋ก ์ ์๋๋ค.
- ์ฌ์ดํด ์กด์ฌ X
- ๋ ธ๋๋ค์ด ํน์ ์์๋ก ๋์ด O or X
- ๊ฐ ๋ ธ๋๋ ๋ถ๋ชจ ๋ ธ๋๋ก์ ์ฐ๊ฒฐ์ด O or X
- ๊ฐ ๋ ธ๋๋ ์ด๋ค ์๋ฃํ์ผ๋ก๋ ํํ ๊ฐ๋ฅํ๋ค.
class Node {
public String name;
public Node[] children;
}
๋ชจ๋ ํธ๋ฆฌ๊ฐ ์ด์ง ํธ๋ฆฌ๋ ์๋๋ค.
-
์ด์ง ํธ๋ฆฌ(binary tree)
- ๊ฐ ๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์์ ๊ฐ๋ ํธ๋ฆฌ
-
์ผ์ง ํธ๋ฆฌ(ternary tree), ..., 10์ฐจ ํธ๋ฆฌ(10-ary tree)
-
์ด์ง ํ์ ํธ๋ฆฌ(binary search tree)
-
๋ชจ๋ ๋ ธ๋๊ฐ ๋ค์๊ณผ ๊ฐ์ ํน์ ์์๋ฅผ ๋ฐ๋ฅด๋ ์์ฑ์ด ์๋ ์ด์ง ํธ๋ฆฌ
๋ชจ๋ ์ผ์ชฝ ์์๋ค <= n <= ๋ชจ๋ ์ค๋ฅธ์ชฝ ์์๋ค (for ๋ชจ๋ ๋ ธ๋ n)
-
๊ฐ์ ๊ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋ฐ๋ผ ์ด์ง ํ์ ํธ๋ฆฌ๋ ์ฝ๊ฐ์ฉ ์ ์๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค.
-
๋ถ๋ฑ์์ ๊ฒฝ์ฐ์ ๋ํด์๋ ๋ฐ๋ก ์๋ ์์๋ฟ๋ง ์๋๋ผ ๋ด ๋ฐ์ ์๋ ๋ชจ๋ ์์ ๋ ธ๋๋ค์ ๋ํด์ ์ฐธ์ด์ด์ผ ํ๋ค.
-
- ๊ท ํ์ ์ก๋๋ค != ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ๋ถ๋ถ ํธ๋ฆฌ์ ํฌ๊ธฐ๊ฐ ์์ ํ ๊ฐ๊ฒ ํ๋ค. (like ์์ ์ด์ง ํธ๋ฆฌ)
- O(logN) ์๊ฐ์ insert๊ณผ find๋ฅผ ํ ์ ์์ ์ ๋๋ก ๊ท ํ์ด ์ ์กํ ์์ง๋ง, ๊ทธ๋ ๋ค๊ณ ๊ผญ ์๋ฒฝํ๊ฒ ๊ท ํ ์กํ ์์ ํ์๋ ์๋ค.
- ๊ท ํ ํธ๋ฆฌ์ ์ผ๋ฐ์ ์ธ ์ ํ
- ๋ ๋-๋ธ๋ ํธ๋ฆฌ
- AVL ํธ๋ฆฌ
- ์์ ์ด์งํธ๋ฆฌ(complete binary tree)
- ํธ๋ฆฌ์ ๋ชจ๋ ๋์ด์์ ๋ ธ๋๊ฐ ๊ฝ ์ฐจ ์๋ ์ด์ง ํธ๋ฆฌ
- ๋ง์ง๋ง ๋จ๊ณ(level)๋ ๊ฝ ์ฐจ ์์ง ์์๋ ๋์ง๋ง ๋ ธ๋๊ฐ ์ผ์ชฝ๋ถํฐ ์ฑ์์ ธ์ผ ํ๋ค.
- ์ ์ด์ง ํธ๋ฆฌ(full binary tree)
- ๋ชจ๋ ๋ ธ๋์ ์์์ด 0๊ฐ or 2๊ฐ
- ์์์ด 1๊ฐ์ธ ๋ ธ๋๋ ์กด์ฌํ์ง X
- ํฌํ ์ด์ง ํธ๋ฆฌ(perfect binary tree)
- ์ ์ด์ง ํธ๋ฆฌ(full binary tree) && ์์ ์ด์ง ํธ๋ฆฌ(complete binary tree)
- ๋ชจ๋ ๋ง๋จ ๋ ธ๋๋ ๊ฐ์ ๋์ด์ ์์ด์ผ ํ๋ฉฐ, ๋ง์ง๋ง ๋จ๊ณ์์ ๋ ธ๋์ ๊ฐ์๊ฐ ์ต๋๊ฐ ๋์ด์ผ ํ๋ค.
- ๋ ธ๋์ ๊ฐ์๊ฐ ์ ํํ 2^k - 1(k: ํธ๋ฆฌ์ ๋์ด)๊ฐ์ฌ์ผ ํ๋ค.
๊ฐ์ฅ ๋น๋ฒํ๊ฒ ์ฌ์ฉ๋๋ ์ํ ๋ฐฉ์์ ์ค์ ์ํ์ด๋ค.
- ์ค์ ์ํ(in-order traversal)
- ์ผ์ชฝ ๊ฐ์ง(branch) -> ํ์ฌ ๋ ธ๋ -> ์ค๋ฅธ์ชฝ ๊ฐ์ง ์์๋ก ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ
- ์ด์ง ํ์ ํธ๋ฆฌ + ์ค์ ์ํ: ์ค๋ฆ์ฐจ์ ๋ฐฉ๋ฌธ
- ์ ์ ์ํ(pre-order traversal)
- ํ์ฌ ๋ ธ๋ -> ์์ ๋ ธ๋(๋ณดํต ์ผ์ชฝ ๊ฐ์ง -> ์ค๋ฅธ์ชฝ ๊ฐ์ง) ์์๋ก ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ
- ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฌธ: ๋ฃจํธ ๋ ธ๋
- ํ์ ์ํ(post-order traversal)
- ์์ ๋ ธ๋(๋ณดํต ์ผ์ชฝ ๊ฐ์ง -> ์ค๋ฅธ์ชฝ ๊ฐ์ง) -> ํ์ฌ ๋ ธ๋ ์์๋ก ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ
- ๋ง์ง๋ง ๋ฐฉ๋ฌธ: ๋ฃจํธ ๋ ธ๋
- ์ต์ํ(min-heaps)
- ํธ๋ฆฌ์ ๋ง์ง๋ง ๋จ๊ณ์์ ์ค๋ฅธ์ชฝ ๋ถ๋ถ์ ๋บ ๋๋จธ์ง ๋ถ๋ถ์ด ๊ฐ๋ ์ฑ์์ ธ ์์ -> ์์ ์ด์ง ํธ๋ฆฌ(complete binary tree)
- ๊ฐ ๋ ธ๋์ ์์๊ฐ ์์๋ค์ ์์๋ณด๋ค ์๋ค.
- ๋ฃจํธ: ํธ๋ฆฌ ์ ์ฒด์์ ๊ฐ์ฅ ์์ ์์
- ์ต๋ํ(max-heaps)
- ์ต์ํ๊ณผ์ ์ฐจ์ด: ์์๊ฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋จ
- ์ต์ํ์ ์๋ก์ด ์์ ์ฝ์ ์: ํธ๋ฆฌ ๋ฐ๋ฐ๋ฅ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์์น๋ก ์ฝ์
- ์๋ก ์ฝ์ ๋ ์์๊ฐ ์ ๋๋ก ๋ ์๋ฆฌ๋ฅผ ์ฐพ์ ๋๊น์ง ๋ถ๋ชจ ๋ ธ๋์ ๊ตํํด ๋๊ฐ๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ต์ ์์๋ฅผ ์์ชฝ์ผ๋ก ์ฌ๋ฆฐ๋ค.
- Time complexity: O(logN) (N: ํ ๋ ธ๋ ๊ฐ์)
-
์ต์ํ์ ์ต์๊ฐ: ๋ฃจํธ ๋ ธ๋์ ์์น
-
์ต์๊ฐ ์ ๊ฑฐ ๋ฐฉ๋ฒ
-
์ต์ ์์๋ฅผ ์ ๊ฑฐํ ํ ํ์ ์๋ ๊ฐ์ฅ ๋ง์ง๋ง ์์(๋ฐ๋ฐ๋ฅ ๊ฐ์ฅ ์ผ์ชฝ์ ์์นํ ์์)์ ๊ตํํ๋ค.
-
์ต์ํ ์ฑ์ง์ ๋ง์กฑํ๋๋ก, ํด๋น ๋ ธ๋๋ฅผ ์์ ๋ ธ๋์ ๊ตํํด ๋๊ฐ์ผ๋ก์จ ๋ฐ์ผ๋ก ๋ด๋ณด๋ธ๋ค.
-
์ผ์ชฝ ์์๊ณผ ์ค๋ฅธ์ชฝ ์์ ์ค ๋๊ตฌ์ ๊ตํํด์ผ ํ๋๊ฐ?
์ต์ํ์ ์์ฑ์ ์ ์งํ๊ธฐ ์ํด์ ๋ ์์ ์์์ ๊ตํํด์ผ ํ๋ค.
-
-
-
Time complexity: O(logN)
- ํธ๋ผ์ด(trie) = ์ ๋์ฌ ํธ๋ฆฌ(prefix tree)
- n-์ฐจ ํธ๋ฆฌ(n-ary tree)์ ๋ณ์ข ์ผ๋ก ๊ฐ ๋ ธ๋์ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ
- ํน์ง
- ํธ๋ฆฌ๋ฅผ ์๋์ชฝ์ผ๋ก ์ํํ๋ฉด ๋จ์ด ํ๋๊ฐ ๋์จ๋ค.
- ๊ฐ ๋
ธ๋๋ 1๊ฐ์์ ALPHABET_SIZE + 1๊ฐ๊น์ง ์์์ ๊ฐ๊ณ ์์ ์ ์๋ค. (
*
๋ ธ๋ ๋์ ๋ถ๋ฆฐ ํ๋๊ทธ๋ก ํํํ๋ค๋ฉด 0๊ฐ์์ ALPHABET_SIZE๊น์ง) - ์ ๋์ฌ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์๋ณด๊ธฐ ์ํ ์์ฃผ ํํ ๋ฐฉ์
- ๋ ๋
ธ๋(null node)
- ๋จ์ด์ ๋์ ๋ํ๋
- ๊ตฌํ ๋ฐฉ๋ฒ
*
๋ ธ๋- TrieNode๋ฅผ ์์ํ TerminatingTrieNode
- ๋ถ๋ชจ TrieNode์ ๋ถ๋ฆฐ ํ๋๊ทธ
ํธ๋ฆฌ(tree)๋ ๊ทธ๋ํ(graph)์ ํ ์ข ๋ฅ๋ค. ํธ๋ฆฌ๋ ์ฌ์ดํด(cycle)์ด ์๋ ํ๋์ ์ฐ๊ฒฐ ๊ทธ๋ํ(connected graph)์ด๋ค.
-
๊ทธ๋ํ
- ๋ ธ๋์ ๊ทธ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฐ์ (edge)์ ํ๋๋ก ๋ชจ์ ๋์ ๊ฒ
-
ํน์ง
- ๋ฐฉํฅ์ฑ
- O: ๋จ๋ฐฉํฅ ๊ทธ๋ํ(directed graph) -> ์ผ๋ฐฉํตํ ๋๋ก
- X: ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ(undirected graph) -> ์๋ฐฉํฅ ํตํ ๋๋ก
- ์ฐ๊ฒฐ์ฑ
- ์ฌ๋ฌ ๊ฐ์ ๊ณ ๋ฆฝ๋ ๋ถ๋ถ ๊ทธ๋ํ(isolated subgraphs)
- ์ฐ๊ฒฐ ๊ทธ๋ํ(connected graph): ๋ชจ๋ ์ ์ ์(a pair of vertices) ๊ฐ์ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๋ ๊ทธ๋ํ
- ์ฌ์ดํด
- O: ์ํ ๊ทธ๋ํ(cyclic graph)
- X: ๋น์ํ ๊ทธ๋ํ(acyclic graph)
- ๋ฐฉํฅ์ฑ
-
๊ทธ๋ํ ํํ ๋ฐฉ๋ฒ
- ์ธ์ ๋ฆฌ์คํธ
- ์ธ์ ํ๋ ฌ
- ์ธ์ ๋ฆฌ์คํธ(adjacency list)
- ๋ชจ๋ ์ ์ (= ๋ ธ๋)์ ์ธ์ ๋ฆฌ์คํธ์ ์ ์ฅํ๋ค.
- ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ(undirected graph)์์ (a, b) ๊ฐ์ ์ ๋ ๋ฒ ์ ์ฅ๋๋ค.
- ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ
class Node {
public String name;
public Node[] children;
}
class Graph {
public Node[] nodes;
}
- ์ธ์ ํ๋ ฌ(adjacency matrix)
- N*N ๋ถ๋ฆฐ ํ๋ ฌ
matrix[i][j] == true
:i
์์j
๋ก์ ๊ฐ์ ์ด ์๋ค.
- ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ๋ฅผ ์ธ์ ํ๋ ฌ๋ก ํํํ๋ฉด ์ด ํ๋ ฌ์ ๋์นญํ๋ ฌ(symmetric matrix)์ด ๋๋ค.
- ์ธ์ ๋ฆฌ์คํธ์ ๋นํด ํจ์จ์ฑ์ด ๋จ์ด์ง๋ค.
- ์ธ์ ๋ฆฌ์คํธ: ์ด๋ค ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋๋ค์ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.
- ์ธ์ ํ๋ ฌ: ์ด๋ค ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋๋ฅผ ์ฐจ์ง ์ํด์๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ์ ๋ถ ์ํํด์ผ ํ๋ค.
- N*N ๋ถ๋ฆฐ ํ๋ ฌ
- ๊ทธ๋ํ ํ์ ๋ฐฉ๋ฒ
- ๊น์ด ์ฐ์ ํ์
- ๋๋น ์ฐ์ ํ์
-
๊น์ด ์ฐ์ ํ์
- ๋ฃจํธ ๋ ธ๋(ํน์ ๋ค๋ฅธ ์์์ ๋ ธ๋)์์ ์์ํด์ ๋ค์ ๋ถ๊ธฐ(branch)๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํด๋น ๋ถ๊ธฐ๋ฅผ ์๋ฒฝํ๊ฒ ํ์ํ๋ ๋ฐฉ๋ฒ
- a์ ์ด์์ธ b์ ๋ถ๊ธฐ๋ฅผ ์ ๋ถ ์๋ฒฝํ๊ฒ ํ์ํ ๋ค์์ผ a์ ๋ค๋ฅธ ์ด์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ์ ์๋ค.
-
ํน์ง
- ๊ทธ๋ํ์์ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ์ ํ ๋ ๋ ์ ํธ๋๋ ๋ฐฉ๋ฒ(๋ ๊ฐ๋จ)
- ์ ์ ์ํ๋ฅผ ํฌํจํ ๋ค๋ฅธ ํํ์ ํธ๋ฆฌ ์ํ๋ ๋ชจ๋ DFS์ ํ ์ข
๋ฅ
- ํธ๋ฆฌ ์ํ์ ๊ทธ๋ํ ํ์์ ์ฐจ์ด์ : ๊ทธ๋ํ ํ์์ ์ด๋ค ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์๋์ง ์ฌ๋ถ๋ฅผ ๋ฐ๋์ ๊ฒ์ฌํด์ผ ํ๋ค.
-
๊ตฌํ ๋ฐฉ๋ฒ
- ์ฌ๊ท ํธ์ถ
- Stack
void search(Node root) {
if (root == null) return;
visit(root);
root.visited = true; // ๋ฐฉ๋ฌธ ์ฒดํฌ
for (Node n : root.adjacent) {
if (n.visited == false) {
search(n);
}
}
}
-
๋๋น ์ฐ์ ํ์
- ๋ฃจํธ ๋ ธ๋(ํน์ ๋ค๋ฅธ ์์์ ๋ ธ๋)์์ ์์ํด์ ์ธ์ ํ ๋ ธ๋๋ฅผ ๋จผ์ ํ์ํ๋ ๋ฐฉ๋ฒ
- a ๋ ธ๋์ ์ด์ ๋ ธ๋๋ฅผ ๋ชจ๋ ๋ฐฉ๋ฌธํ ๋ค์์ ์ด์์ ์ด์๋ค์ ๋ฐฉ๋ฌธํ๋ค. ์ฆ, a์์ ์์ํด์ ๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ ๋จ๊ณ๋ณ๋ก ํ์ํ๋ค.
-
ํน์ง
- ๋ ๋ ธ๋ ์ฌ์ด์ ์ต๋จ ๊ฒฝ๋ก ํน์ ์์์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ณ ์ถ์ ๋ ๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ
- DFS๋?
- ์ ๋ต์์ ๋๋จ์ด์ง ๊ฒฝ๋ก๋ฅผ ๊ณ์ํด์ ํ์ํ ์ ์๋ค.
- ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์๊ฒ ์ง๋ง ๊ต์ฅํ ์ค๋๊ฑธ๋ฆฌ๊ณ ์ต๋จ ๊ฒฝ๋ก๊ฐ ์๋ ์ ์๋ค.
-
๊ตฌํ ๋ฐฉ๋ฒ
- Queue
void search(Node root) {
Queue queue = new LinkedList();
root.marked = true;
queue.enqueue(root);
while (!queue.isEmpty()) {
Node r = queue.dequeue();
visit(r);
for (Node n : root.adjacent) {
if (n.visited == false) {
n.marked = true; // ๋ฐฉ๋ฌธ ์ฒดํฌ
queue.enqueue(n);
}
}
}
}
- ์๋ฐฉํฅ ํ์
- ์ถ๋ฐ์ง์ ๋์ฐฉ์ง ๋ ๋ ธ๋์์ ๋์์ ๋๋น ์ฐ์ ํ์์ ์ํํ ๋ค, ๋ ํ์ ์ง์ ์ด ์ถฉ๋ํ๋ ๊ฒฝ์ฐ์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฐฉ์
- ํน์ง
- ์ถ๋ฐ์ง์ ๋์ฐฉ์ง ์ฌ์ด์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ๋จ
- ๋ ธ๋ ์ฌ์ด์ ๊ฒฝ๋ก
- ์ต์ ํธ๋ฆฌ
- ๊น์ด์ ๋ฆฌ์คํธ
- ๊ท ํ ํ์ธ
- BST ๊ฒ์ฆ
- ํ์์
- ์์ ์ ํ๊ธฐ
- ์ฒซ ๋ฒ์งธ ๊ณตํต ์กฐ์
- BST ์์ด
- ํ์ ํธ๋ฆฌ ํ์ธ
- ์์์ ๋ ธ๋
- ํฉ์ ๊ฒฝ๋ก