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.0277 sec