đặt vấn đề tìm đường đi cơ bản ngắn nhất, tuy nhiên bài toán đặt ra sẽ trở. nên phức tạp hơn rất nhiều, bởi vì nó chứa bài toán xét sự tồn tại đường đi Hamilton trong đồ thị như là một trường hợp riêng. Trước hết cần chú ý rằng nếu biết khoảng cách từ s đến t, thì đường đi ngắn nhất từ s đến t, trong trường hợp trọng số không âm, có thể tìm một cách đễ đàng. Để tìm đường đi, chỉ cần chú ý là đối với cặp đỉnh s,te V tuỳ ý (sœÐ luôn tìm được đỉnh v sao cho: d(s,1) = d(s,v) + a(v,0 “Thật vậy đỉnh v như vậy chính là đỉnh đi trước đỉnh t trong đường đi ngắn nhất từ s đếnt.
Tiếp theo ta có thể tìm được u sao cho d(s,v)=d(s,u)+a(n,v),. Từ giả thiết về tính không âm của các trọng số dễ dàng suy ra rằng dãy t,v„u. không chứa đỉnh lặp lại và kết thúc ở đỉnh s. Rõ ràng dãy thu được xác định đường đi ngắn nhất từ s dént 1.2 Đường đi ngắn nhất xuất phát từ một đỉnh Phan lớn các thuật toán tìm khoảng cách giữa hai đỉnh s vàt được xây dựng nhờ kỹ thuật tính toán mà ta có thỂ mô tả như sau: từ ma trận trong số a[u,v],n,v € V, ta tính cận trên d[v] của khoảng cách từ s đến tất cả các đỉnh veW.
Mỗi khi phát hiện d[u]+a[,y]<4[v] cân trên d[v] sẽ được tốt lên: đ[v]=d[u]+a[u,v] Quá trình đó sẽ kết thúc khi nào chúng ta không làm tốt thêm được bất cứ cận. Khi đó, rõ ràng giá trị của mỗi d[v] sẽ cho ta khoảng cách từ mỗi đỉnh s đến. Khi thể hiện kỹ thuật tính toán này trên máy tính, cận trên đ[v] sẽ được gọi là nhấn của đỉnh w, còn việc tính lại các cân trên này sẽ gọi là phép gán nhãn cho đồ thi và toàn bộ thủ tục thường gọi là thủ tục gán nhãn. Nhận thấy rằng để tính khoảng cách từ s đến.
tất cả các đỉnh cỏn lại của đồ thị. Hiện nay vẫn chưa biết thuật toán nào cho phép tìm. đường đi ngắn nhất giữa hai đỉnh làm việc thực sự hiệu quả hơn những thuật toán tìm đường đi ngắn nhất từ một đỉnh đến tất cả các đỉnh cỏn lại. Sơ đồ tính toán mà ta vừa mô tả cên chưa là xác định, bởi vì cồn phải chỉ ra thứ tự chọn các đỉnh u và v để kiểm tra điều kiện.
Thứ tự chọn này có ảnh hưởng rất lớn đến hiệu quả thuật toán.3 Đường đi trong đỗ thị không có chu trình. Bay giờ ta xét trường hợp riêng thứ hai của bài toán tìm đường đi ngắn nhất, mà để giải nó có thể xây dựng thuật toán với đô phức tạp tính toán O(n', đó là đồ thị không có chu trình (cỏn trọng số trên các cung có thể là các số thực tuỳ ý). Trước hết ta chứng mình định lý sau Định lý 2. Ciả sử G là đề thị không có chủ trình.
Khi đó các đình của nó có thể đánh số sao cha mỗi cung của đề tị chỉ hướng từ đình có chỉ số nhà hơn đến đình có chỉ số lớn hơn, nghĩa là mỗi cung của nó có thể su didn duci dang (vfij,vij]), trong a i<j. Đồ thị trong hình sau có các đỉnh được đánh số thỏa mãn điều kiện nêu. trong định lý Hình 8, Đã thị không cé chu trinh ĐỂ chứng mình định lý ta mô tả thuật toán sau, cho phép tim ra cách đánh số thỏa mãn điều kiện định lý. Void Numbering; Đầu vào: Đồ (thị có hướng CE=(U,R) với n dink không chúa chu trình được cho bởi danh sách kê Ke(y),ve V Đầu ra: Với mỗi đình ve V chỉ số NRƒu]< NRỊY].
{ Ter ve V do Vao[v]}=0; ( ảnh Vao[v]=deg-(v) *) For ue V do For veKe(u) do Vao[v]:=Vao[x]+ l; QUEUE=Ø; For ve Vdo TẾ Vao[v]=0 then QUEUE v ; Num :=0; Trang 10 While QUEUE + © do { uc QUEUE; Num :=num +1; NR[u] :=num; For ve Ke(u)do { Vao[v]:=Vaolv] - 1; TE Vao[v]+0 then QUEUE € v ; } } } Thuật toán được xây dung dựa trên ý tưởng rất đơn giản sau: Rõ ràng trong đồ thị không có chủ trình bao giờ cũng tìm được đỉnh có bán bậc vào bằng 0 (không có cung đi vào). Thực vậy, bắt đầu từ đỉnh v1 nếu có cung đi vào nó từ v2 thì ta lại chuyển sang xét đỉnh v2. Nếu có cung v3 đi vào v2, thì ta chuyển sang xét v3. Do đề thị là không có chu trình nên sau một số hữu hạn lần chuyển như vậy ta phải đi đến đỉnh không có cung đi vào.
Thoạt tiên, tim các đỉnh như vậy của đồ thị, Rõ rằng ta có thể đánh số chúng theo một thứ tự tuỳ ý bất đầu từ 1. Tiếp theo, loại bỏ khởi đồ thị những đỉnh đã được đánh số cùng các cung đi ra khỏi chúng, ta thu được đồ thị mới cũng không có chu trình, và thủ tục được lấp lại với đồ thị mới này. Quá trình đó sẽ được tiếp tục cho đến khi tất cả các đỉnh của đồ thị được đánh số. Trang II CHUONG 2 MOT SO THUAT TOAN TIM DUONG DI NGAN NHAT TREN DO THI 2.
MỘT SO KHAI NIEM Xết đồ thị có hướng G=(V,E), [V|=n, [E|=m với các cung được gắn trọng số, nghĩa là, mỗi cung (u, v) € E của nó được đặt tương ứng với một số thực a(u, v) gọi là trọng số của nó. Chúng ta sẽ đặt a(u, v) = 00 , néu (u,v) € E. Néu day vo, vị,. vụ là một đường đi trên G, thi d6 đài của nó được định nghĩa là tổng sau ” Dialers) tức là, độ dài của đường đi chính là tổng của các trọng số trên các cùng của nó.
(Chú ý rằng nếu chúng ta gán trọng số cho tất cả cung đều bằng 1, thì ta thu được định nghĩa độ dài của đường đi như là số cung của đường đi giống như trong các chương. trước đã xé), Bài toán tìm đường đi ngắn nhất trên đồ thị đưới dạng tổng quát có thể phát biểu. như sau: tìm đường đi có độ đài nhỏ nhất từ một đỉnh xuất phát s € V đến đỉnh cuối (dich) t € V. Dudng đi như vậy ta sẽ gọi là đường đi ngắn nhất từ s đến t còn độ đài của nó ta sẽ ký hiệu là d(s, ) và còn gọi là khoảng cách từ s đến t (khoảng cách định nghĩa như vậy có thể là số âm).
Nếu như không tồn tại đường đi từ s đến t thì ta sẽ đất d(s, = 00. RS rang, néu như mỗi chu trình trong đồ thị đều có độ đài đương, trong. đường đi ngắn nhất không có đỉnh nào bị lặp lại (đường đi không có đỉnh lặp lại sẽ gọi là đường đi cơ bản), Mặt khác nếu trong đồ thị có chu trình với độ dài âm (chu trình như vậy để gọi ngắn gọn ta gọi là chu trình âm) thì khoảng cách giữa một số cặp đỉnh nào đó của đồ thị có thể là không xác định, bởi vì, bằng cách đi vòng theo chu trình này một số đủ lớn lần, ta có thể chỉ ra đường đi giữa các đỉnh này có độ đài nhỏ hơn bắt cứ số thực cho trước nào. Trong những trường hợp như vậy, có thể đặt vấn dé tim đường đi cơ bản ngắn nhất, tuy nhiên bài toán đặt ra sẽ trở nên phức tạp hơn rất nhiều, bởi vì nó chứa bài toán xét sự tồn tại đường đi Hamilton trong đồ thị như là một trường hợp riêng, Trước hết cần chú ý rằng nếu biết khoảng cách từ s đến t, thì đường đi ngắn nhất từ s đến t, trong trường hợp trọng số không âm, có thể tìm được một cach dé ding Dé Trang 12 tìm đường đi, chỉ cần để ý là đối với cặp đỉnh s,t € V tuỷ ý (s <> Ð luôn tìm được đỉnh v sao chơ dís, Ð = đ(s, v) + alv, 1.
Thực vậy, đỉnh v như vậy chính là đỉnh đi trước đỉnh t rong đường đi ngắn nhất từ s đếnt Tiếp theo ta lại có thể tìm được đỉnh u sao cho đ(, v) = đ(s, u) + a(u,v), Từ giả thiết về tính không âm của các trọng số dé dang suy ra ring day t, v, u, không chứa đỉnh lặp lại và kết thúc ở đỉnh s. Rõ ràng dãy thu được xác định (nếu lật ngược thứ tự các đỉnh trong nó) đường đi ngắn nhất từ s đếnt. Từ đó ta có thuật toán. sau day dé tim đường đi ngắn nhất từ s đến t khi biết độ đài của nó.
Chú ý rằng đô phức tạp tính toán của thuật toán là O(n2, đo để Rm đỉnh u ta phải xét qua tất cả các đỉnh của đồ thị. Tất nhiên, ta cũng có thể sử dụng kỹ thuật ghi nhận. đường đi đã trình bay trong chương 3: dùng biến mắng Tmoc[v], v € V, để ghỉ nhớ đỉnh đi trước v trong đường đi tìm kiểm. Cũng cần lưu ý thêm là trong trường hợp trọng số trên các cạnh là không âm, bài toán ầm đường đi ngắn nhất trên đồ thị vô hướng có thể dẫn về bài toán trên đồ thị có hướng, bằng cách thay đổi mỗi cạnh của nó bởi nó bởi hai cung có hướng ngược.
chiều nhau với cùng trọng số là trọng số của các cạnh tương ứng. Tuy nhiên, trong trường hợp có trọng số âm, việc thay như vậy có thể dẫn đến chu trình âm. ĐƯỜNG ĐI NGẮN NHÁT XUẤT PHÁT TỪ MỘT ĐỈNH 2.1 Đường đi ngắn nhất xuất phát từ một đỉnh. Thuật toán Ford-Bellman Phần lớn các thuật toán tìm khoảng cách giữa hai đỉnh s vàt được xay đựng nhờ kỹ thuật tính toán mà ta có thể mô tả đại thể như sau: từ ma trận trọng số a[u, v], u, v € `, ta tính cận trên đ[v] của khoảng cách từ s đến tất cả các đỉnhv € V.
Mẫi khi phát hiện d[u]+ a[n,v] < d[v] (1) cận trên địv] sẽ được làm tốt lên: đ[v] + a[u, v] Quá trình đó sẽ kết thúc khi nào chúng ta không làm tốt thêm được bất kỳ cận. Khi đó, rõ rằng giá trị của mỗi d[w] sé cho khoảng cách từ đỉnh s đến đỉnh v. Khi thể hiện kỹ thuật tính toán này trên máy tính, cận trên d[v] sẽ được gọi là nhãn của đỉnh v, còn việc tính lại các cận này sẽ được gọi là thủ tục gán. Nhận thầy rằng để tính khoảng cách từ s đến t, ở đây, ta phải tính khoảng cách từ s đến tất cả các đỉnh cỏn lại của đề thị.