330 likes | 357 Views
CSE 221/ICT221 Analysis and Design of Algorithms Lecture 10: Problem Solving Problem with Graphs: Shortest Path and และ Minimum Spanning Tree. Asst.Prof . Dr.Surasak Mungsing E-mail: Surasak.mu@spu.ac.th. Sparse Graphs.
E N D
CSE 221/ICT221 Analysis and Design of AlgorithmsLecture 10:Problem Solving Problem with Graphs: Shortest Pathand และ Minimum Spanning Tree Asst.Prof. Dr.SurasakMungsing E-mail: Surasak.mu@spu.ac.th
Sparse Graphs In a sparse graph the number of edges is significantly less than |V| squared.
Dense Graphs In a dense graph most of the vertices are connected by edges.
Adjacency List Representation In order to run algorithms on graphs we can use one of two representations of them. The first is an adjacency list. Here each vertex has an entry in an array that contains a linked list to the adjacent vertices.
Adjacency-Matrix Representation Another method of storing the information about the graph is called an adjacency-matrix. Here a V by V matrix is formed with entries 0 or 1.
Directed Graphs A directed graph the edge (u,v) is distinct from the edge (v,u). Here is an example:
Weighted Graphs A weighted graph has a real value associated with each edge as in this graph:
Single Source Shortest Path • กำหนด (un)weighted, directed graph G = {V, E}มาให้ซึ่งแต่ละedgeมีค่าcost(หรือ weight)เป็นจำนวนบวก • Problem: จงหาค่ารวมของcost ของเส้นทางทีสั้นที่สุดจากvertexต้นทางไปยังvertexปลายทางอื่นๆ • ความยาวของเส้นทางคือคารวมของcostของedgeต่างๆบนเส้นทางนั้น • ทำไมไม่กำหนดเส้นทางใดเส้นทางหนึ่งไปยังจุดหมายปลายทาง? • Application: G คือแผนที่เส้นทางบินของสายการบินซึ่งจะต้องหาเส้นทางบินจากเมืองที่กำหนดให้ไปยังอีกเมืองอื่นๆโดยใช้เวลาเดินทางน้อยที่สุด
Dijkstra’s Algorithm • รักษาset Sของverticesซึ่งรู้ค่าของเส้นทางที่สั้นทีสุดจากต้นทางแล้ว • ตอนเริ่มต้นSมีเพียงvertexต้นทาง เท่านั้น • ในแต่ละstep,เราเพิ่มvertex wที่เหลือซึ่งมีเส้นทางจากvertexต้นทางสั้นทีสุดเข้าไปในS • สมมติว่าทุกedgeมีcostเป็นบวก เราสามารถหาเส้นทางที่สั้นที่สุดจากต้นทางไปยังvertexอื่นโดยผ่านเส้นทางในS (special path)เท่านั้นได้เสมอ • ในทุกๆstep เราใช้array บันทึกค่าระยะทางที่สั้นที่สุดของspecial pathไปยังแต่ละvertex • เสร็จสิ้นการคำนวณเมื่อใน Sครอบคลุมทุกvertex(all paths are special)
Algorithm • Directed graph G={V, E} • V={1, 2, …, n}, Vertex 1 is the source • Cost-adjacency matrix A[0:n][0:n] • Array D[1:n]; at each step D[i] contains the length of the current shortest special path to vertex i • Initially D[i] = A[s][i] • Array P[1:n] of vertices, such that P[v] contains the vertex immediately before v in the shortest path • Initially P[v]=1, v1
Explanations • How do we compute D[v]? • At each step: D[v] := min(D[v], D[w]+A[w][v]) • How do we update P? • After computing D[v], if D[w]+A[w][v]< D[v] then P[v] :=w
Dijkstra: Example 1 G 10 100 30 5 2 10 50 60 3 4 20 Shortest path from 1 to 5? In reverse direction: 53 4 1
An Example inf inf 7 a d 5 2 2 inf 4 b f 5 1 s 3 inf 0 1 7 e 4 c 4 inf inf
2 inf 7 a d 5 2 2 4 5 b f 5 1 s 3 inf 0 1 7 e 4 c 4 inf 4
2 9 7 a d 5 2 2 4 4 b f 5 1 s 3 inf 0 1 7 e 4 c 4 inf 4
2 8 7 a d 5 2 2 4 4 b f 5 1 s 3 inf 0 1 7 e 4 c 4 7 4
2 8 7 a d 5 2 2 4 4 b f 5 1 s 3 inf 0 1 7 e 4 c 4 7 4
2 8 7 a d 5 2 2 4 4 b f 5 1 s 3 14 0 1 7 e 4 c 4 7 4
2 8 7 a d 5 2 2 4 4 b f 5 1 s 3 13 0 1 7 e 4 c 4 7 4
2 8 7 a d 5 2 2 4 4 b f 5 1 s 3 13 0 1 7 e 4 c 4 7 4
Shortest Path Tree The unique simple path from s to v in the tree is a shortest path from s to v. 2 8 a d 5 2 2 4 4 b f s 3 13 0 e 4 c 7 4
2 (2) (1) v1 v2 10 4 3 1 2 Minimum Spanning Tree 7 v3 v4 v5 5 4 8 6 v6 v7 1 Prim’s Algorithm
2 Minimum Spanning Tree (4) (3) v1 v2 10 4 3 1 2 7 v3 v4 v5 5 4 8 6 v6 v7 1 Prim’s Algorithm
2 (5) v1 v2 10 4 3 1 2 Minimum Spanning Tree 7 v3 v4 v5 5 4 8 6 v6 v7 1 Prim’s Algorithm
(1) (3) (2) (5) (4) (6) Prim’s Algorithm
(1) (3) (2) (4) (5) (6) Kruskal’sAlgorithm