์๋ฃ๊ตฌ์กฐ/๐์๊ณ ๋ฆฌ์ฆ - 17
์ค๋ ๋ค์ ๊ฐ์ ๋ชฉ๋ก
- ๊ทธ๋ํ ์ข ๋ฅ
- ๋๋น ์ฐ์ ํ์ - 1
๋ฌด๋ฐฉํฅ ๊ทธ๋ํ(Undirected Graph)
๊ฐ์ ์ด ์กด์ฌํ๋ฉด ์๋ฐฉํฅ์ผ๋ก ์ด๋ ๊ฐ๋ฅ.
A์ B ์ฐ๊ฒฐ์, A -> B, B -> A
๋ฐฉํฅ ๊ทธ๋ํ(Directed Graph)
๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ
A -> B๋ก ์ฐ๊ฒฐ๋๋ฉด, B -> A๋ก ์ด๋์ ๋ถ๊ฐ๋ฅํ๋ค.
๊ฐ์ค์น ๊ทธ๋ํ(Weighted Graph) ๋๋ ๋คํธ์ํฌ(Network)
๊ฐ์ ์ ๋น์ฉ(๊ฐ์ค์น)๊ฐ ํ ๋น๋ ๊ทธ๋ํ
๊ฐ์ ์ ์ง๋๊ฐ๊ธฐ ์ํด์๋ ๋น์ฉ์ ์ง๋ถํด์ผํ๋ค.
์๋ ์ฌ์ง์์ ๊ฐ์ฅ ์ผ์ชฝ ๋
ธ๋์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋
ธ๋๋ก ๊ฐ๊ธฐ ์ํด์๋
9์ ๋น์ฉ์ ์ง๋ถํ๊ฑฐ๋ 3์ ๋น์ฉ์ ์ง๋ถํด์ผํ๋ค.
๋ฐ๋ผ์ ์ต์์ ๋น์ฉ์ผ๋ก ๊ฐ๋ ๋ฐฉ๋ฒ์ ์๋์ชฝ ๋
ธ๋๋ฅผ ๊ฑฐ์ณ๊ฐ๋ 3์ ๋น์ฉ์ ์ง๋ถํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ง์ฝ ๊ฐ์ ์ ์ง๋๊ฐ๋, ๋น์ฉ์ ์ป๋ ๋ฌธ์ ์ด๊ณ , ๊ฐ์ฅ ํฐ ๊ฐ์ ์ฐพ์ผ๋ผ ํ๋ฉด 9๊ฐ ๋๊ฒ ๋ค.
(๋น์ฉ์ ์ง๋ถํ๊ฑฐ๋ ๊ฑฐ๊พธ๋ก ์ป์ ์๋ ์๋ค. ๋ฌธ์ ์ ๋ฐ๋ผ ๋ค๋ฆ)
์ฐ๊ฒฐ ๊ทธ๋ํ(Connected Graph)
๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ ์๋ ๋ชจ๋ ๋
ธ๋์ ๋ํด ํญ์ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ
(์ด๋ค ๋
ธ๋์์๋ ๋ค๋ฅธ ๋ชจ๋ ๋
ธ๋์ ๋ํด ์ ๊ทผ ๊ฐ๋ฅ)
๋น์ฐ๊ฒฐ ๊ทธ๋ํ(Disconnected Graph)
๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ ์๋ ์ด๋ค ๋
ธ๋์ ๋ํด ๊ฒฝ๋ก๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ
(๋๋ฌํ ์ ์๋ ๋
ธ๋๊ฐ ์กด์ฌ)
์ฌ์ดํด(Cycle)
๋จ์๊ฒฝ๋ก์์ ์์๋ ธ๋์ ์ข ๋ฃ ๋ ธ๋๊ฐ ๋์ผํ ๊ฒฝ์ฐ
๋น์ํ ๊ทธ๋ํ(Acyclic Graph)
์ฌ์ดํด์ด ์กด์ฌํ์ง ์๋ ๊ทธ๋ํ
์์ ๊ทธ๋ํ(Complete Graph)
๋ชจ๋ ๋ ธ๋๊ฐ ์๋ก ์ฐ๊ฒฐ๋์ด์๋ ๊ทธ๋ํ
๊ทธ๋ํ / ํธ๋ฆฌ ์ฐจ์ด
ํธ๋ฆฌ๋ ๊ทธ๋ํ ์ค์ ์ํ ํน๋ณํ ์ข
๋ฅ
ํธ๋ฆฌ๋ ๋น์ํ ๋ฐฉํฅ ๊ทธ๋ํ๋ผ๊ณ ๋ณผ ์ ์๋ค.
๊ทธ๋ํ ์ข ๋ฅ ๋
์ฌ๊ธฐ๊น์ง๋ ๊ทธ๋ํ ์ข ๋ฅ๊ณ ๊ทธ๋ฅ ์ ๋นํ ์์๋๋ฉด ๋๋ค.
๊ทธ๋ํ ํ์(BFS, DFS)
๊ทธ๋ํ์์ ํ์ํ๋ ๊ธฐ๋ฒ์ ํฌ๊ฒ BFS, DFS๋ก ๋๋๋ค.
BFS(Breadth-First Search, ๋๋น ์ฐ์ ํ์) : ๊ฐ์ ๋ ๋ฒจ์ ์๋ ๋
ธ๋๋ค์ ๋จผ์ ํ์ํจ
DFS(Depth-First Search, ๊น์ด ์ฐ์ ํ์) : ํ ๋
ธ๋์ ์์์ ํ๊ณ ๋๊น์ง ๊ฐ๊ณ , ๋ค์ ๋์์์ ๋ค๋ฅธ ํ์ ์ ์์์ ํ๊ณ ๋๊น์ง ๊ฐ๋ ๋ฐฉ์
๊ทธ๋ํ ํ์ด์ฌ์ผ๋ก ํํ
# ๊ทธ๋ํ ๊ตฌํ
graph = {}
graph['A'] = ['B', 'C']
graph['B'] = ['A', 'D']
graph['C'] = ['A', 'G', 'H', 'I']
graph['D'] = ['B', 'E', 'F']
graph['E'] = ['D']
graph['F'] = ['D']
graph['G'] = ['C']
graph['H'] = ['C']
graph['I'] = ['C', 'J']
graph['J'] = ['I']
๊ทธ๋ํ๋ ํ์ด์ฌ์์ ๋์
๋๋ฆฌ + ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ค.
์ด๋ค ๋
ธ๋๋ฅผ ๋์
๋๋ฆฌ์ Key, ์ธ์ ๋
ธ๋๋ค์ value๋ก ์ฌ์ฉํ๋๋ฐ,
์ธ์ ๋
ธ๋๊ฐ ํ๋๊ฐ ์๋ ์ ์์ผ๋ฏ๋ก value๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํด์ ํํํ๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค์ด ์์ง๋ง, ์ด ๊ตฌ์กฐ ๋๋ฌด ํธํ ๊ฒ..
๋๊ธ๋จ๊ธฐ๊ธฐ