Data Structure (5) Graph (๊ทธ๋ž˜ํ”„)

๋ฐ˜์‘ํ˜•

๐Ÿ“Œ๊ทธ๋ž˜ํ”„๋ž€

: ์‹ค์ œ ์„ธ๊ณ„์˜ ํ˜„์ƒ์ด๋‚˜ ์‚ฌ๋ฌผ์„ ์ •์ (Vertex)(๋˜๋Š” ๋…ธ๋“œ(Node))์™€ ๊ฐ„์„ (Edge)๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

์ง‘์—์„œ ํšŒ์‚ฌ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„

๐Ÿ“Œ์šฉ์–ด

  • ๋…ธ๋“œ Node: =์ •์ (Vertex),๊ทธ๋ž˜ํ”„์—์„œ์˜ ์œ„์น˜, 
  • ๊ฐ„์„  Edge: ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•œ ์„ . ์œ„์น˜ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œ์‹œ (link, branch๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ธฐ๋„ ํ•จ.)
  • ์ธ์ ‘ ์ •์  Adjacent Vertex: ๊ฐ„์„ ์œผ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ •์ (๋…ธ๋“œ)
  • +๊ธฐํƒ€
    • ์ •์ ์˜ ์ฐจ์ˆ˜ Degree: ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ํ•˜๋‚˜์˜ ์ •์ ์— ์ธ์ ‘ํ•œ ์ •์ ์˜ ์ˆ˜
    • ์ง„์ž… ์ฐจ์ˆ˜ In-Degree: ๋ฐฉํ–ฅ๊ทธ๋ž˜ํ”„์—์„œ ์™ธ๋ถ€์—์„œ ์˜ค๋Š” ๊ฐ„์„ ์˜ ์ˆ˜
    • ์ง„์ถœ ์ฐจ์ˆ˜ Out-Degree: ๋ฐฉํ–ฅ๊ทธ๋ž˜ํ”„์—์„œ ์™ธ๋ถ€๋กœ ํ–ฅํ•˜๋Š” ๊ฐ„์„ ์˜ ์ˆ˜
    • ๊ฒฝ๋กœ ๊ธธ์ด Path Length: ๊ฒฝ๋กœ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ ๊ฐ„์„ ์˜ ์ˆ˜
    • ๋‹จ์ˆœ ๊ฒฝ๋กœ Simple Path: ์‹œ์ž‘ ์ •์ ๊ณผ ๋ ์ •์ ์„ ์ œ์™ธํ•˜๊ณ  ์ค‘๋ณต๋œ ์ •์ ์ด ์—†๋Š” ๊ฒฝ๋กœ
    • ์‚ฌ์ดํด Cycle: ๋‹จ์ˆœ ๊ฒฝ๋กœ์˜ ์‹œ์ž‘ ์ •์ ๊ณผ ๋ ์ •์ ์ด ๋™์ผํ•œ ๊ฒฝ์šฐ

 

๐Ÿ“Œ์ข…๋ฅ˜

: ๋ฌด๋ฐฉํ–ฅ/๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„, ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„, ์—ฐ๊ฒฐ/๋น„์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„, ์‚ฌ์ดํด/๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„, ์™„์ „ ๊ทธ๋ž˜ํ”„

 

# ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ vs. ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

  • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ Undirected Graph: ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„. ๊ฐ„์„ ์„ ํ†ตํ•ด, ๋…ธ๋“œ๋Š” ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์Œ. A์™€ B๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๋•Œ, (A, B) ๋˜๋Š” (B, A)๋กœ ํ‘œํ˜„

๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

  • ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ Directed Graph
    : ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„. A์—์„œ B๋กœ(A โ†’B) ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ, <A, B>๋กœ ํ‘œ๊ธฐ

 

# ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„ vs. ๋น„์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„

  • ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„ Connected Graph
    : ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด ํ•ญ์ƒ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ทธ๋ž˜ํ”„

 

  • ๋น„์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„ Disconnected Graph
    : ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ํŠน์ • ๋…ธ๋“œ์— ๋Œ€ํ•ด ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

๋น„์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„

 

# ์‚ฌ์ดํด vs. ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„

  • ์‚ฌ์ดํด Cycle
    : ๋‹จ์ˆœ ๊ฒฝ๋กœ์˜ ์‹œ์ž‘ ๋…ธ๋“œ์™€ ์ข…๋ฃŒ ๋…ธ๋“œ๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ

  • ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„ Acyclic Graph
    : ์‚ฌ์ดํด์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„

๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„

 

# ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„ Weight Graph (๋˜๋Š” ๋„คํŠธ์›Œํฌnetwork)

: ๊ฐ„์„ ์— ๋น„์šฉ ๋˜๋Š” ๊ฐ€์ค‘์น˜๊ฐ€ ํ• ๋‹น๋œ ๊ทธ๋ž˜ํ”„

๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„

 

# ์™„์ „ ๊ทธ๋ž˜ํ”„ Complete Graph

: ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„

 

์™„์ „ ๊ทธ๋ž˜ํ”„

 

๐Ÿ“Œ๊ทธ๋ž˜ํ”„์™€ ํŠธ๋ฆฌ์˜ ์ฐจ์ด

  ๊ทธ๋ž˜ํ”„ ํŠธ๋ฆฌ
์ •์˜ ๋…ธ๋“œ์™€ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ ์œผ๋กœ ํ‘œํ˜„๋˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜, ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๋Š” ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„
๋ฐฉํ–ฅ์„ฑ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„, ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ๋ชจ๋‘ ์กด์žฌ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋งŒ ์กด์žฌ
์‚ฌ์ดํด ์‚ฌ์ดํด ๊ฐ€๋Šฅ (์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(cycle), ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„ ๋ชจ๋‘ ์กด์žฌ) ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„๋กœ ์‚ฌ์ดํด ์กด์žฌ X
๋ฃจํŠธ ๋…ธ๋“œ ๋ฃจํŠธ ๋…ธ๋“œ ์กด์žฌ X ๋ฃจํŠธ ๋…ธ๋“œ ์กด์žฌ O
๋ถ€๋ชจ / ์ž์‹ ๊ด€๊ณ„ ๋ถ€๋ชจ ์ž์‹ ๊ฐœ๋… ์กด์žฌ X ๋ถ€๋ชจ ์ž์‹ ๊ด€๊ณ„ ์กด์žฌ O
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€