์ค๋๋ง์ ๊ณต๋ฐฑ์ ๊นจ๊ณ ! ์๋ฃ ๊ตฌ์กฐ ์ ๋ฆฌ๋ฅผ ๊ณ์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.^^;
1. ๊ธฐ๋ณธ ๊ฐ๋
¶
- Vertex( ์ )
- Edge( ์ )
- Directed Graph - Edge์ ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ
- Undirected Graph - Edge์ ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ
2. ํ๋ถ ๊ทธ๋ฆฌ๊ธฐ ¶
- ๋ชจ๋ Vertex์ Edge๊ฐ ์ง์๊ฐ ์ผ๋
- Vertex์ Edge์ ์๊ฐ ํ์๊ฐ์ธ ๊ฒ์ด 2๊ฐ์ผ๋
3. ํํ ¶
~cpp
์๋ฐ ๋ชจ์์ Undirected Graph๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ์๋ค.
2
/ |
0 - 1 |
| /
3
์์ ๋ณผ์ ์์๋ฐ์ง..--;
V = { 0, 1, 2, 3 }
E = { (0,1), (1,3), (1,2), (2,3) }
- 2์ฐจ์ ๋ฐฐ์ด๋ก ํํํฉ๋๋ค. ์ ์ ์ด๋ฆ์ Adjacency Matrix(๋ง๋?--;)
- ๋จผ์ Undirected Graph
| 0 | 1 | 2 | 3 |
0 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 1 | 1 |
2 | 0 | 1 | 0 | 1 |
3 | 0 | 1 | 1 | 0 |
- Vertex ์ฌ์ด์ Edge๊ฐ ์กด์ฌํ ๋ ๊ทธ ๊ณณ์ ๊ฐ์ 1๋ก ์
ํ
- LeftUpper -> RightLower ๋๊ฐ์ ์ ๊ธฐ์ค์ผ๋ก ๋์นญ
- ๋ค์์ Directed Graph
~cpp
2
/ |
0 <- 1 |
| /
3
* .... ํ์ดํ ํํํ๊ธฐ๊ฐ ์์ธํ๊ตฐ์..--; ์ด์จ๋ < Vertex1, Vertex2 > ์๋ฐ ํํ์ ์๋๋ค.
* ๋ง์ฝ์ Vertex1 -> Vertex2์ ๋ฐฉํฅ์ผ๋ก Edge๊ฐ ์๋ค๋ฉด < Vertex1, Vertex2 > ์ด๋ ๊ฒ ์ด๋จ ๋ง์
๋๋ค.
* ํ์ดํ๋ฅผ ๊ทธ๋ฆด์ ์๋ ๊ด๊ณ๋ก ์์์์ผ๋ก ํํํ๋ฉด
* <1,0>, <2,1>, <3,1>, <3,2>
| 0 | 1 | 2 | 3 |
0 | 0 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 0 |
2 | 0 | 1 | 0 | 0 |
3 | 0 | 1 | 1 | 0 |
- | - ๋ฐฉํฅ์ผ๋ก Edge๊ฐ ์กด์ฌํ ๋ 1๋ก ์
ํ
- LeftUpper -> RightLower ๋๊ฐ์ ์ ๊ธฐ์ค์ผ๋ก ๋์นญ์ด ์๋
3.2. ๋ฆฌ์คํธ ¶
- Adjacency List(Linked List๋ก ํํ)
0 | -> | 1 | X | | | | | | |
1 | -> | 0 | - | -> | 2 | - | -> | 3 | X |
2 | -> | 1 | - | -> | 3 | X | |
3 | -> | 1 | - | -> | 2 | X | |
3.3. ๋ฐฐ์ด๋ก ํํํ Graph์ ๋ฆฌ์คํธ๋ก ํํํ Graph์ ๋น๊ต ¶
- ๋ Vertex ์ฌ์ด์ Edge๊ฐ ์๋์?
- ๋ฐฐ์ด : ฮธ(1) - 2์ฐจ์ ๋ฐฐ์ด์ ์ฒจ์๋ก arxy ๋จ๋ฒ์ ์ ๊ทผ ๊ฐ๋ฅ! ๊ณ ๋ก ๋ฐฐ์ด์ด ์ข๋จ ๋ง์
๋๋ค.
- ๋ฆฌ์คํธ : ฮธ(n)
- ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ( n๊ฐ์ Vertices, e๊ฐ์ Edges )
- ๋ฐฐ์ด : ฮธ(n^2) - n X n ๊ฐ์ ๋ฐฐ์ด์ ์ก์ผ๋ ๋น์ฐํ n^2 --;
- ๋ฆฌ์คํธ : ์์ ๋ฆฌ์คํธ๋ก ๋ ๊ทธ๋ํ ํํ์ ๋ณด๋ฉด Head Node์ ์๋ n๊ฐ๊ฐ ํ์ํ๊ณ Head Node๋ก๋ถํฐ ๋ป์ด๋์ค๋ Node์ ์ด ์๋ 2*e ๊ฐ๊ฐ ํ์ํ๋ค. ฮธ(n+e) ๊ณ ๋ก ๋ฆฌ์คํธ๊ฐ ์ ๋ฆฌํ๋จ ๋ง์
๋๋ค.
- ํ๊ฐ์ง๋ : Weighted Graph์ ํํ๋ฒ
- ๋ฐฐ์ด : 1๋์ Weight๋ฅผ ๋ฃ์ด์ค๋ค.
- ๋ฆฌ์คํธ : ํ๋๋ฅผ ํ๋ ์ถ๊ฐํ์. (๊ท์ฐฎ๋ค)
- ๊ฒฐ๋ก : ๋ญ๊ฐ ๋ ๋ณ๋ค ๊ผด์๋ค ํ ๊ทธ๋ฐ๊ฑด ์์ง๋ง.. ๊ตฌํ์ ํธ๋ฆฌ์ฑ๊ณผ ๊ฐ์ ๋ถ์์ ์ธ ๊ฒ์ ๋ฐ์ ธ๋ณผ๋ ๋ฐฐ์ด์ ์ ์ฉํ๋๊ฒ ์ข์๊ฒ ๊ฐ๋จ ๋ง์
๋๋ค!
4. ๊ธฐ๋ณธ ์ฐ์ฐ ¶
- Traversal(ํ์)
- Depth First Search(์ฐ๋ฆฌ๋ง๋ก ๊น์ด ์ฐ์ ํ์) : ํ์ฐ๋ฌผ์ ์ญ ํ๋๊ฐ๋ค๋ ๋ง์
๋๋ค. ๊ฐ๋ค๊ฐ ๋งํ๋ฉด ๋นฝ. ์คํ ์ด์ฉ(๋๋ ์ฌ๊ท). ์ฒ์์ผ๋ก ๋์์ค๋ฉด ์ซ๋๋ต๋๋ค.
- Breadth First Search(์ฐ๋ฆฌ๋ง๋ก ๋๋น ์ฐ์ ํ์) : ์ฒจ Vertex๋ฅผ ํ์ ๋ฃ์ต๋๋ค. ๋บ๋๋ค. ๊ฑฐ๊ธฐ์ ์ด์ด์ง Vertex๋ฅผ ํ์ ๋ค ๋ฃ์ต๋๋ค. ์์์๋ถํฐ ๋นผ๋ฉด์ ๊ทธ ๋
ธ๋์ ์ฐ๊ฒฐ๋ Vertex๋ฅผ ๊ณ์ ์ถ๊ฐ์์ผ์ค๋๋ค. Queue๊ฐ ๋น๊ฒ ๋๋ฉด ์ซ๋๋ ๊ฑฐ๋๋๋ค. ๋๋น ์ฐ์ ํ์์ ํธ๋ฆฌ์ ์ ์ฉ์ํค๋ฉด ๊ทธ๊ฒ ๋ฐ๋ก Level Order๊ฐ ๋๋ ๊ฒ์ด๋ ๋ง์ด์ ธ.
5. ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ(Minimum Cost Spanning Trees) ¶
- Weighted Graph์ ์ ์ฉ, ์ฒซ Vertex์์ ๋ง์ง๋ง Vertex๊น์ง ๋์ด์ง์ง ์๊ฒ ํ๋ฒ์ ๊ทธ๋ฆฐ๋ค.
- Kruskal's Algorithm
- Edge๋ค์ Cost ์์ผ๋ก Sort(์์๊ฒ๋ถํฐ)
- Edge๋ค์ ์์์ ๋ฐ๋ผ ํ๋์ฉ ์ฐ๊ฒฐํ๋ค. ์ฐ๊ฒฐํ๋ค๊ฐ Cycle์ด ์๊ธฐ๋ฉด ๊ทธ๊ฒ์ ์์ง๋ง๊ณ ์ ๊ฑฐํ๋ค. ๋ค ์ด์ด์ง๋ฉด ๊ทธ๋ง๋๋ค.
- Prim's Algorithm
- Vertex๋ฅผ ํ๋ ์ ํํ๋ค.
- ๊ฑฐ๊ธฐ์ ์ด์ด์ง Edge์ค ๊ฐ์ฅ ์์๊ฒ์ ์ ํํ๋ค.
- ๊ทธ Edge์ ์ด์ด์ง Vertex์ ์ฒ์์ Vertex์ ์ด์ด์ง Edge์ค ๊ฐ์ฅ ์์๊ฑธ ์ ํํ๋ค.
- ์ด์ง์ ๋ฐ๋ณตํ๋ค.
6.1. Single Source, All Destination(ํ๋์ ์์์ ์์ ๋ชจ๋ ๊ณณ์ผ๋ก์ Shortest Path๋ฅผ ๊ตฌํ ์ ์๋จ๋ง์ด๋ค) ¶
- Dijkstra's Algorithm
- ํํ์ ์ธ์ ํ๋ ฌ(Adjancey(??) Matrix)๋ก ํํ(๊ทธ๋ฌ๋๊น 2์ฐจ์ ๋ฐฐ์ด)
- costi, j : i -> j ๋ก ๊ฐ๋ Cost
- ์ด๊ธฐ๊ฐ : S = { V0 } V0 : Source,
- ์ค๊ฐ S : { ์ง๊ธ๊น์ง Shortest Path๊ฐ ๊ฒฐ์ ๋ Vertex๋ค } : ๊ทธ๋ฌ๋๊น ๊ฒฐ์ ๋๋ฉด S์ ๋ฃ๋๋ค๋ ๋ง์ด๋ค.
- distw : v0์์ ์ถ๋ฐํ์ฌ w๊น์ง์ Shortest Path์ ๊ฐ. ๋จ w๋ฅผ ์ ์ธํ๊ณ ๋ S์งํฉ๋ด์ ์๋ Vertex๋ค๋ง ๊ฑฐ์ณ์ผ ํ๋ค.
- ์๋ฅผ ๋ค์๋ฉด
~cpp
Start Vertex : 4 -> S = {4}
dist[3] = 1500
dist[5] = 250 3,5 ๋ 4์ ์ฐ๊ฒฐ๋์ด ์์
dist[others] = ๋ฌดํ๋
-> dist[5]๊ฐ ๊ฐ์ฅ ์๋ค. 5๋ฅผ S์ ๋ฃ๋๋ค.
...
....
๋ฐ๋ณตํ๋ค.
- ์ด๊ฑธ ์๊ณ ๋ฆฌ์ฆํ ํ๋ฉด,
- for n-1 ๋ฒ ๋ฐ๋ณต
- dist ๊ฐ์ค์์ ์ต์๊ฐ ๋๋ Vertex u ์ฐพ๊ธฐ
- S = S U {u}
- dist๊ฐ ๊ฐฑ์ : distw = min { distw, distu + costu, w }
6.2. All Pairs Shortest Path ¶
- Floyd - Warshall Algorithm
- ์ญ์ ํํ์ 2์ฐจ์ ๋ฐฐ์ด๋ก ํ๋ค. ๊ทธ๋ฐ๋ฐ ์ด ์๊ณ ๋ฆฌ์ฆ์ (-) Weight ๋ ํ์ฉํ๋ค.(๊ทธ๋ฆฌ๋ก ๊ฐ๋ฉด ์ด๋์ด ๋๋ค๋ ๋ง์ด๋ค.) ํ์ง๋ง Negative Cycle์ ์๋๋ค.
- Negative Cycle? ๊ทธ ์ฌ์ดํด์ ๋๋ฉด - ๊ฐ ๋์ค๋๊ธธ์ ๋งํ๋ค.
- ์ด๊ธฐ ํ๋ ฌ์ A(-1)i, j ๋ก ํ๋ค. ๋ฐ๋ณตํ ์๋ก ๊ดํธ ์์ ๊ฐ์ ์ฌ๋ ค์ค๋ค. ์ด๊ฑธ n-1๊น์ง ๋ฐ๋ณตํ๋ค.
- A(k)i, j ๋ผ๊ณ ํ๋ฉด i์์ j๋ก ๊ฐ๋ Shortest Path ์ ์ ์ ์ ์ธ ๊ฐ์ด๋ค.๋จ ๋ชจ๋ ๊ธธ์ 0 ~ k์ vertex๋ง์ ์ค๊ฐ์ ์ง๋ ์ ์๋ค.
- A(k)i, j = min { A(k-1)i,j, A(k-1)i, k + A(k-1)k, j }
DataStructure