์ž๋ฃŒ๊ตฌ์กฐ/๐Ÿ‘‰์•Œ๊ณ ๋ฆฌ์ฆ˜ - 17

์˜ค๋Š˜ ๋“ค์€ ๊ฐ•์˜ ๋ชฉ๋ก

  1. ๊ทธ๋ž˜ํ”„ ์ข…๋ฅ˜
  2. ๋„ˆ๋น„ ์šฐ์„ ํƒ์ƒ‰ - 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, ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) : ํ•œ ๋…ธ๋“œ์˜ ์ž์‹์„ ํƒ€๊ณ  ๋๊นŒ์ง€ ๊ฐ€๊ณ , ๋‹ค์‹œ ๋Œ์•„์™€์„œ ๋‹ค๋ฅธ ํ˜•์ œ์˜ ์ž์‹์„ ํƒ€๊ณ  ๋๊นŒ์ง€ ๊ฐ€๋Š” ๋ฐฉ์‹

BFS, DFS

๊ทธ๋ž˜ํ”„ ํŒŒ์ด์ฌ์œผ๋กœ ํ‘œํ˜„

# ๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„
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๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ‘œํ˜„ํ•œ๋‹ค.
๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ์ง€๋งŒ, ์ด ๊ตฌ์กฐ ๋„ˆ๋ฌด ํŽธํ•œ ๊ฒƒ..

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ