Asst.Prof. Dr.Surasak Mungsing E-mail: Surasak.mu@spu.ac.th CSC201 Analysis and Design of Algorithms Problem Solving Problem with Graphs: Shortest Path and และ Minimum Spanning Tree Asst.Prof. Dr.Surasak Mungsing E-mail: Surasak.mu@spu.ac.th Apr-17
Sparse Graphs In a sparse graph the number of edges is significantly less than |V| squared. 4/4/2017
Dense Graphs In a dense graph most of the vertices are connected by edges. 4/4/2017
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. 4/4/2017
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. 4/4/2017
Directed Graphs A directed graph the edge (u,v) is distinct from the edge (v,u). Here is an example: 4/4/2017
Matrix Representation 4/4/2017
Weighted Graphs A weighted graph has a real value associated with each edge as in this graph: 4/4/2017
Matrix Representation 4/4/2017
Single Source Shortest Path กำหนด (un)weighted, directed graph G = {V, E} มาให้ซึ่งแต่ละ edge มีค่า cost (หรือ weight) เป็นจำนวนบวก Problem: จงหาค่ารวมของ cost ของเส้นทางทีสั้นที่สุดจาก vertex ต้นทางไปยัง vertex ปลายทางอื่นๆ ความยาวของเส้นทางคือคารวมของ cost ของedge ต่างๆบนเส้นทางนั้น ทำไมไม่กำหนดเส้นทางใดเส้นทางหนึ่งไปยังจุดหมายปลายทาง? Application: G คือแผนที่เส้นทางบินของสายการบินซึ่งจะต้องหาเส้นทางบินจากเมืองที่กำหนดให้ไปยังอีกเมืองอื่นๆโดยใช้เวลาเดินทางน้อยที่สุด 4/4/2017
รักษา set S ของ vertices ซึ่งรู้ค่าของเส้นทางที่สั้นทีสุดจากต้นทางแล้ว 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) 4/4/2017
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 4/4/2017
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 4/4/2017
Dijkstra: Example G 1 2 5 3 4 Shortest path from 1 to 5? 10 100 30 2 5 10 50 60 3 4 20 Shortest path from 1 to 5? In reverse direction: 53 4 1 4/4/2017
An Example inf inf a 7 d 5 2 2 inf 4 5 b f 1 s 3 inf 1 7 4 e c 4 inf 1 7 4 e c 4 inf inf 4/4/2017
2 inf a 7 d 5 2 2 5 4 5 b f 1 s 3 inf 1 7 4 e c 4 inf 4 4/4/2017
2 9 a 7 d 2 5 2 4 4 5 b f 1 s 3 inf 1 7 4 e c 4 inf 4 4/4/2017
2 8 a 7 d 2 5 2 4 4 5 b f 1 s 3 inf 1 7 4 e c 4 7 4 4/4/2017
2 8 a 7 d 2 5 2 4 4 5 b f 1 s 3 inf 1 7 4 e c 4 7 4 4/4/2017
2 8 a 7 d 2 5 2 4 4 5 b f 1 s 3 14 1 7 4 e c 4 7 4 4/4/2017
2 8 a 7 d 2 5 2 4 4 5 b f 1 s 3 13 1 7 4 e c 4 7 4 4/4/2017
2 8 a 7 d 2 5 2 4 4 5 b f 1 s 3 13 1 7 4 e c 4 7 4 4/4/2017
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 2 5 2 4 4 b f s 3 13 4 e c 7 4 4/4/2017
Minimum Spanning Tree 1 4 2 5 6 10 3 7 8 v1 v2 v3 v4 v5 v6 v7 (1) (2) Prim’s Algorithm 4/4/2017
Minimum Spanning Tree 1 4 2 5 6 10 3 7 8 v1 v2 v3 v4 v5 v6 v7 (3) (4) Prim’s Algorithm 4/4/2017
Minimum Spanning Tree 1 4 2 5 6 10 3 7 8 v1 v2 v3 v4 v5 v6 v7 (5) Prim’s Algorithm 4/4/2017
Prim’s Algorithm (1) (2) (3) (4) (5) (6) 4/4/2017
Kruskal’s Algorithm 4/4/2017
Kruskal’s Algorithm (2) (3) (1) (4) (6) (5) 4/4/2017
4-Apr-17