Bài giảng Cấu trúc dữ liệu và giải thuật: Lý thuyết đồ thị, được biên soạn gồm các nội dung chính sau: định nghĩa về đồ thị, cây; biểu diễn đồ thị trên máy tính; thuật toán đường đi ngắn nhất – dijkstra’s. Mời các bạn cùng tham khảo!
L(b)= min{L(x)| x ∈ T} = Suy ra: v = b T:= T – {b} = {𝑐, 𝑑, 𝑒, 𝑧} + Thực bước 3: Vì 𝑧 ≠ 𝑣, sang bước +Thực bước 4: Xét đỉnh d đỉnh c kề đỉnh b Ta có L(c) := ∞ > L(b) + w(b,c) = + = ⟹ L(c) := 9, gán P(c) := b; L(d) := : khơng đổi (Hình 4) KHOA CƠNG NGHỆ THƠNG TIN 22 4.2 Thuật tốn đường ngắn +Thực bước 2: L(d)= min{L(x)| x ∈ T} = Suy ra: v = d T:= T – {d} = {𝑐, 𝑒, 𝑧} + Thực bước 3: Vì 𝑧 ≠ 𝑣, sang bước +Thực bước 4: Xét đỉnh e đỉnh c kề đỉnh d Ta có L(e) := ∞ > L(d) + w(d,e) = + = ⟹ L(e) := 8, gán P(e) := d; L(c) := > L(d) + w(d,c) = + = ⟹ L(c) := 5, gán P(c) := d; (Hình 5) KHOA CƠNG NGHỆ THƠNG TIN 23 4.2 Thuật tốn đường ngắn +Thực bước 2: L(c)= min{L(x)| x ∈ T} = Suy ra: v = c T:= T – {c} = {𝑒, 𝑧} + Thực bước 3: Vì 𝑧 ≠ 𝑣, sang bước +Thực bước 4: Xét đỉnh e đỉnh z kề đỉnh c Ta có L(e) := : khơng đổi; L(z) := ∞ > L(c) + w(c,z) = + = ⟹ L(z) := 8, gán P(z) := c; (Hình 6) KHOA CƠNG NGHỆ THƠNG TIN 24 4.2 Thuật tốn đường ngắn +Thực bước 2: L(z)= min{L(x)| x ∈ T} = Suy ra: v = z T:= T – {z} + Thực bước 3: Vì 𝑧 = 𝑣, kết thúc L(z) = độ dài đường ngắn từ a đến z Vậy đường ngắn là: a →d →c →z KHOA CÔNG NGHỆ THÔNG TIN 25 #BÀI TẬP 1: a) Viết ma trận kề từ đồ thị có hướng sau (Hình 1) b) Tìm đường ngắn từ đỉnh a đến đỉnh z đồ thị có hướng sau (Hình 2) KHOA CƠNG NGHỆ THƠNG TIN 26 BÀI KIỂM #BÀI TẬPTRA 2: số Áp dụng thuật tốn Dijkstra’s tìm đường ngắn từ đỉnh a đến đỉnh z đồ thị vô hướng sau a)Viết ma trận kề từ đồ thị vơ hướng hình b)Tìm đường ngắn từ đỉnh a đến đỉnh z đồ thị vơ hướng hình (Hình 1) KHOA CÔNG NGHỆ THÔNG TIN 27 #Thực hành 01: #Nhận xét: input, output ?? KHOA CÔNG NGHỆ THÔNG TIN >>> import math >>> import sys >>> class Graph(): def init (cung, dinh): cung.x = dinh cung.graph = [[0 for column in range(dinh)] for row in range(dinh)] def inketqua(cung, L, a): print ("đỉnh nguồn xuất phát từ: ") for nut in range(cung.x): print (a," đến đỉnh ",nut, "độ dài đường là: ", L[nut]) def duongdinhonhat(cung, L, P): = sys.maxsize for x in range(cung.x): if L[x] < and P[x] == False: = L[x] min_index = x return min_index def timduongdi(cung, a): L = [sys.maxsize] * cung.x L[a] = P = [False] * cung.x for cout in range(cung.x): u = cung.duongdinhonhat(L, P) P[u] = True for x in range(cung.x): if cung.graph[u][x] > and P[x] == False and L[x] > L[u] + cung.graph[u][x]: L[x] = L[u] + cung.graph[u][x] cung.inketqua(L, a) >>> g = Graph(6) #đồ thị vô hướng >>> g.graph = [[0, 3, 0, 1, 0, 0], [3, 0, 5, 2, 0, 0], [0, 5, 0, 0, 4, 2], [1, 2, 0, 0, 6, 0], [0, 0, 4, 6, 0, 7], [0, 0, 2, 0, 7, 0] ]; >>> g.timduongdi(0); 28 #Thực hành 02: >>> g = Graph(6) #đồ thị có hướng >>> g.graph = [[0, 3, 0, 4, 0, 0], [0, 0, 6, 2, 0, 0], [0, 0, 0, 0, 4, 3], [0, 0, 1, 0, 4, 0], [0, 0, 0, 0, 0, 5], [0, 0, 0, 0, 0, 0] ]; >>> g.timduongdi(0); #Nhận xét: input, output thuật toán đường ngắn #Yêu cầu – comment vào dấu note, bước lặp, vòng lặp giải thuật KHOA CÔNG NGHỆ THÔNG TIN 29 #Thực hành 03: a)Viết ma trận kề từ đồ thị có hướng (hình 1) a) Viết ma trận kề từ đồ thị có hướng b)Tìm đường ngắn từ đỉnh a đến đỉnh z (đỉnh đến đỉnh 5) b) Tìm đường ngắn từ đỉnh a đến đỉnh z đồ thị có hướng đồ thị có hướng (hình 1) (Hình 1) KHOA CƠNG NGHỆ THƠNG TIN 30 ... THÔNG TIN 25 #BÀI TẬP 1: a) Viết ma trận kề từ đồ thị có hướng sau (Hình 1) b) Tìm đường ngắn từ đỉnh a đến đỉnh z đồ thị có hướng sau (Hình 2) KHOA CÔNG NGHỆ THÔNG TIN 26 BÀI KIỂM #BÀI TẬPTRA 2:... Dijkstra’s tìm đường ngắn từ đỉnh a đến đỉnh z đồ thị vô hướng sau a)Viết ma trận kề từ đồ thị vơ hướng hình b)Tìm đường ngắn từ đỉnh a đến đỉnh z đồ thị vơ hướng hình (Hình 1) KHOA CƠNG NGHỆ THƠNG... #Yêu cầu – comment vào dấu note, bước lặp, vịng lặp giải thuật KHOA CƠNG NGHỆ THÔNG TIN 29 #Thực hành 03: a)Viết ma trận kề từ đồ thị có hướng (hình 1) a) Viết ma trận kề từ đồ thị có hướng b)Tìm