๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜/์ž๋ฃŒ๊ตฌ์กฐ ์ด๋ก 

๊ทธ๋ž˜ํ”„ - ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ

by sh119 2024. 7. 16.

๐Ÿ‘ฉ‍๐Ÿ’ป  ๊ทธ๋ž˜ํ”„ (Graph)

์ •์ ๊ณผ ๊ฐ„์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ (Cyclic)

  • ์—ฐ๊ฒฐ๋œ ์ •์ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • ํŠธ๋ฆฌ์™€ ๋‹ค๋ฅธ์ ์€ ํŠธ๋ฆฌ๋Š” an cyclic ์ด๋ผ๋ฉด ๊ทธ๋ž˜ํ”„๋Š” cyclic์ด๋‹ค. ***
  • ๊ฐ„์„ ๋ผ๋ฆฌ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. 

 

๊ทธ๋ž˜ํ”„์˜ ์šฉ๋„ : 

  • ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„, ํ†ต์‹  ๋„คํŠธ์›Œํฌ, ...

 

โœ๏ธ  ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ

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

 

โœ๏ธ  ๊ทธ๋ž˜ํ”„์˜ ํŠน์ง•๊ณผ ํŠธ๋ฆฌ์™€์˜ ์ฐจ์ด

  ๊ทธ๋ž˜ํ”„ ํŠธ๋ฆฌ
๊ฐœ์š” ๋…ธ๋“œ์™€ ๊ฐ„์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜
๋ฐฉํ–ฅ์„ฑ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„, ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„
์‚ฌ์ดํด Cyclic Acyclic
๋ชจ๋ธ ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ ๊ณ„์ธต ๋ชจ๋ธ
๋ฃจํŠธ ๋…ธ๋“œ ๋ฃจํŠธ ๋…ธ๋“œ X ์ตœ์ƒ์œ„ ๋…ธ๋“œ
๋ถ€๋ชจ-์ž์‹ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„ X ์ธ์ ‘ํ•œ ์ƒํ•˜์œ„ ๋…ธ๋“œ
๊ฐ„์„  ์ˆ˜  ๊ทธ๋ž˜ํ”„์— ๋”ฐ๋ผ ๊ฐ„์„  ๊ฐœ์ˆ˜ ๋‹ค๋ฆ„ N๊ฐœ์˜ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ์˜ ๊ฐ„์„  ์ˆ˜๋Š” N-1๊ฐœ
์ˆœํšŒ DFS, BFS Pre-, In, Post-order / Level-order
๊ฒฝ๋กœ 2๊ฐœ ์ด์ƒ์˜ ๊ฒฝ๋กœ ๊ฐ€๋Šฅ ๋‘ ๋…ธ๋“œ ๊ฐ„์˜ ๊ฒฝ๋กœ๋Š” 1๊ฐœ

 

 

โœ๏ธ  ๊ทธ๋ž˜ํ”„์˜ ์ข…๋ฅ˜

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

  • ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„ (์–‘๋ฐฉํ–ฅ ์ด๋™ ๊ฐ€๋Šฅ)
  • ์ •์  A - B ๊ฐ„์„ ์˜ ํ‘œํ˜„ : (A,B) = (B, A)

2) ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ 

  • ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„ (ํ•ด๋‹น ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ด๋™ ๊ฐ€๋Šฅ)
  • ์ •์  A-> B ๊ฐ„์„ ์˜ ํ‘œํ˜„ : <A,B> != <B,A>

 

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

  • ๊ฐ„์„ ์— ๊ฐ’์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„ (์ด๋™ ๋น„์šฉ)

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

  • ๋ชจ๋“  ์ •์ ์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„
  • ์ •์ ์ด N๊ฐœ์ผ ๊ฒฝ์šฐ, ๊ฐ„์„ ์˜ ์ˆ˜๋Š” n(n-1)/2๊ฐœ

 

โœ๏ธ  ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ - DFS

โœจ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ (Depth First Search) 

๊ฐ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•  ๋ฐฐ์—ด๊ณผ ์Šคํƒ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„

 

* ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋งŒํผ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„ ๋ฐฐ์—ด ์„ ์–ธ ํ›„ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด 1์„ ๋„ฃ์–ด์ฃผ๋ฉฐ ๋ฐ˜๋ณต

(์šฐ์ธก ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋‚˜์˜ค๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง„ํ–‰ํ•ด๋ณด๋ฉด)

Stack์— A๋ฅผ ๋„ฃ๊ณ , D,C,B๋ฅผ ์ˆœ์„œ๋Œ€๋กœ stack์— ์‚ฝ์ž…

-> ๋” ์ด์ƒ ๊ทผ์ฒ˜์— ๋ฐฉ๋ฌธํ• ๊ฒŒ ์—†์œผ๋ฏ€๋กœ B๋ฅผ ์Šคํƒ์—์„œ ๊บผ๋‚ธ๋’ค B์— ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค๋กœ ๋ฐ˜๋ณต

-> E๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฐ์—ด์— 1 ๋กœ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ํ›„ ๋” ์ด์ƒ ๊ฐˆ ๊ณณ์ด ์—†์œผ๋ฏ€๋กœ E ๊บผ๋ƒ„

-> E์—์„œ ์ธ์ ‘ํ•œ ๋…ธ๋“œ D,G์ค‘ D๋Š” ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ G๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ํ›„ ๋„ฃ๊ณ , ๋” ์ด์ƒ ์—†์œผ๋ฏ€๋กœ G๋ฅผ ๊บผ๋ƒ„

-> G์—์„œ ์ธ์ ‘ํ•œ ๋…ธ๋“œ F๋ฅผ ๋„ฃ๊ณ  ๋˜ ๋ฐ˜๋ณต

-> F์—์„œ๋Š” ๋” ์ด์ƒ ๊ฐˆ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ (๋‹ค ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋œ ๊ฒƒ ๋ฐ–์— ์—†์Œ) ์Šคํƒ์—์„œ ํ•˜๋‚˜ ๋˜ ๊บผ๋ƒ„ (C)

-> C๋„ ๋” ์ด์ƒ ๊ฐˆ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋‚˜๋จธ์ง€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์ธ D๋ฅผ ๊บผ๋ƒ„

 

โœ๏ธ  ๊ทธ๋ž˜ํ”„์˜ ๊ตฌํ˜„ 

โœจ 1) ์ธ์ ‘ ํ–‰๋ ฌ (Adjacency Matrix)

 

ใ„ด 2์ฐจ์› ๋ฐฐ์—ด ์ด์šฉ

 

๐Ÿ’ซ ์ธ์ ‘ ํ–‰๋ ฌ์˜ ์žฅ๋‹จ์ 

  • ๊ฐ„์„  ์ •๋ณด์˜ ํ™•์ธ๊ณผ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋น ๋ฆ„ O(1)
  • ์ธ์ ‘ ํ–‰๋ ฌ์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ฐจ์ง€

 

โœจ 2) ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ (Adjacency List) 

ใ„ด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์ด์šฉ

๐Ÿ’ซ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์˜ ์žฅ๋‹จ์ 

  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ƒ๋Œ€์ ์œผ๋กœ ์ ๊ณ , ๋…ธ๋“œ์˜ ์ถ”๊ฐ€ ์‚ญ์ œ๊ฐ€ ๋น ๋ฆ„
  • ๊ฐ„์„  ์ •๋ณด ํ™•์ธ์ด ์ƒ๋Œ€์ ์œผ๋กœ ์˜ค๋ž˜ ๊ฑธ๋ฆผ

 

โœจ ์ธ์ ‘ ํ–‰๋ ฌ VS ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ 

์ธ์ ‘ ํ–‰๋ ฌ : ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ ๊ณ ,  ๊ฐ„์„ ์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ ์œ ๋ฆฌ. ๋ฐ€์ง‘ ๊ทธ๋ž˜ํ”„ (Dense Graph)

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ : ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ๊ณ , ๊ฐ„์„ ์˜ ์ˆ˜๊ฐ€ ์ ์„ ๋•Œ ์œ ๋ฆฌ. ํฌ์†Œ ๊ทธ๋ž˜ํ”„ (Sparse Graph)

  ์ธ์ ‘ ํ–‰๋ ฌ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ
ํŠน์ • ๊ฐ„์„  ๊ฒ€์ƒ‰ O(1) O(degree(V))
์ •์ ์˜ ์ฐจ์ˆ˜ ๊ณ„์‚ฐ O(N) O(degree(V))
์ „์ฒด ๋…ธ๋“œ ํƒ์ƒ‰ O(N^2) O(E)
๋ฉ”๋ชจ๋ฆฌ N * N N + E

N: ์ „์ฒด ์ •์  ๊ฐœ์ˆ˜ / E : ์ „์ฒด ๊ฐ„์„  ๊ฐœ์ˆ˜