2024. 1. 4. 18:39ใCS - Roadmap.sh/1. Data structures
Data structures (with python) - 2. Graph - 2.4. Graph Representation
๐ก A graph can either be represented as an adjacency matrix or an adjacency list.
The adjacency matrix is a 2D array of size V x V where V is the number of vertices in a graph. Let the 2D array be adj[][], a slot adj[i][j] = 1 indicates that there is an edge from vertex i to vertex j.
Adjacency list is an array of vectors. Size of the array is equal to the number of vertices. Let the array be array[]. An entry array[i] represents the list of vertices adjacent to the ith vertex. This representation can also be used to represent a weighted graph. The weights of edges can be represented as lists of pairs.
๊ทธ๋ํ๋ ์ธ์ ์ฑ ํ๋ ฌ ๋๋ ์ธ์ ์ฑ list์ผ๋ก ํํํ ์ ์์ต๋๋ค.
์ธ์ ํ๋ ฌ์ V x V ํฌ๊ธฐ์ 2D ๋ฐฐ์ด๋ก, ์ฌ๊ธฐ์ V๋ ๊ทธ๋ํ์ ์ ์ ์์ ๋๋ค. 2D ๋ฐฐ์ด์ adj[][]๋ผ๊ณ ํ ๋, ์ฌ๋กฏ adj[i][j] = 1์ ์ ์ i์์ ์ ์ j๊น์ง ์์ง๊ฐ ์์์ ๋ํ๋ ๋๋ค.
์ธ์ ์ฑ list๋ ๋ฒกํฐ์ ๋ฐฐ์ด์ ๋๋ค. ๋ฐฐ์ด์ ํฌ๊ธฐ๋ ์ ์ ์ ์์ ๊ฐ์ต๋๋ค. ๋ฐฐ์ด์ array[]๋ผ๊ณ ํฉ๋๋ค. ํญ๋ชฉ array[i]๋ ์งธ ์ ์ ์ ์ธ์ ํ ์ ์ ์ list์ ๋ํ๋ ๋๋ค. ์ด ํํ์ ๊ฐ์ค ๊ทธ๋ํ๋ฅผ ํํํ๋ ๋ฐ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ์ฅ์๋ฆฌ์ ๊ฐ์ค์น๋ ์์ list์ผ๋ก ๋ํ๋ผ ์ ์์ต๋๋ค.
Graph Representation
๊ทธ๋ํ๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์๋ ํฌ๊ฒ 2๊ฐ์ง ๊ฐ ์๋ค.
1. adjacency matrix
2. adjacency list
1. ์ธ์ ํ๋ ฌ (Adjacency matrix)๋ ๊ทธ๋ํ์ node๋ค์ด ์๋ก ์ด๋ป๊ฒ ์ฐ๊ฒฐ ๋์ด ์๋์ง๋ฅผ ์ด์ฐจ์ array ๋ก ํํ ํ ๊ฒ
- ํ๊ณผ ์ด์ด ๊ฐ๊ฐ ๊ทธ๋ํ์ ๋ ธ๋๋ฅผ ๋ํ๋ด๋ฉฐ, ๋ ธ๋ i ์ ๋ ธ๋ j๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ค๋ฉด matrix[i][j] (๊ทธ๋ฆฌ๊ณ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ ๊ฒฝ์ฐ matrix[j][i]) ์์น์๋ 1์, ์ฐ๊ฒฐ๋์ด ์์ง ์๋ค๋ฉด 0์ ๋ฃ๋๋ค.
- ์ธ์ ํ๋ ฌ์ ๊ทธ๋ํ์ ๋ชจ๋ ๋ ธ๋์ ๋ํด ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๋ง์ง๋ง, ๋ ๋ ธ๋ ๊ฐ์ ์ฐ๊ฒฐ ์ฌ๋ถ๋ฅผ ๋ฐ๋ก ํ์ธํ ์ ์๋ ์ฅ์ ์ด ์๋ค.
ํ์ด์ฌ์์ adjacency matrix๋ 2์ฐจ์ list๋ฅผ ์ฌ์ฉํด ๊ตฌํ ๊ฐ๋ฅํ๋ค.
matrix = [[0, 1, 1, 0, 0], # ๋
ธ๋ 0์ ๋
ธ๋ 1, 2์ ์ฐ๊ฒฐ
[1, 0, 1, 1, 1], # ๋
ธ๋ 1์ ๋
ธ๋ 0, 2, 3, 4์ ์ฐ๊ฒฐ
[1, 1, 0, 0, 1], # ๋
ธ๋ 2๋ ๋
ธ๋ 0, 1, 4์ ์ฐ๊ฒฐ
[0, 1, 0, 0, 1], # ๋
ธ๋ 3์ ๋
ธ๋ 1, 4์ ์ฐ๊ฒฐ
[0, 1, 1, 1, 0]] # ๋
ธ๋ 4๋ ๋
ธ๋ 1, 2, 3๊ณผ ์ฐ๊ฒฐ
2-2 undirected graph์ ์์์๋ 5๊ฐ์ ๋ ธ๋๋ฅผ ๊ฐ์ง ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ(undirected graph)๋ฅผ ์ธ์ ํ๋ ฌ๋ก ํํํ ์์.
2. ์ธ์ ๋ฆฌ์คํธ (Adjacency List)๋ ๊ทธ๋ํ์ ๊ฐ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ฅผ ๋ฆฌ์คํธ๋ก ํํํ ๊ฒ.
- ์ธ์ ๋ฆฌ์คํธ๋ ๊ฐ ๋ ธ๋์ ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํฉ๋๋ค.
- ์ธ์ ๋ฆฌ์คํธ๋ ์ธ์ ํ๋ ฌ์ ๋นํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ์ ์ง๋ง, ๋ ๋ ธ๋ ๊ฐ์ ์ฐ๊ฒฐ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ฆฌ์คํธ๋ฅผ ํ์ํด์ผ ํ๋ ๋จ์ ์ด ์๋ค.
ํ์ด์ฌ์์ ๊ตฌํ์ list ์ list๋ก ๊ตฌํ ๊ฐ๋ฅํ๋ค.
list = [[1, 2], # ๋
ธ๋ 0์ ๋
ธ๋ 1, 2์ ์ฐ๊ฒฐ
[0, 2, 3, 4], # ๋
ธ๋ 1์ ๋
ธ๋ 0, 2, 3, 4์ ์ฐ๊ฒฐ
[0, 1, 4], # ๋
ธ๋ 2๋ ๋
ธ๋ 0, 1, 4์ ์ฐ๊ฒฐ
[1, 4], # ๋
ธ๋ 3์ ๋
ธ๋ 1, 4์ ์ฐ๊ฒฐ
[1, 2, 3]] # ๋
ธ๋ 4๋ ๋
ธ๋ 1, 2, 3๊ณผ ์ฐ๊ฒฐ
์ list์ list๋ผ๊ณ ๋งํ๋๋ฉด, array ์ ํํ๋ผ๊ธฐ๋ณด๋ค ๋ ธ๋์ ์ฐ๊ฒฐ์ ํํํ list ๋ค์ list ์ด๊ธฐ ๋๋ฌธ.
๊ทธ๋ ๋ค๋ฉด
adjacency matrix ์ adjacency list์ ์ฐจ์ด์ ์ ๋ฌด์์ผ๊น?
1. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
- ์ธ์ ํ๋ ฌ์ ๊ทธ๋ํ์ ๋ชจ๋ ๋ ธ๋ ๊ฐ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ์ ์ฅํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ง๋ค.
๋ ธ๋์ ์๊ฐ n ์ผ ๋, ์ธ์ ํ๋ ฌ์ n^2 ์ ๊ณต๊ฐ์ ์ฐจ์งํ๋ค.
- ์ธ์ list๋ ๋ ธ๋์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ํ์ํด์ผ ํ๋ฏ๋ก ๋ ๋ ธ๋์ ์ฐ๊ฒฐ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ฐ์ ๋ ๋ง์ ์๊ฐ์ด ์์๋๋ค.
์ต์ ์ ๊ฒฝ์ฐ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
โปO(n) ์ big-O ํ๊ธฐ๋ฒ์ผ๋ก ์ ๊ทผ์ ๋ถ์์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ์ํ ์๊ฐ์ ๋ถ์ํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ์ถํ ๋ค๋ฃฌ๋ค.
2. ์ฐ์ฐ ์๋:
- ์ธ์ ํ๋ ฌ์ ๋ ๋
ธ๋ ๊ฐ์ ์ฐ๊ฒฐ ์ฌ๋ถ๋ฅผ ๋ฐ๋ก ์กฐํํ ์ ์์ผ๋ฏ๋ก ์ด ์์
์ ์๋๊ฐ ๋น ๋ฅด๋ค.
์ฆ ๋
ธ๋ A์ ๋
ธ๋ B๊ฐ ์ฐ๊ฒฐ๋์ด ์๋์ง ํ์ธํ๋ ์์
์ O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
- ์ธ์ ๋ฆฌ์คํธ๋ ๋ ธ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ํ์ํด์ผ ํ๋ฏ๋ก ๋ ๋ ธ๋์ ์ฐ๊ฒฐ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ฐ ๋ ๋ง์ ์๊ฐ์ด ์์๋๋ค.
์ต์ ์ ๊ฒฝ์ฐ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
3. ๊ทธ๋ํ์ ์ข ๋ฅ
- ์ธ์ ํ๋ ฌ์ ์ฃผ๋ก ์์ ๊ทธ๋ํ์์ ์ฌ์ฉ๋๋ฉฐ, ์ธ์ ๋ฆฌ์คํธ๋ ์ต์ ๊ทธ๋ํ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
์์ ๊ทธ๋ํ : ๋ชจ๋ ๋ ธ๋๊ฐ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๊ทธ๋ํ,
์ต์ ๊ทธ๋ํ : ๋๋ถ๋ถ์ ๋ ธ๋๊ฐ ์๋ก ์ฐ๊ฒฐ๋์ด ์์ง ์์ ๊ทธ๋ํ.
์ธ์ ํ๋ ฌ๊ณผ ์ธ์ ๋ฆฌ์คํธ์ ์ ์์ ํํ๋ฅผ ๋ณด๋ฉด ์์ฐ์ค๋ ์ดํด๊ฐ ๊ฒ์ด๋ค.
appendix
์ข ๋ ๊น์ ํ์ฉ์ ์๋ฅผ ๋ค์๋ฉด,
1. ์ธ์ ํ๋ ฌ :
- ํ๋ก์ด๋-์์ ์๊ณ ๋ฆฌ์ฆ(Floyd-Warshall) : ๋ชจ๋ ๋ ธ๋ ์์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
- ๊ทธ๋ํ๊ฐ ์๊ณ ๋ ธ๋ ๊ฐ์ ์ฐ๊ฒฐ ์ฌ๋ถ๋ฅผ ์์ฃผ ํ์ธํด์ผ ํ๋ ๊ฒจ์ฐ ์ธ์ ํ๋ ฌ์ ์ฌ์ฉ
2. ์ธ์ ๋ฆฌ์คํธ:
- ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ(Dikstra's Algoritm), ๋ฒจ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ(Bellman-Ford) ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ
- ๊น์ด ์ฐ์ ํ์(DFS), ๋์ด ์ฐ์ ํ์(BFS) ๊ฐ์ ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ์์๋ ํจ๊ณผ์ .
'CS - Roadmap.sh > 1. Data structures' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Data structures (with python) - 4. Linked List (0) | 2024.01.06 |
---|---|
Data structures (with python) - 3. Heap (0) | 2024.01.05 |
Data structures (with python) - 2. Graph - 2.3. Spanning Tree (1) | 2024.01.03 |
Data structures (with python) - 2. Graph - 2.2. Undirected graph (0) | 2024.01.02 |
Data structures (with python) - 2. Graph - 2.1. Directed graph (0) | 2024.01.01 |