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