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
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€