๐ฉ๐ป ๊ทธ๋ํ (Graph)
์ ์ ๊ณผ ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ฃ๊ตฌ์กฐ (Cyclic)
- ์ฐ๊ฒฐ๋ ์ ์ ๊ฐ์ ๊ด๊ณ๋ฅผ ํํํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ
- ํธ๋ฆฌ์ ๋ค๋ฅธ์ ์ ํธ๋ฆฌ๋ an cyclic ์ด๋ผ๋ฉด ๊ทธ๋ํ๋ cyclic์ด๋ค. ***
- ๊ฐ์ ๋ผ๋ฆฌ ๊ฐ์ค์น๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
๊ทธ๋ํ์ ์ฉ๋ :
- ์งํ์ฒ ๋ ธ์ ๋, ํต์ ๋คํธ์ํฌ, ...
โ๏ธ ๊ทธ๋ํ ๊ตฌ์กฐ
- ์ ์ (Vertex) : ๊ฐ ๋ ธ๋
- ๊ฐ์ (Edge) : ๋ ธ๋์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ (Link, branch)
- ์ธ์ ์ ์ (Adjacent vertex) : ๊ฐ์ ํ๋๋ฅผ ๋๊ณ ๋ฐ๋ก ์ฐ๊ฒฐ๋ ์ ์
- ์ ์ ์ ์ฐจ์ (Degree):
- ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์์ ํ๋์ ์ ์ ์ ์ธ์ ํ ์ ์ ์ ์
- ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ ๋ชจ๋ ์ ์ ์ฐจ์์ ํฉ = ๊ทธ๋ํ ๊ฐ์ ์ ์ 2๋ฐฐ
- ์ง์ ์ฐจ์ (In-degree): ๋ฐฉํฅ ๊ทธ๋ํ์์ ์ธ๋ถ์์ ์ค๋ ๊ฐ์ ์ ์
- ์ง์ถ ์ฐจ์ (Out-degree): ๋ฐฉํฅ ๊ทธ๋ํ์์ ์ธ๋ถ๋ก ๋๊ฐ๋ ๊ฐ์ ์ ์
- ๊ฒฝ๋ก ๊ธธ์ด(Path length): ๊ฒฝ๋ก๋ฅผ ๊ตฌ์ฑํ๋๋ฐ ์ฌ์ฉ๋ ๊ฐ์ ์ ์
- ๋จ์ ๊ฒฝ๋ก (Simple path): ๊ฒฝ๋ก ์ค์์ ๋ฐ๋ณต๋๋ ์ ์ ์ด ์๋ ๊ฒฝ์ฐ
- ์ฌ์ดํด(Cycle): ๋จ์ ๊ฒฝ๋ก์ ์์ ์ ์ ๊ณผ ๋ ์ ์ ์ด ๋์ผํ ๊ฒฝ์ฐ
โ๏ธ ๊ทธ๋ํ์ ํน์ง๊ณผ ํธ๋ฆฌ์์ ์ฐจ์ด
๊ทธ๋ํ | ํธ๋ฆฌ | |
๊ฐ์ | ๋ ธ๋์ ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ฃ๊ตฌ์กฐ | ๊ทธ๋ํ์ ํ ์ข ๋ฅ |
๋ฐฉํฅ์ฑ | ๋ฐฉํฅ ๊ทธ๋ํ, ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ | ๋ฐฉํฅ ๊ทธ๋ํ |
์ฌ์ดํด | Cyclic | Acyclic |
๋ชจ๋ธ | ๋คํธ์ํฌ ๋ชจ๋ธ | ๊ณ์ธต ๋ชจ๋ธ |
๋ฃจํธ ๋ ธ๋ | ๋ฃจํธ ๋ ธ๋ X | ์ต์์ ๋ ธ๋ |
๋ถ๋ชจ-์์ | ๋ถ๋ชจ-์์ ๊ด๊ณ X | ์ธ์ ํ ์ํ์ ๋ ธ๋ |
๊ฐ์ ์ | ๊ทธ๋ํ์ ๋ฐ๋ผ ๊ฐ์ ๊ฐ์ ๋ค๋ฆ | N๊ฐ์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ ํธ๋ฆฌ์ ๊ฐ์ ์๋ N-1๊ฐ |
์ํ | DFS, BFS | Pre-, In, Post-order / Level-order |
๊ฒฝ๋ก | 2๊ฐ ์ด์์ ๊ฒฝ๋ก ๊ฐ๋ฅ | ๋ ๋ ธ๋ ๊ฐ์ ๊ฒฝ๋ก๋ 1๊ฐ |
โ๏ธ ๊ทธ๋ํ์ ์ข ๋ฅ
1) ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ
- ๊ฐ์ ์ ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ (์๋ฐฉํฅ ์ด๋ ๊ฐ๋ฅ)
- ์ ์ A - B ๊ฐ์ ์ ํํ : (A,B) = (B, A)
2) ๋ฐฉํฅ ๊ทธ๋ํ
- ๊ฐ์ ์ ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ (ํด๋น ๋ฐฉํฅ์ผ๋ก๋ง ์ด๋ ๊ฐ๋ฅ)
- ์ ์ A-> B ๊ฐ์ ์ ํํ : <A,B> != <B,A>
1) ๊ฐ์ค์น ๊ทธ๋ํ
- ๊ฐ์ ์ ๊ฐ์ด ์๋ ๊ทธ๋ํ (์ด๋ ๋น์ฉ)
2) ์์ ๊ทธ๋ํ
- ๋ชจ๋ ์ ์ ์ด ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๊ทธ๋ํ
- ์ ์ ์ด N๊ฐ์ผ ๊ฒฝ์ฐ, ๊ฐ์ ์ ์๋ n(n-1)/2๊ฐ
โ๏ธ ๊ทธ๋ํ ํ์ - DFS
โจ ๊น์ด ์ฐ์ ํ์ (Depth First Search)
๊ฐ ๋ ธ๋์ ๋ฐฉ๋ฌธํ๋์ง ์ฌ๋ถ๋ฅผ ์ฒดํฌํ ๋ฐฐ์ด๊ณผ ์คํ ์ด์ฉํ์ฌ ๊ตฌํ
* ๋ ธ๋์ ๊ฐ์๋งํผ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง ๋ฐฐ์ด ์ ์ธ ํ ๋ฐฉ๋ฌธํ์ผ๋ฉด 1์ ๋ฃ์ด์ฃผ๋ฉฐ ๋ฐ๋ณต
(์ฐ์ธก ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋์ค๊ฒ ํ๊ธฐ ์ํด์ ์งํํด๋ณด๋ฉด)
Stack์ A๋ฅผ ๋ฃ๊ณ , D,C,B๋ฅผ ์์๋๋ก stack์ ์ฝ์
-> ๋ ์ด์ ๊ทผ์ฒ์ ๋ฐฉ๋ฌธํ ๊ฒ ์์ผ๋ฏ๋ก B๋ฅผ ์คํ์์ ๊บผ๋ธ๋ค B์ ์ธ์ ํ ๋ ธ๋๋ค๋ก ๋ฐ๋ณต
-> E๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฐ์ด์ 1 ๋ก ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ํ ๋ ์ด์ ๊ฐ ๊ณณ์ด ์์ผ๋ฏ๋ก E ๊บผ๋
-> E์์ ์ธ์ ํ ๋ ธ๋ D,G์ค D๋ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ๋์ด ์์ผ๋ฏ๋ก G๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ํ ๋ฃ๊ณ , ๋ ์ด์ ์์ผ๋ฏ๋ก G๋ฅผ ๊บผ๋
-> G์์ ์ธ์ ํ ๋ ธ๋ F๋ฅผ ๋ฃ๊ณ ๋ ๋ฐ๋ณต
-> F์์๋ ๋ ์ด์ ๊ฐ ๋ ธ๋๊ฐ ์์ผ๋ฏ๋ก (๋ค ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ๋ ๊ฒ ๋ฐ์ ์์) ์คํ์์ ํ๋ ๋ ๊บผ๋ (C)
-> C๋ ๋ ์ด์ ๊ฐ ๋ ธ๋๊ฐ ์์ผ๋ฏ๋ก ๋๋จธ์ง ๋ง์ง๋ง ๋ ธ๋์ธ D๋ฅผ ๊บผ๋
โ๏ธ ๊ทธ๋ํ์ ๊ตฌํ
โจ 1) ์ธ์ ํ๋ ฌ (Adjacency Matrix)
ใด 2์ฐจ์ ๋ฐฐ์ด ์ด์ฉ
๐ซ ์ธ์ ํ๋ ฌ์ ์ฅ๋จ์
- ๊ฐ์ ์ ๋ณด์ ํ์ธ๊ณผ ์ ๋ฐ์ดํธ๊ฐ ๋น ๋ฆ O(1)
- ์ธ์ ํ๋ ฌ์ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ฐจ์ง
โจ 2) ์ธ์ ๋ฆฌ์คํธ (Adjacency List)
ใด ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ด์ฉ
๐ซ ์ธ์ ๋ฆฌ์คํธ์ ์ฅ๋จ์
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์๋์ ์ผ๋ก ์ ๊ณ , ๋ ธ๋์ ์ถ๊ฐ ์ญ์ ๊ฐ ๋น ๋ฆ
- ๊ฐ์ ์ ๋ณด ํ์ธ์ด ์๋์ ์ผ๋ก ์ค๋ ๊ฑธ๋ฆผ
โจ ์ธ์ ํ๋ ฌ VS ์ธ์ ๋ฆฌ์คํธ
์ธ์ ํ๋ ฌ : ๋ ธ๋์ ๊ฐ์๊ฐ ์ ๊ณ , ๊ฐ์ ์ ์๊ฐ ๋ง์ ๋ ์ ๋ฆฌ. ๋ฐ์ง ๊ทธ๋ํ (Dense Graph)
์ธ์ ๋ฆฌ์คํธ : ๋ ธ๋์ ๊ฐ์๊ฐ ๋ง๊ณ , ๊ฐ์ ์ ์๊ฐ ์ ์ ๋ ์ ๋ฆฌ. ํฌ์ ๊ทธ๋ํ (Sparse Graph)
์ธ์ ํ๋ ฌ | ์ธ์ ๋ฆฌ์คํธ | |
ํน์ ๊ฐ์ ๊ฒ์ | O(1) | O(degree(V)) |
์ ์ ์ ์ฐจ์ ๊ณ์ฐ | O(N) | O(degree(V)) |
์ ์ฒด ๋ ธ๋ ํ์ | O(N^2) | O(E) |
๋ฉ๋ชจ๋ฆฌ | N * N | N + E |
N: ์ ์ฒด ์ ์ ๊ฐ์ / E : ์ ์ฒด ๊ฐ์ ๊ฐ์
'์๊ณ ๋ฆฌ์ฆ > ์๋ฃ๊ตฌ์กฐ ์ด๋ก ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํธ๋ผ์ด (Trie) - ๋น์ ํ ์๋ฃ๊ตฌ์กฐ (0) | 2024.07.17 |
---|---|
์ฐ์ ์์ ํ (Priority Queue) - ๋น์ ํ ์๋ฃ๊ตฌ์กฐ (0) | 2024.07.17 |
๊ท ํ ์ด์ง ํธ๋ฆฌ (by ์ด์ง ํ์ ํธ๋ฆฌ) (0) | 2024.07.12 |
์ด์ง ํ์ ํธ๋ฆฌ (Binary search tree) BST - ์๋ฃ๊ตฌ์กฐ (0) | 2024.07.03 |
java - ๋นํธ ์ฐ์ฐ์ (0) | 2024.06.26 |