U E D R , A S I H C RSS

Data Structure/Graph


์˜ค๋žœ๋งŒ์˜ ๊ณต๋ฐฑ์„ ๊นจ๊ณ ! ์ž๋ฃŒ ๊ตฌ์กฐ ์ •๋ฆฌ๋ฅผ ๊ณ„์† ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.^^;


1. ๊ธฐ๋ณธ ๊ฐœ๋…

  • Vertex( ์  )
  • Edge( ์„  )
  • Directed Graph - Edge์˜ ๋ฐฉํ–ฅ์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„
  • Undirected Graph - Edge์˜ ๋ฐฉํ–ฅ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„


2. ํ•œ๋ถ“ ๊ทธ๋ฆฌ๊ธฐ

  • ๋ชจ๋“  Vertex์˜ Edge๊ฐ€ ์ง์ˆ˜๊ฐœ ์ผ๋•Œ
  • Vertex์˜ Edge์˜ ์ˆ˜๊ฐ€ ํ™€์ˆ˜๊ฐœ์ธ ๊ฒƒ์ด 2๊ฐœ์ผ๋•Œ


3. ํ‘œํ˜„

~cpp 
์š”๋Ÿฐ ๋ชจ์–‘์˜ Undirected Graph๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ์‹œ๋‹ค.
         2 
       / |
 0 - 1   |
     | /
     3       
์•Œ์•„ ๋ณผ์ˆ˜ ์žˆ์„๋Ÿฐ์ง€..--;
V = { 0, 1, 2, 3 }
E = { (0,1), (1,3), (1,2), (2,3) }


3.1. ๋ฐฐ์—ด

  • 2์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ •์‹ ์ด๋ฆ„์€ Adjacency Matrix(๋งž๋‚˜?--;)
  • ๋จผ์ € Undirected Graph
0 1 2 3
0 0 1 0 0
1 1 0 1 1
2 0 1 0 1
3 0 1 1 0
  • Vertex ์‚ฌ์ด์— Edge๊ฐ€ ์กด์žฌํ• ๋•Œ ๊ทธ ๊ณณ์˜ ๊ฐ’์„ 1๋กœ ์…‹ํŒ…
  • LeftUpper -> RightLower ๋Œ€๊ฐ์„ ์„ ๊ธฐ์ค€์œผ๋กœ ๋Œ€์นญ

  • ๋‹ค์Œ์—” Directed Graph

~cpp 
         2 
       / |
 0 <- 1   |
      | /
      3  
 * .... ํ™”์‚ดํ‘œ ํ‘œํ˜„ํ•˜๊ธฐ๊ฐ€ ์•”์šธํ•˜๊ตฐ์š”..--; ์–ด์จŒ๋“  < Vertex1, Vertex2 > ์š”๋Ÿฐ ํ‘œํ˜„์„ ์”๋‹ˆ๋‹ค.
 * ๋งŒ์•ฝ์— Vertex1 -> Vertex2์˜ ๋ฐฉํ–ฅ์œผ๋กœ Edge๊ฐ€ ์žˆ๋‹ค๋ฉด < Vertex1, Vertex2 > ์ด๋ ‡๊ฒŒ ์“ด๋‹จ ๋ง์ž…๋‹ˆ๋‹ค.
 * ํ™”์‚ดํ‘œ๋ฅผ ๊ทธ๋ฆด์ˆ˜ ์—†๋Š” ๊ด€๊ณ„๋กœ ์ˆœ์„œ์Œ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด
 * <1,0>, <2,1>, <3,1>, <3,2>
  • ๋„ํ‘œ๋กœ ๊ทธ๋ฆฌ์ž๋ฉด
0 1 2 3
0 0 0 0 0
1 1 0 0 0
2 0 1 0 0
3 0 1 1 0
  • | - ๋ฐฉํ–ฅ์œผ๋กœ Edge๊ฐ€ ์กด์žฌํ• ๋•Œ 1๋กœ ์…‹ํŒ…
  • LeftUpper -> RightLower ๋Œ€๊ฐ์„ ์„ ๊ธฐ์ค€์œผ๋กœ ๋Œ€์นญ์ด ์•„๋‹˜

3.2. ๋ฆฌ์ŠคํŠธ

  • Adjacency List(Linked List๋กœ ํ‘œํ˜„)
0 -> 1 X
1 -> 0 - -> 2 - -> 3 X
2 -> 1 - -> 3 X
3 -> 1 - -> 2 X

3.3. ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•œ Graph์™€ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•œ Graph์˜ ๋น„๊ต

  • ๋‘ Vertex ์‚ฌ์ด์— Edge๊ฐ€ ์žˆ๋‚˜์š”?
    • ๋ฐฐ์—ด : ฮธ(1) - 2์ฐจ์› ๋ฐฐ์—ด์˜ ์ฒจ์ž๋กœ arxy ๋‹จ๋ฒˆ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ! ๊ณ ๋กœ ๋ฐฐ์—ด์ด ์ข‹๋‹จ ๋ง์ž…๋‹ˆ๋‹ค.
    • ๋ฆฌ์ŠคํŠธ : ฮธ(n)
  • ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘ ( n๊ฐœ์˜ Vertices, e๊ฐœ์˜ Edges )
    • ๋ฐฐ์—ด : ฮธ(n^2) - n X n ๊ฐœ์˜ ๋ฐฐ์—ด์„ ์žก์œผ๋‹ˆ ๋‹น์—ฐํžˆ n^2 --;
    • ๋ฆฌ์ŠคํŠธ : ์œ„์˜ ๋ฆฌ์ŠคํŠธ๋กœ ๋œ ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„์„ ๋ณด๋ฉด Head Node์˜ ์ˆ˜๋Š” n๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๊ณ  Head Node๋กœ๋ถ€ํ„ฐ ๋ป—์–ด๋‚˜์˜ค๋Š” Node์˜ ์ด ์ˆ˜๋Š” 2*e ๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ฮธ(n+e) ๊ณ ๋กœ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์œ ๋ฆฌํ•˜๋‹จ ๋ง์ž…๋‹ˆ๋‹ค.
  • ํ•œ๊ฐ€์ง€๋” : Weighted Graph์˜ ํ‘œํ˜„๋ฒ•
    • ๋ฐฐ์—ด : 1๋Œ€์‹  Weight๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
    • ๋ฆฌ์ŠคํŠธ : ํ•„๋“œ๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜์ž. (๊ท€์ฐฎ๋‹ค)
  • ๊ฒฐ๋ก  : ๋ญ๊ฐ€ ๋” ๋‚ณ๋‹ค ๊ผด์•˜๋‹ค ํ•  ๊ทธ๋Ÿฐ๊ฑด ์—†์ง€๋งŒ.. ๊ตฌํ˜„์˜ ํŽธ๋ฆฌ์„ฑ๊ณผ ๊ฐ™์€ ๋ถ€์ˆ˜์ ์ธ ๊ฒƒ์„ ๋”ฐ์ ธ๋ณผ๋•Œ ๋ฐฐ์—ด์„ ์• ์šฉํ•˜๋Š”๊ฒŒ ์ข‹์„๊ฒƒ ๊ฐ™๋‹จ ๋ง์ž…๋‹ˆ๋‹ค!


4. ๊ธฐ๋ณธ ์—ฐ์‚ฐ

  • Traversal(ํƒ์ƒ‰)
    • Depth First Search(์šฐ๋ฆฌ๋ง๋กœ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) : ํ•œ์šฐ๋ฌผ์„ ์ญ‰ ํŒŒ๋‚˜๊ฐ„๋‹ค๋Š” ๋ง์ž…๋‹ˆ๋‹ค. ๊ฐ€๋‹ค๊ฐ€ ๋ง‰ํžˆ๋ฉด ๋นฝ. ์Šคํƒ ์ด์šฉ(๋˜๋Š” ์žฌ๊ท€). ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„์˜ค๋ฉด ์ซ‘๋‚œ๋‹ต๋‹ˆ๋‹ค.
    • Breadth First Search(์šฐ๋ฆฌ๋ง๋กœ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰) : ์ฒจ Vertex๋ฅผ ํ์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ๋บ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์ด์–ด์ง„ Vertex๋ฅผ ํ์— ๋‹ค ๋„ฃ์Šต๋‹ˆ๋‹ค. ์•ž์—์„œ๋ถ€ํ„ฐ ๋นผ๋ฉด์„œ ๊ทธ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ Vertex๋ฅผ ๊ณ„์† ์ถ”๊ฐ€์‹œ์ผœ์ค๋‹ˆ๋‹ค. Queue๊ฐ€ ๋น„๊ฒŒ ๋˜๋ฉด ์ซ‘๋‚˜๋Š” ๊ฑฐ๋ž๋‹ˆ๋‹ค. ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์„ ํŠธ๋ฆฌ์— ์ ์šฉ์‹œํ‚ค๋ฉด ๊ทธ๊ฒŒ ๋ฐ”๋กœ Level Order๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋ž€ ๋ง์ด์ ธ.

5. ์ตœ์†Œ ๋น„์šฉ ์‹ ์žฅ ํŠธ๋ฆฌ(Minimum Cost Spanning Trees)

  • Weighted Graph์— ์ ์šฉ, ์ฒซ Vertex์—์„œ ๋งˆ์ง€๋ง‰ Vertex๊นŒ์ง€ ๋Š์–ด์ง€์ง€ ์•Š๊ฒŒ ํ•œ๋ฒˆ์— ๊ทธ๋ฆฐ๋‹ค.

  • Kruskal's Algorithm
    • Edge๋“ค์„ Cost ์ˆœ์œผ๋กœ Sort(์ž‘์€๊ฒƒ๋ถ€ํ„ฐ)
    • Edge๋“ค์„ ์ˆœ์„œ์— ๋”ฐ๋ผ ํ•˜๋‚˜์”ฉ ์—ฐ๊ฒฐํ•œ๋‹ค. ์—ฐ๊ฒฐํ•˜๋‹ค๊ฐ€ Cycle์ด ์ƒ๊ธฐ๋ฉด ๊ทธ๊ฒƒ์€ ์ž‡์ง€๋ง๊ณ  ์ œ๊ฑฐํ•œ๋‹ค. ๋‹ค ์ด์–ด์ง€๋ฉด ๊ทธ๋งŒ๋‘”๋‹ค.

  • Prim's Algorithm
    • Vertex๋ฅผ ํ•˜๋‚˜ ์„ ํƒํ•œ๋‹ค.
    • ๊ฑฐ๊ธฐ์— ์ด์–ด์ง„ Edge์ค‘ ๊ฐ€์žฅ ์ž‘์€๊ฒƒ์„ ์„ ํƒํ•œ๋‹ค.
    • ๊ทธ Edge์— ์ด์–ด์ง„ Vertex์™€ ์ฒ˜์Œ์˜ Vertex์— ์ด์–ด์ง„ Edge์ค‘ ๊ฐ€์žฅ ์ž‘์€๊ฑธ ์„ ํƒํ•œ๋‹ค.
    • ์ด์ง“์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

6. Shortest Paths


6.1. Single Source, All Destination(ํ•˜๋‚˜์˜ ์‹œ์ž‘์ ์—์„œ ๋ชจ๋“  ๊ณณ์œผ๋กœ์˜ Shortest Path๋ฅผ ๊ตฌํ• ์ˆ˜ ์žˆ๋‹จ๋ง์ด๋‹ค)

  • Dijkstra's Algorithm
    • ํ‘œํ˜„์€ ์ธ์ ‘ ํ–‰๋ ฌ(Adjancey(??) Matrix)๋กœ ํ‘œํ˜„(๊ทธ๋Ÿฌ๋‹ˆ๊นŒ 2์ฐจ์› ๋ฐฐ์—ด)
    • costi, j : i -> j ๋กœ ๊ฐ€๋Š” Cost
    • ์ดˆ๊ธฐ๊ฐ’ : S = { V0 } V0 : Source,
    • ์ค‘๊ฐ„ S : { ์ง€๊ธˆ๊นŒ์ง€ Shortest Path๊ฐ€ ๊ฒฐ์ •๋œ Vertex๋“ค } : ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๊ฒฐ์ •๋˜๋ฉด S์— ๋„ฃ๋Š”๋‹ค๋Š” ๋ง์ด๋‹ค.
    • distw : v0์—์„œ ์ถœ๋ฐœํ•˜์—ฌ w๊นŒ์ง€์˜ Shortest Path์˜ ๊ฐ’. ๋‹จ w๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” S์ง‘ํ•ฉ๋‚ด์— ์žˆ๋Š” Vertex๋“ค๋งŒ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด

~cpp 
    Start Vertex : 4 -> S = {4}
    dist[3] = 1500         
    dist[5] = 250                3,5 ๋Š” 4์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ
    dist[others] = ๋ฌดํ•œ๋Œ€
           -> dist[5]๊ฐ€ ๊ฐ€์žฅ ์ž‘๋‹ค. 5๋ฅผ S์— ๋„ฃ๋Š”๋‹ค.
    ...

    ....
   
    ๋ฐ˜๋ณตํ•œ๋‹ค.
  • ์ด๊ฑธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ํ™” ํ•˜๋ฉด,
    • for n-1 ๋ฒˆ ๋ฐ˜๋ณต
      • dist ๊ฐ’์ค‘์—์„œ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” Vertex u ์ฐพ๊ธฐ
      • S = S U {u}
      • dist๊ฐ’ ๊ฐฑ์‹  : distw = min { distw, distu + costu, w }

6.2. All Pairs Shortest Path

  • Floyd - Warshall Algorithm
    • ์—ญ์‹œ ํ‘œํ˜„์€ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ (-) Weight ๋„ ํ—ˆ์šฉํ•œ๋‹ค.(๊ทธ๋ฆฌ๋กœ ๊ฐ€๋ฉด ์ด๋“์ด ๋œ๋‹ค๋Š” ๋ง์ด๋‹ค.) ํ•˜์ง€๋งŒ Negative Cycle์€ ์•ˆ๋œ๋‹ค.
      • Negative Cycle? ๊ทธ ์‚ฌ์ดํด์„ ๋Œ๋ฉด - ๊ฐ€ ๋‚˜์˜ค๋Š”๊ธธ์„ ๋งํ•œ๋‹ค.
    • ์ดˆ๊ธฐ ํ–‰๋ ฌ์„ A(-1)i, j ๋กœ ํ•œ๋‹ค. ๋ฐ˜๋ณตํ• ์ˆ˜๋ก ๊ด„ํ˜ธ ์•ˆ์˜ ๊ฐ’์„ ์˜ฌ๋ ค์ค€๋‹ค. ์ด๊ฑธ n-1๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
    • A(k)i, j ๋ผ๊ณ  ํ•˜๋ฉด i์—์„œ j๋กœ ๊ฐ€๋Š” Shortest Path ์˜ ์ž ์ •์ ์ธ ๊ฐ’์ด๋‹ค.๋‹จ ๋ชจ๋“  ๊ธธ์€ 0 ~ k์˜ vertex๋งŒ์„ ์ค‘๊ฐ„์— ์ง€๋‚ ์ˆ˜ ์žˆ๋‹ค.
    • A(k)i, j = min { A(k-1)i,j, A(k-1)i, k + A(k-1)k, j }

DataStructure

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:05
Processing time 0.0083 sec