Luận văn tốt nghiệp - Đường đi ngắn nhất trong đồ thị

14 1K 7
Luận văn tốt nghiệp - Đường đi ngắn nhất trong đồ thị

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Luận văn tốt nghiệp 42 Chương 4 ĐƯỜNG ĐI NGẮN NHẤT TRONG ĐỒ THỊ Giới thiệu: Trong các ứng dụng thực tế bài toán tìm đường đi ngắn nhất giữa hai đỉnh của một đồ thị liên thông có ý nghĩa rất lớn. Bài toán tìm đường đi ngắn nhất được ứng dụng trong thực tế như để chọn một hành trình tiết kiệm nhất (về thời gian hoặc chi phí) trên một mạng giao thông đường thuỷ, đường bộ hoặc đường không. Bài toán lập l ịch thi công các công đoạn trong một công trình thi công lớn. Bài toán lựa chọn đường truyền tin với chi phí nhỏ nhất trong mạng thông tin . Dùng thuật giải đường đi ngắn nhất trong đồ thị giải quyết bài toán sửa gói tin sai trong việc truyền tin . dưới đây ta xét một số thuật toán để tìm đường đi ngắn nhất trong đồ thịtrọng số và đồ thị không có trọng số. I. ĐƯỜNG ĐI NGẮN NHẤ T TRONG ĐỒ THỊ KHÔNG CÓ TRỌNG SỐ 1. Định nghĩa: Đồ thị không có trọng số là đồ thị hữu hạn trên các cạnh không có trọng số. Bài toán tìm đường đi ngắn nhất giữa hai đỉnh a,b trong đồ thị không có trọng số G = <X, U> là tìm đường đi giữa hai đỉnh a, b sao cho có số các cạnh (cung) là ít nhất. 2. Thuật toán: Bước 1: Tại đỉnh a ta ghi số 0 Các đỉnh có cạnh đi từ đỉnh a đến ta ghi số 1. Giả sử ta đã ghi tới i, tức là ta đã đánh số được các tập đỉnh là A(0) = {a}, A(1), A(2), . , A(i) trong đó A(i) là tập tất cả các đỉnh được ghi bởi số i. Ta xác định tập đỉnh được đánh số bởi số i + 1 là A(i+1) = {x / x  X, x  A(k) với k = 0, .,i và tồn tại y  A(i) sao cho từ y có cạnh (cung) tới x}. Do tính hữu hạn của đồ thị, sau một số hữu hạn các bước, thuật toán dừng lại và cho kết quả là tập các đỉnh có chứa b được đánh số bởi m là A(m). Bước 2: Do bước 1 thì đỉnh b được đánh số bởi m, điều này chứng tỏ đường đi từ a đến b có m cạnh (cung) và là đường ngắn nhất đi từ a đến b. Để tìm t ất cả các đườngđộ dài m ngắn nhất đi từ a đến b, ta xuất phát từ b đi ngược về a theo đúng nguyên tắc sau đây: Luận văn tốt nghiệp 43 - Tìm tất cả các đỉnh có cạnh (cung) tới b được ghi số m - 1, giả sử đó là x ik (k = 1, 2, .). - Với mỗi đỉnh x ik tìm tất cả các đỉnh có cạnh (cung) với x ik (k = 1, 2, .) được ghi số m -2. Bằng cách lùi dần trở lại, đến một lúc nào đó gặp đỉnh ghi số 0, đó chính là đỉnh a. Tất cả các đường xác định theo các bước trên là đường đi từ a đến b có độ dài ngắn nhất là m cần tìm. Hình 1.1 Ví dụ đồ thị như hình 1.1 xây dựng đường đi ngắn nhất theo thuật toán trên: Bước 1: Đỉnh a được đánh số 0 và có A(0) = {a} A(1) = {x 1 , x 6 , x 7 } A(2) = {x 2 , x 5 , x 8 } A(3) = {x 3 , b, x 9 } Bước 2: Từ bước 1 ta có b  A(3) nên từ a đến b là đường đi ngắn nhất có 3 cung. Tiếp theo ta xác định tất cả các đường đi ngắn nhấtđộ dài 3: Đỉnh có cung về b được đánh số 2 là x 5 Đỉnh có cung tới x 5 được đánh số 1 là x 6 Đỉnh có cung về x 6 được đánh số 0 là a Vậy đường cần tìm là a - x 6 - x 5 - b. II. ĐƯỜNG ĐI NGẮN NHẤT TRONG ĐỒ THỊTRỌNG SỐ 1. Các khái niệm Cho đồ thị hữu hạn G = <X, U> với mỗi cạnh u  U ta đặt tương ứng với số dương l(u) gọi là trọng số của u. Đồ thị có cạnh như trên được gọi là đồ thịtrọng số. Gọi  là một đường đi nào đó trong G = <X, U> Giả sử  = x i 1 u i 1 x i 2 u i 2 . x i n - 1 u i n-1 x i n , x ij  X , u ij  U (j = 1, 2, .,n). Khi đó ký hiệu gọi là trọng số của đường  ∑ − = 1 )()( n j ij ull α x 1 x 2 x 3 x 4 x 7 x 8 x 9 x 10 x 6 x 5 b a 0 1 2 3 3 3 2 1 1 2 Luận văn tốt nghiệp 44 Ta ký hiệu D(a,b) là tập tất cả các đường đi nối đỉnh a với đỉnh b trong đồ thị G. Đường đi  giữa a và b là ngắn nhất nếu  thoả mãn l(  ) = min {l(  ) /   D(a,b)} Bài toán: Cho đơn đồ thị G = <X, U> liên thông có trọng số, và a, b  X. Tìm các đường đi ngắn nhất giữa 2 đỉnh a, b. 2. Thuật toán tìm đường đi ngắn nhất cho đồ thịtrọng số 2.1 Cơ sở thuật toán tìm đường đi ngắn nhất Cho G = <X, U> tìm đường đi ngắn nhất từ đỉnh a tới đỉnh b Với x  X nếu độ dài đường đi từ đỉnh xuất phát tới đỉnh x có trọng số là l(  ) thì  (x) = l(  ) gọi là trọng số của đỉnh x. Cơ sở của tất cả các thuật toán tìm đường đi ngắn nhất là xác định được các trọng số nhỏ nhất cho tất cả các đỉnh từ đó tìm đường đi ngắn nhất. Bước 1: Đánh trọng số các đỉnh, trọng số của đỉnh xuất phát là  (a) = 0. Tại các đỉnh còn lại ta ghi một số dương nào đó sao cho nó đủ lớn hơn trọng số của các đỉnh từ a tới. Bước 2: Thực hiện việc giảm trọng số các đỉnh. Giả sử tại đỉnh x được ghi trọng số  (x). Nếu tồn tại đỉnh y có trọng số  (y) từ y sang x mà  (x) >  (y) + l(y, x) thì ta thay trọng số của  (x) bởi trọng số  '(x) =  (y) + l(y, x). Trường hợp  (x) <  (y) + l(y, x), trọng số của x giữ nguyên là  (x). Quá trình thực hiện cho tới khi trọng số của tất cả các đỉnh trong G = <X, U> đạt cực tiểu, tức là x  X không tồn tại y  X kề với x mà  (y) + l(y, x) <  (x). Bước 3: Xác định đường từ a đến b có trọng số ít nhất. Từ bước 3 ta xác định được trọng số của đỉnh b. Xuất phát từ b đi về đỉnh kề với b, chẳng hạn đó là đỉnh x i n có tính chất  (b) =  (x) + l(x i n , b). Nếu không có đỉnh kề với x i n như vậy thì ta đi về đỉnh kề với b có trọng số cạnh (cung) từ đỉnh đó về b là ít nhất. Từ đỉnh x i n ta đi ngược về đỉnh x i n-1 có tính chất  (x i n ) =  ( i n-1 ) + l(x i n-1 , x i n ) nếu không đi về đỉnh kề với x i n mà trọng số cạnh (cung) giữa chúng là ít nhất. Bằng cách đó ta sẽ đi về đỉnh x i 1 mà đỉnh kề là a sao cho  (x i 1 ) =  (a) + l(a, x i 1 ) = l(a, x i 1 ) với  (a) = 0. Đường  = ax i 1 x i 2 . x i n - 1 x i n b là đường đi từ a đến b có trọng số ít nhất trong số tất cả các đường từ a đến b. Thật vậy l(  ) = l(a,x i 1 ) + l(x i 1 ,x i 2 ) + . + l(x i n-1 ,x i n ) + l(x i n ,b) = [  (x i 1 )-  (a)] + [  (x i 2 ) -  (x i 1 )] + . + [  (x i n ) -  (x i n-1 )] + [  (b) -  (x i n )] =  (b) (1) Giả sử   D(a, b) là 1 đường bất kỳ từ a đến b và có dạng: Luận văn tốt nghiệp 45  = a j 1 x j 2 . x j k-1 x j k b. Theo bước 2 ta có bất đẳng thức sau: l(a, x j 1 )   (x j 1 ) -  (a) =  (x j 1 ) l(x j 1 , x j 2 )   (x j 2 ) -  (x j 1 ) . l(x j k-1 ,x j k )   (x j k ) -  (x j k-1 ) l(x j k , b)   (b) -  (x j k ) Cộng 2 vế ta có: l(  ) = l(a, x j 1 ) + l(x j 1 , x j 2 ) + . + l(x j n-1 , x j k ) + l(x j k , b)   (b) (2) So sánh (1) và (2) ta có: l(  ) = min{ l(  ) /   D(a, b)} 2.2 Thuật toán Dijkstra Có thể khái quát thuật toán bằng thủ tục sau: Procedure Dijikstra(G: đồ thị liên thông có trọng số dương)} {G: có các đỉnh a = v 0 , v 1 , ., v n = b và trọng số l(v i , v j ) =  nếu (v i , v j )  U của G} For i:=1 to n  (v i ) :=  ;  (a) := 0; S :=  {ban đầu các trọng số được khởi tạo sao cho trọng số của a = 0, còn các đỉnh khác bằng  , tập S rỗng} While b  S Begin u:= đỉnh không thuộc S có  (u) nhỏ nhất; S := S  {u}; For tất cả các đỉnh v không thuộc S if (u) + l(u,v) < (v) then (v) := (u) + l(u,v) {thêm vào S đỉnh có trọng số nhỏ nhất và sửa đổi trọng số của các đỉnh không thuộc S} End; {l(  ) = l(a, b) = độ dài đường đi ngắn nhất từ a đến b} Độ phức tạp của thuật toán là O(n 2 ), tức là phải dùng O(n 2 ) phép cộng và so sánh đường đi ngắn nhất giữa 2 đỉnh trong đồ thị đơn vô hướng liên thông có trọng số. 2.3 Thuật toán Ford - Bellman Luận văn tốt nghiệp 46 Khác với thuật toán Dijkstra xác định các trọng số bé nhất của tất cả các đỉnh bằng cách "nổi bọt" dần các trọng số bé nhất, mỗi lần trọng số bé nhất được tìm thấy thì lấy nó làm hạt nhân để điều chỉnh và xác lập các trọng số cho các đỉnh khác, còn thuật toán Ford - Bellman xác định các trọng số nhỏ nhất cho tất cả các đỉnh bằng cách duyệt tất cả các đỉnh, tr ọng số nhỏ nhất của một đỉnh được xác lập là sau một số lần hữu hạn điều chỉnh nhờ các vòng lặp. Thuật toán được mô tả bằng thủ tục sau: Procedure Ford_Bellman; {Input: Đồ thị có hướng G = <X, U> n đỉnh, a  X là đỉnh xuất phát. t(i, j) với i, j  X là ma trận trọng số Output: Với x  X tìm các (x) bé nhất và Truoc(x) để ghi nhận đỉnh đi trước x trong các đường đi ngắn nhất từ a đến x. } Begin {Khởi tạo} For x  X do Begin (x) := t[a, x]; Truoc[x] := a; End; (a) := 0; For k:=1 to n - 2 do For x  X \ {a} do For y  X do if (x) > (y) + t[y, x] then begin (x) := (y) + t[y, x]; Truoc(x) := y; End; End; Độ phức tạp của thuật toán là O(n 3 ) chúng ta có thể chấm dứt vòng lặp theo k khi phát hiện trong quá trình thực hiện 2 vòng lặp trong không có biến d[u] nào bị thay đổi giá trị. Đối với những đồ thị có số cạnh m thoả mãn m < 6.n thì tốt hơn là sử dụng danh sách kề để biểu diễn đồ thị, khi đó vòng lặp theo y cần viết dưới dạng For tất cả các đỉnh y kề với x do if (x) > (y) + t[y, x] then begin (x) := (y) + t[y, x]; Luận văn tốt nghiệp 47 Truoc(x) := y; End; Trong trường hợp này thuật toán có độ phức tạp là O(n.m). 2.4 Thuật toán Floyd. Trong nhiều trường hợp ta cần xác định đường đi ngắn nhất giữa tất cả các cặp đỉnh, với bài toán này có thể giải bằng cách sử dụng n lần thuật toán thuật toán Ford_bellman trong đó ta sẽ chọn s lần lượt là các đỉnh của đồ thị cách làm này không phải là cách làm tốt nhất ở đây, ta sẽ trình bày thuật toán để gi ải quyết bài toán này trên đó là thuật toán Floyd. Thuật toán được trình bày khái quát ở dạng thủ tục sau: Procedure Floyd; { Input: đồ thị cho bởi ma trận trọng số a[i,j], i,j = 1,2, .,n; Output: Ma trận đường đi ngắn nhất giữa tất cả các cặp đỉnh. d[i,j], i,j = 1,2, .n. Trong đó d[i,j] cho độ dài ngắn nhất từ i đến j Ma trận ghi nhận đường đi p[i,j] ghi nhận đường đi trước đỉnh j} Begin For i:=1 to n do For j:=1 to n do Begin d[i,j] := a[i,j] p[i,j] := i; End; For k:=1 to n do For i:=1 to n do For j:=1 to n do if d[i,j] > d[j,k] + d[k,j] then Begin d[i, j] := d[i, k] + d[k,j]; p[i,j] := p[k,j]; End; End; III. CÁC VÍ D Ụ ỨNG DỤNG 1. Ứng dụng trong truyền tin Truyền tin trong mạng thường hay gặp sự cố dẫn đến các gói tin có thể bị sai lệch, để phát hiện và sửa chữa các bít sai khôi phục lại gói tin người ta đã tiến hành 1 số cách thức. Có cách thức đó là mã hoá dữ liệu trước khi truyền, nhờ cơ chế mã hoá mà những gói tin sai có thể sửa đúng lại được. Thực hiện điều này, ngườ i ta đã dùng máy hữu hạn trạng thái để mã hoá dữ liệu. Luận văn tốt nghiệp 48 Ta xét 1 ôtômát hữu hạn của máy mã hoá dữ liệu cho những gói tin 4 bít như hình 3.1: Hình 3.1 Giả sử cần mã hoá gói tin nhị phân x = 0100; Thì ta đi như sau: A, A, C, B, A với nhãn đặt trong trong dấu ngoặc ta thu được gói tin x = 0100 với nhãn đặt ngoài dấu ngoặc tướng ứng thì ta thu được bản mã của x là 00 11 01 11, bản mã này dài 8 bít. Để tiện minh hoạ, ôtômát thiết kế như trên là đơn giản dẫn đến chưa đầy đủ, vì giả sử có gói tin là x = 1111, ôtômát sẽ không mã hoá được. Để thực hiện được việc sửa sai gói tin, 1 giải thuật gọi là Viterbi được tiến hành như sau: - Thay vì bản mã là 8 bít ta xây dựng bản mã có độ dài là 12 bít bẳng cách xuất phát từ trạng thái ban đầu A đi một chu trình có độ dài 6. Khi đó lúc giải mã ta chỉ giải mã 8 bít đầu bỏ đi 4 bit cuối. - Từ ôtômát xây dựng đồ thị có hướng biểu diễn tất cả các khả năng mã hoá độ dài 12 của gói tin 4 bit như sau: Hình 3.2 Mỗi cạnh nét đứt biểu thị số 0, cạnh nét liền là số 1, ví dụ với gói tin x = 0100 để mã hoá 12 bit thì đi theo chu trình trong ôtômát là A, A, C, B, A, A, A thì tương ứng đi trong đồ thị là A 0 , A 1 , C 2 , B 3 , A 4 , A 5 , A 6 thì bản mã là 001100110000. Gọi d(a, b) là số bit sai khác nhau giữa 2 chuỗi nhị phân a và b cùng độ dài, nếu x, y, z là những chuỗi bít nhị phân cùng độ dài n, thì thoả các tính chất sau: A B C 00(0) 11 (0) 00(1) 01(0) 11(1) A B C 1 2 3 4 5 6 0 00 11 01 11 00 00 00 00 00 00 11 11 11 11 11 00 01 01 01 01 Luận văn tốt nghiệp 49 i) d(x, y)  0 ii) d(x, y) = 0  x = y iii) d(x, y) + d(y, z)  d(x, z) i) và ii) hiển nhiên bây giờ ta chứng minh iii) Đặt x = x 1 , x 2 , ., x n với x i (i = 1 n) là những bit, x i = 0 hoặc 1 tương tự đặt y = y 1 , y 2 , ., y n và z = z 1 , z 2 , ., z n a) Xét trường hợp n = 1, tức các chuỗi chỉ có 1 bit ta có - Nếu d(x 1 , y 1 ) = 1 và d(y 1 , z 1 ) = 1 thì d(x 1 , z 1 ) = 0 hoặc 1 dẫn đến d(x 1 , y 1 ) + d(y 1 , z 1 ) = 2 luôn lớn d(x 1 , z 1 ) - Nếu d(x 1 , y 1 ) = 1 và d(y 1 , z 1 ) = 0 thì y 1 = z 1 nên d(x 1 , z 1 ) = 1 hoặc d(x 1 , y 1 ) = 0 và d(y 1 , z 1 ) = 1 thì x 1 = y 1 nên d(x 1 , z 1 ) = 1 hoặc d(x 1 , y 1 ) = 0 và d(y 1 , z 1 ) = 0 thì x 1 = y 1 = z 1 nên d(x 1 , z 1 ) = 0 tất cả các trường hợp đều có d(x 1 , y 1 ) + d(y 1 , z 1 ) = d(x 1 , z 1 ) Kết luận d(x i , y i ) + d(y i , z i )  d(x i , z i ) với i = 1 n b) Xét trường hợp n > 1 Ta thấy d(x, y) = d(x 1 , y 1 ) + d(x 2 , y 2 ) + . + d(x n , y n ) d(y, z) = d(y 1 , z 1 ) + d(y 2 , z 2 ) + . + d(y n , z n ) d(x, z) = d(x 1 , z 1 ) + d(x 2 , z 2 ) + . + d(x n , z n ) mà d(x i , y i ) + d(y i , z i )  d(x i , z i ) với i = 1 n ta cắt lát theo chiều dọc suy điều phải chứng minh. Nhận xét rằng ôtômát như hình 3.1 được thiết kế với mục đích chỉ sửa sai với những bản mã có sai sót không quá 2 bit. Giả sử a, b là 2 bản mã 12 bit bất kỳ của ôtômát, ôtômát cũng được thiết kế sao cho d(a, b)  5 (ta có thể kiểm chứng điều này). Giả sử x là bản mã 12 bít do ôtômát tạo ra nhưng khi truyền đi thì bị sai sót không quá 2 bit, cách sửa đúng lại x như sau: Gọi U là tập các chuỗi mã 12 bit ra ôtômát tạo ra khi đó a  U là bản mã gốc của x nếu d(x, a) = min{d(x, b) /b  U} khi đó a là duy nhất, không thể tồn tại mã b sao cho d(a, x) = d(x, b) vì theo trên d(a, b)  5 và d(a, x) + d(x, b)  d(a, b) mà d(a, x)  2 suy ra d(x, b) > 2. Như vậy đường đi từ đỉnh A 0 đến A 6 tương ứng với đoạn mã a trong đồ thị hình 3.2 là đường điđộ dài nhỏ nhất, mà trọng số của mỗi cung là số bit sai khác với từng cặp 2 bit trong x, để rõ hơn ta xét ví dụ: Giả sử nhận được bản tin bị sai không quá 2 bit x = 10 01 00 01 11 10 khi đó ta đánh trọng số cho mỗi cung cho đồ thị như hình 3.3 Luận văn tốt nghiệp 50 Hình 3.3 Cách đánh trọng số mỗi cung như sau, ở cặp 2 bit thứ nhất của x là 10 thì tương ứng với những cung thứ nhất của tất cả đường đi là A 0 A 1 = 00; A 0 C 1 = 11 và có số bit sai khác lần lượt là 1, 1, đây cũng là trọng số của cung tương ứng. Tương tự ở cặp 2 bit thứ hai của x là 01 thì tương ứng những cung thứ hai của tất cả đường đi là A 1 A 2 = 00; A 1 C 2 =11; C 1 B 2 = 01 và có số bít sai khác lần lượt là 1, 1, 0. Tương tự ta tiếp tục đánh trọng số như thế . Nhận thấy đường đi ngắn nhất của đồ thị hình 3.3 là A 0 C 1 B 2 C 3 B 4 A 5 A 6 Vậy đoạn mã tương ứng là 11 01 00 01 11 00, đây cũng là đoạn mã đúng của x và giải mã ta thu được gói tin được truyền là 1010. 2. Ứng dụng trong việc lập lịch thi công của một công trình Ta có thể mở rộng bài toán tìm đường đi ngắn nhất là bài toán tìm đường đi dài nhất. Với bài toán này chỉ có một điểm khác duy nhất là thay vì tìm trọng số nhỏ nhất là tìm trọng số lớn nhất cho các đỉnh. Đồ thị có nhiều ứng dụng trong vấn đề lập lịch, với bài toán toán tìm đường đi dài nhất ta sẽ đề cập tới một ứng dụng của nó về lập lịch đóđồ mạng PERT. Sơ đồ mạng PERT (Project Evaluation and Review Technique) là sự sắp xếp lịch về một dự án công trình, nó được ứng dụng rộng rãi và đem lại nhiều hiệu quả trong việc thi công các công trình. Một công trình thi công được chia làm nhiều công việc, có một số công việc mà việc thực hiện nó chỉ được tiến hành sau khi một số công việc nào đó đã hoàn thành. Sơ đồ PERT được thể hiện bằng 1 đồ thị có hướng và mỗi cung trên đồ thị biểu diễn một công việc. Trên cung có đặt thời gian thực hiện công việc, mỗi đỉnh là bắt đầu hoặc kết thúc của một hay nhiều công việ c. a) Xây dựng sơ đồ PERT Giả sử sơ đồ PERT là một đồ thị có hướng G = <X, U> ta tiến hành xây dựng như sau: Với (i, j)  U là 1 cung biểu diễn 1 công việc thì t ij là thời gian thực hiện công việc đó, t ij là trọng số cho cung (i, j). A B C 1 2 3 4 5 6 0 1 1 0 2 0 1 0 1 2 1 1 2 1 1 0 1 1 0 1 1 Luận văn tốt nghiệp 51 Mỗi một đỉnh là một hình tròn gồm 4 thành phần như hình vẽ sau Trong đó: 1) tđ: là tên đỉnh, mỗi tên đỉnh là một con số và được xác định như sau: - Đánh số 0 cho đỉnh khởi công (Chỉ có cung đi ra) - Sau khi 1 đỉnh được đánh số thì xoá các cung đi ra từ đỉnh đó - Đánh số tiếp theo cho đỉnh chỉ có cung đi ra (nếu có nhiều đỉnh như vậy thì lấy tuỳ ý một đỉnh). - Tiếp tục như vậy cho đến khi hết các đỉnh, đỉnh cuối gọi là đỉnh kết thúc. 2) t s i : là thời gian sớm nhất có thể bắt đầu sự kiện thứ i (tại đỉnh thứ i) Tại đỉnh khởi công t s 0 = 0 tại đỉnh thứ i: t s i = max{t s j + t ji } 3) t m i : là thời gian muộn nhất để bắt đầu sự kiện i mà không ảnh hưởng thời gian rhực hiện cả công trình. Sau khi xác định tất cả các t s i thì các t m i được xác định từ đỉnh kết thúc quay về đỉnh khởi công như sau: tại đỉnh n là đỉnh kết thúc thì t m n = t s n tại đỉnh thứ i t m i = min{t m j - t ij } 4)  i : là thời gian dự trữ sự kiện thứ i  i = t m i = t s i b) Tìm đường găng Đặt  ij = (t m j - t s i ) - t ij là thời gian dự trữ của công việc (i, j) Công việc có  ij = 0 là công việc găng, đường găng là một đường đi từ đỉnh khởi công đến đỉnh kết thúc sao cho nó chỉ đi qua các cung biểu thị công việc găng. Như vậy đường găng cũng là đường đi dài nhất từ đỉnh khởi công đến đỉnh kết thúc, việc tìm đường găng cũng là bài toán tìm đường đi dài nhất với đỉnh gốc là đỉnh khởi công, đỉnh đích là đỉnh kết thúc. Nhận xét: Với việc xây dựng sơ đồ PERT cho một dự án thi công ta thấy những việc có thời gian dự trữ là dương là việc có thể làm chậm mà không ảnh hưởng tới tiến độ, những việc găng là việc không thể kéo dài. Muốn rút ngắn thời gian thực hiện công trình thì phải tập trung cào các việc găng. Sơ đồ PERT thuận tiện cho việc quản lý vì nói chung không phải vẽ lại sơ đồ, nếu có phát sinh việc phụ thì thêm vào các cung mới hoặc điều chỉnh thời gian trên các cung. Trên sơ đồ nay có thể giải quyết 2 loại bài toán tđ t s i t m i Δ i [...]... được thực hiện xong v.v Ta có thể lấy đồ thị ở hình 3.4 để minh hoạ cho ví dụ này IV CHƯƠNG TRÌNH MÔ TẢ THUẬT TOÁN DIJKSTRA TÌM ĐƯỜNG ĐI NGẮN NHẤT Const Max = 7; Var a: Array[1 Max, 1 Max] Of Integer; n,s,t: Integer; d, Truoc : Array[1 Max] Of Integer; MinOk : Array[1 Max] of Boolean; Procedure NhapSoLieu; Var f: Text; Fname: String; i,j: Integer; 53 Luận văn tốt nghiệp Begin Write('Vao ten file du lieu.. .Luận văn tốt nghiệp Bài toán 1: Với đi u kiện nhân vật lực và trang thiết bị hiện có cần bố trí thời gian thực hiện công trình là ngắn nhất Bài toán 2: Với đi u kiện thời gian hoàn thành công trình cho trước cần tính toán việc thuê nhân công và sử dụng trang thiết bị sao cho chi phí xây dựng là nhỏ nhất Ví dụ cho một bảng các công việc như sau: STT... có các cung được tô đậm, như vậy những việc găng là a, e, k, m, r, t * Sơ đồ PERT là 1 dạng đồ thị mà thường được gọi là đồ thị có ưu tiên trước sau ta có thể xét thêm một ví dụ ứng dụng của loại đồ thị này như sau: Giả sử máy tính thi hành một chương trình nào đó, các câu lệnh có thể được xử lý đồng thời Nhưng đi u quan trọng là không được thực hiện một câu lệnh mà đòi hỏi kết quả của câu lệnh khác... Sơ đồ PERT cho lịch các công việc ở bảng trên được biểu diễn như hình 3.4 52 Luận văn tốt nghiệp 1 12 f, 14 12 0 0 0 e, 6 3 18 0 18 38 9 2 l, 18 73 m, 9 t, 12 8 4 29 29 0 s, 14 73 0 r, 23 k, 11 7 9 38 0 d, 9 2 u, 14 q, 16 5 h, 15 59 5 n, 4 0 c, 7 7 54 g, 15 b, 8 p, 8 51 9 a, 12 0 6 42 61 61 0 Hình 3.4 Đường găng là đường có các cung được tô đậm, như vậy những việc găng là a, e, k, m, r, t * Sơ đồ PERT... lệnh này vào các câu lệnh khác có thể mô tả bẳng đồ thị có hướng, khi đó mỗi cạnh là quá trình thực hiện một câu lệnh, mỗi đỉnh là một sự kiện, sự kiện này biểu hiện việc một số các câu lệnh đã thực hiện xong và đã có kết quả Ví dụ giả sử máy tính cần thực hiện một số câu lệnh a, b, c, d, e, l Trong đó các câu lệnh a, b, c được thực thi trước tiên và đồng thời, các lệnh d, l chỉ được thực hiện khi... Begin d[v] := d[u] + a[u,v]; Truoc[v]:= u; {Nho duong di ngan nhat} End; {Tim dinh u co d(s,u) la min} Mind:=MaxInt; For v:=1 to n do If (not MinOk[v]) And (Mind>d[v]) then Begin Mind := d[v]; 54 Luận văn tốt nghiệp u:= v; End; MinOk[u] := True; If Mind = MaxInt then Break; {Tac duong} End; End; Procedure Result; Var i: Integer; Begin Writeln('Duong di ngan nhat tu ',s,' Den ',t); i:=Truoc[t]; If i = . tìm đường đi ngắn nhất trong đồ thị có trọng số và đồ thị không có trọng số. I. ĐƯỜNG ĐI NGẮN NHẤ T TRONG ĐỒ THỊ KHÔNG CÓ TRỌNG SỐ 1. Định nghĩa: Đồ thị. Luận văn tốt nghiệp 42 Chương 4 ĐƯỜNG ĐI NGẮN NHẤT TRONG ĐỒ THỊ Giới thiệu: Trong các ứng dụng thực tế bài toán tìm đường đi ngắn nhất giữa hai

Ngày đăng: 06/11/2013, 05:15

Hình ảnh liên quan

Hình 1.1 - Luận văn tốt nghiệp - Đường đi ngắn nhất trong đồ thị

Hình 1.1.

Xem tại trang 2 của tài liệu.
Hình 3.1 - Luận văn tốt nghiệp - Đường đi ngắn nhất trong đồ thị

Hình 3.1.

Xem tại trang 7 của tài liệu.
Hình 3.3 - Luận văn tốt nghiệp - Đường đi ngắn nhất trong đồ thị

Hình 3.3.

Xem tại trang 9 của tài liệu.
Ví dụ cho một bảng các công việc như sau: STT Công việc Làm sau việc Thờ i gian  - Luận văn tốt nghiệp - Đường đi ngắn nhất trong đồ thị

d.

ụ cho một bảng các công việc như sau: STT Công việc Làm sau việc Thờ i gian Xem tại trang 11 của tài liệu.
Hình 3.4 - Luận văn tốt nghiệp - Đường đi ngắn nhất trong đồ thị

Hình 3.4.

Xem tại trang 12 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan