Skip to content

Files

Latest commit

e2a8a1e ยท Aug 18, 2020

History

History
97 lines (67 loc) ยท 6.49 KB

Graph.md

File metadata and controls

97 lines (67 loc) ยท 6.49 KB

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

๐Ÿ’ก ๊ทธ๋ž˜ํ”„ ๊ด€๋ จ ์šฉ์–ด์™€ ๊ฐœ๋… ๊ผญ ์ดํ•ดํ•˜๊ณ  ๊ธฐ์–ตํ•˜๊ธฐ !!

๊ทธ๋ž˜ํ”„ ์ •์˜

ํ˜„์‹ค์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ์ด๋‚˜ ๊ฐœ๋… ๊ฐ„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์ˆ˜ํ•™์  ๋ชจ๋ธ๋กœ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ํ‘œํ˜„ํ•œ ๊ฒƒ

  • : ์ •์  (Vertex / Node)
  • : ๊ฐ„์„  (Edge / Link / Arc) _ ์ •์  ๊ฐ„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ๊ทธ๋ž˜ํ”„ G = (V, E)

๊ทธ๋ž˜ํ”„ ์šฉ์–ด

๋ณ„๋„๋กœ ํ‘œ์‹œ๋œ ๊ฒƒ์€ ๋‚ด๊ฐ€ ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์€ ์ด๋ฆ„์ด๋‹ค.

  1. ์ •์  (Node) ๋…ธ๋“œ
  2. ๊ฐ„์„  (Edge) ์—ฃ์ง€
    1. ๋ฌดํ–ฅ ๊ฐ„์„  (Undirected Edge) ๋ฌด๋ฐฉํ–ฅ ์—ฃ์ง€ : ๋ฐฉํ–ฅ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์—ฃ์ง€, ์–‘๋ฐฉํ–ฅ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
    2. ์œ ํ–ฅ ๊ฐ„์„  (Directed Edge) ๋ฐฉํ–ฅ ์—ฃ์ง€ : ๋ฐฉํ–ฅ์ด ์กด์žฌํ•˜๋Š” ์—ฃ์ง€
  3. ์ธ์ ‘ (Adjacent) ์ธ์ ‘ : (๋…ธ๋“œ ๊ด€์ ) ๋‘ ๋…ธ๋“œ A, B ์‚ฌ์ด์— ์—ฃ์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด A, B๋Š” ์ธ์ ‘ํ•œ๋‹ค.
  4. ๋ถ€์† (Incident) ๋ถ€์† : (์—ฃ์ง€ ๊ด€์ ) ๋‘ ๋…ธ๋“œ A, B ์‚ฌ์ด์— ์—ฃ์ง€ e๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์—ฃ์ง€ e๋Š” ๋…ธ๋“œ A, B์— ๋ถ€์†ํ•œ๋‹ค.
  5. ์ฐจ์ˆ˜ (Degree) ์ฐจ์ˆ˜ : ํ•œ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ์—ฃ์ง€์˜ ์ˆ˜
    1. (๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„) in-degree : ๋…ธ๋“œ์— ๋“ค์–ด์˜ค๋Š” ์—ฃ์ง€์˜ ์ˆ˜
    2. (๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„) out-degree : ๋…ธ๋“œ์—์„œ ๋‚˜๊ฐ€๋Š” ์—ฃ์ง€์˜ ์ˆ˜
  6. ์ž๊ธฐ ๊ฐ„์„ ๊ณผ ๋‹ค์ค‘ ๊ฐ„์„ 
    1. ์ž๊ธฐ ๊ฐ„์„  (Self-loop) : ๋…ธ๋“œ ํ•˜๋‚˜๋ฅผ ๋†“๊ณ  ๋ณผ ๋•Œ, ์ž์‹ ์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ค๋Š” ์—ฃ์ง€
    2. ๋‹ค์ค‘ ๊ฐ„์„  (Multiple / Parallel edges) : ๋‘ ๊ฐœ ์ด์ƒ์˜ ์—ฃ์ง€๊ฐ€ ๋˜‘๊ฐ™์€ ๋‘ ๋…ธ๋“œ์— ๋ถ€์†ํ•  ๋•Œ
  7. ๊ฒฝ๋กœ (Path) ๊ฒฝ๋กœ : ๋…ธ๋“œ + ์—ฃ์ง€๊ฐ€ ๊ต๋Œ€๋กœ ๊ตฌ์„ฑ๋œ sequence
    1. ๋‹จ์ˆœ ๊ฒฝ๋กœ (Simple Path) : ๊ฐ™์€ ๋…ธ๋“œ๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ๊ฐ€์ง€ ์•Š๋Š” ๊ฒฝ๋กœ, sequence์—์„œ ๋…ธ๋“œ์™€ ์—ฃ์ง€๊ฐ€ ์ค‘๋ณต๋˜์ง€ x
  8. ํšŒ๋กœ (Cycle) ์‹ธ์ดํด : A ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ–ˆ์„ ๋•Œ ๋‹ค์‹œ A ๋…ธ๋“œ๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒฝ๋กœ
    1. ๋‹จ์ˆœ ํšŒ๋กœ (Simple Cycle) : ๊ฐ™์€ ๋…ธ๋“œ๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ๊ฐ€์ง€ ์•Š๋Š” ์‹ธ์ดํด, sequence์—์„œ ๋…ธ๋“œ์™€ ์—ฃ์ง€๊ฐ€ ์ค‘๋ณต๋˜์ง€ x
  9. ์—ฐ๊ฒฐ๋จ (Connected) ์—ฐ๊ฒฐ : ๋…ธ๋“œ A์—์„œ ๋…ธ๋“œ B๋กœ์˜ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•  ๋•Œ, A์™€ B๋Š” ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

๊ทธ๋ž˜ํ”„ ์ข…๋ฅ˜

๋ณ„๋„๋กœ ํ‘œ์‹œ๋œ ๊ฒƒ์€ ๋‚ด๊ฐ€ ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์€ ์ด๋ฆ„์ด๋‹ค.

  1. ๋ฌดํ–ฅ ๊ทธ๋ž˜ํ”„ (Undirected Graph) ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ : ๋ฌด๋ฐฉํ–ฅ ์—ฃ์ง€๋กœ ์ด๋ฃจ์–ด์ง„ ๊ทธ๋ž˜ํ”„
  2. ์œ ํ–ฅ ๊ทธ๋ž˜ํ”„ (Directed Graph) ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ : ๋ฐฉํ–ฅ ์—ฃ์ง€๋กœ ์ด๋ฃจ์–ด์ง„ ๊ทธ๋ž˜ํ”„
  3. ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„ (Weighted Graph) : ๊ฐ€์ค‘์น˜(๋น„์šฉ)๋ฅผ ๊ฐ–๋Š” ์—ฃ์ง€๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๊ทธ๋ž˜ํ”„
  4. ์ •๊ทœ ๊ทธ๋ž˜ํ”„ (Regular Graph) : ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋™์ผํ•œ ์ฐจ์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ๊ทธ๋ž˜ํ”„
  5. ์™„์ „ ๊ทธ๋ž˜ํ”„ (Complete Graph) : ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ์ธ์ ‘ํ•ด์žˆ๋Š” ๊ทธ๋ž˜ํ”„, ์™„์ „ ๊ทธ๋ž˜ํ”„๋Š” ์ •๊ทœ ๊ทธ๋ž˜ํ”„
    1. N๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ผ ๋•Œ, ์—ฃ์ง€์˜ ๊ฐœ์ˆ˜ : 1๋ถ€ํ„ฐ N๊นŒ์ง€ ๋”ํ•œ ๊ฐ’, 1 2 N ( N โˆ’ 1 )
    2. N๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ผ ๋•Œ, ์—ฃ์ง€์˜ ๊ฐœ์ˆ˜ : ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ์— x2ํ•œ ๊ฐ’, N ( N โˆ’ 1 )
  6. ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„ (Connected Graph) : ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์„œ, ๋ชจ๋“  ๋…ธ๋“œ๋ผ๋ฆฌ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ทธ๋ž˜ํ”„
  7. ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„ : ์–ด๋–ค ๊ทธ๋ž˜ํ”„์˜ ๋ถ€๋ถ„ ๋ถ€๋ถ„
  8. ํŠธ๋ฆฌ ๊ทธ๋ž˜ํ”„ : ์‹ธ์ดํด์„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„, ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ๊ฒฝ๋กœ๊ฐ€ ์ •ํ™•ํžˆ 1๊ฐœ ์กด์žฌํ•œ๋‹ค.

๊ทธ๋ž˜ํ”„ ํ‘œํ˜„

๊ฐ„์„  ๋ฆฌ์ŠคํŠธ, ์ธ์ ‘ ํ–‰๋ ฌ, ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

๋…ธ๋“œ ๊ฐœ์ˆ˜ : V๊ฐœ, ์—ฃ์ง€ ๊ฐœ์ˆ˜ : E๊ฐœ

๊ฐ„์„  ๋ฆฌ์ŠคํŠธ (Edge List)

  • E x 2 (or E x 3) ์ด์ฐจ์› ๋ฐฐ์—ด A์— ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๋‘ ๋…ธ๋“œ x, y ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—ฃ์ง€ e์— ๋Œ€ํ•ด์„œ A[k][0] = x, A[k][1] = y
  • ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ A[k][2] ์— ๊ฐ€์ค‘์น˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

แ„€แ…กแ†ซแ„‰แ…ฅแ†ซแ„…แ…ตแ„‰แ…ณแ„แ…ณ

์ธ์ ‘ ํ–‰๋ ฌ (Adjacency Matrix)

  • V x V ์ด์ฐจ์› ๋ฐฐ์—ด A์— ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—ฃ์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด(์ธ์ ‘ํ•œ๋‹ค๋ฉด) A[i][j] = 1, ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด A[i][j] = 0
  • ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ ์—ฃ์ง€๊ฐ€ ์กด์žฌํ•  ๋•Œ 1 ๋Œ€์‹  ๊ฐ€์ค‘์น˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๋ณต์žก๋„๊ฐ€ ์ด๊ธฐ ๋•Œ๋ฌธ์—, V์˜ ๊ฐ’์ด ํด ๊ฒฝ์šฐ ์“ฐ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 100 ์ดํ•˜์˜ ๊ฐ’์ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

แ„‹แ…ตแ†ซแ„Œแ…ฅแ†ธแ„’แ…ขแ†ผแ„…แ…งแ†ฏ

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ (Adjacent List)

  • V ๊ฐœ์˜ Linked List๋กœ ๊ทธ๋ž˜ํ”„ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ (๋…ธ๋“œ ์ •๋ณด, ๊ฐ€์ค‘์น˜ ์ •๋ณด)๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•œ๋‹ค.

    C++๋กœ ํ‘ผ๋‹ค๋ฉด pair, Java๋กœ ํ‘ผ๋‹ค๋ฉด class๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

แ„‹แ…ตแ†ซแ„Œแ…ฅแ†ธแ„…แ…ตแ„‰แ…ณแ„แ…ณ

๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ ๋ฐฉ์‹ ๋น„๊ต

๋…ธ๋“œ ๊ฐœ์ˆ˜ : V๊ฐœ, ์—ฃ์ง€ ๊ฐœ์ˆ˜ : E๊ฐœ

๊ฐ„์„  ๋ฆฌ์ŠคํŠธ ์ธ์ ‘ ํ–‰๋ ฌ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ
๊ณต๊ฐ„ E V + E
๋…ธ๋“œ ์˜ ๋ถ€์† ๊ฐ„์„  E V ์˜ ์ฐจ์ˆ˜
๋…ธ๋“œ ์˜ ์ธ์ ‘ ์—ฌ๋ถ€ E 1 min( ์˜ ์ฐจ์ˆ˜, ์˜ ์ฐจ์ˆ˜)
๋…ธ๋“œ ์‚ฝ์ž… 1 1
์—ฃ์ง€ ์‚ฝ์ž… 1 1 1