Bài tốn tìm đường đi có trọng số nhỏ nhất

Một phần của tài liệu (LUẬN văn THẠC sĩ) các bài toán cơ bản của lý thuyết tổ hợp 13 (Trang 127 - 132)

4 Bài toán tối ưu

4.2 Bài toán tối ưu trong đồ thị

4.2.4 Bài tốn tìm đường đi có trọng số nhỏ nhất

Giả sử G = (V;E;w) là một đồ thị có trọng số liên thơng, có hướng, khơng có khuyên, ở đây: w : E −→ R+ ∪ 0 = {r ∈ R/r > 0}. Giả sử s;t ∈ V là hai đỉnh đã cho và P là một đường có hướng với đỉnh đầu là s

và đỉnh cuối là t. Ta định nghĩa trọng số của đường P, kí hiệu là w(P) là giá trị:

w(P) = X

e là cung của P

w(e)

Bài tốn tìm đường có trọng lượng nhỏ nhất:

Giả sử G= (V;E;w) là đồ thị có trọng số, liên thơng, có hướng khơng có khuyên với w : E −→ R+ ∪ {0}. Ta cũng giả sử s ∈ V là một đỉnh cho trước và D ⊆ V là một tập đỉnh cho trước. Với mỗi đỉnh d ∈ D, hãy tìm

một đường có hướng P đi từ tập s tới d sao cho trọng lượng w(P) của đường P là nhỏ nhất trong số tất cả trọng lượng của các đường có hướng đi từ s tới d và cho biết trọng lượng w(P) đó bằng bao nhiêu.

Để giải quyết bài toán này, Dijkstra đã đưa ra một thuật toán mà ngày nay ta gọi là thuật toán Dijkstra. Thuật tốn này về ngun tắc và hình thức rất giống với thuật tốn Prim trình bày ở trên.

Thuật tốn Dijkstra: Ta gọi nhãn của đỉnh v ∈ V là bộ [α(v);l(v)] với

α(v) ∈ V còn l(v) ∈ R+ ∪ {0}. Một đỉnh được gọi là có nhãn tạm thời nếu như nhãn của đỉnh đó cịn được xem xét và có thể bị thay đổi ở các bước tiếp theo của thuật tốn. Nếu nhãn của một đỉnh khơng thay đổi ở tất cả các bước tiếp theo của thuật tốn, thì nó được gọi là nhãn cố định của đỉnh đó. Ta sẽ lưu giữ các đỉnh có nhãn tạm thời ở biến U. Ta cũng dùng một biến là L để lưu giữ nhãn cố định của các đỉnh. Nhãn của đỉnh

v sẽ được lưu giữ như là giá trị của biến v.

Bước 1: Khởi tạo và gán giá trị ban đầu cho các biến.

x := s (s là đỉnh đã cho trước trong bài toán)

D0 := D\ {s} (D là tập các đỉnh đã cho trước trong bài toán).

U := V\ {s}

y := [s;∞] cho mọi y ∈ U L := {s := [s; 0]}

Bước 2: Đổ nhãn cho các đỉnh thuộc U. Với mọi đỉnh y ∈ U y = {

Bước 3: Tìm min

y∈U l(y) =l(vi) (**)

Bước 4: x := vi(nếu có một số đỉnh vi ∈ U thỏa mãn (**) thì ta chọn một đỉnh bất kì trong số các đỉnh đó).

Bước 5: Gán giá trị mới cho các biến D0;U và L D0 := D0\ {x}

U := U\ {x}

L := L∪ {x := [α(x);l(x)]}

Bước 6: Nếu D0 6= 0 thì ta quay lại bước 2.

Nếu D0 = ∅ thì ta bắt đầu đi tìm đường có hướng có trọng lượng nhỏ nhất dựa vào tập L các nhãn cố định của các đỉnh của Gnhận được sau lần lặp cuối cùng. Khi đó, với mỗi đỉnh d ∈ D;l(d) là trọng lượng của đường có hướng có trọng số nhỏ nhất từ s tới d và một trong các đường đó là:

d ←α(d) ← α(α(d)) ← · · · ← s

Định lý 4.7. Giả sử G = (V;E;w) là đồ thị có trọng số có hướng liên

thơng khơng có khun, ở đây w : E −→ R+∪ {0}, s ∈ V là một đỉnh cho

trước và d ⊆ là một tập đỉnh cho trước của G. Khi đó với mỗi đỉnh d∈ D

thuật tốn Dijkstra ln tìm được trong G một đường có hướng có trọng

lượng nhỏ nhất đi từ đỉnh s tới đỉnh d và xác định được trọng lượng của đường đi đó.

Ví dụ 4.13. Giả sử G = (V;E;w) là đồ thị có trọng số có hướng được biểu diễn bởi hình dưới. Với mỗi đỉnh thuộc tập D = {d;e;t} hãy tìm một đường có hướng có trọng lượng nhỏ nhất từ đỉnh s tới đỉnh đó và cho biết trọng lượng của mỗi đường tìm được.

Lời giải. Ta sử dụng thuật tốn Di Bước 1: x := s;D0 := {d;e;t};U := {a;b;c;d;e;t};s := [s; 0] y := [s;∞] cho mọi y ∈ U;L := {s := [s; 0]} Lần lặp 1: Bước 2: a := [s; 5] ;b := [s; 31] ;c := [s; 40] ;d := [s;∞] ;e := [s;∞] ;t := [s;∞] Bước 3: min y∈U l(y) = l(va) = 5 Bước 4: x := a

Bước 5: D0 := D0\ {a} = {d;e;t};U := U\ {a} = {b;c;d;e;t};L := L∪ {a := [s; 5]}= {s:= [s; 0] ;a := [s; 5]};

Bước 6: D0 6= ∅. Ta phải quay lại bước 2. Lần lặp 2: Bước 2: b := [s; 31] ;c := [s; 40] ;d := [s; 78] ;e := [s;∞] ;t:= [s;∞] Bước 3: min y∈U l(y) = l(vb) = 31 Bước 4: x := b Bước 5: D0 := D0\ {b} = {d;e;t};U := U\ {b} = {c;d;e;t};L := L∪ b := [s; 31] = {s := [s; 0] ;a := [s; 5] ;a := [s; 31]};

Bước 6: D0 6= ∅. Ta phải quay lại bước 2. Lần lặp 3:

Bước 2: c := [b; 39] ;d := [s; 78] ;e := [b; 56] ;t := [b; 69]

Bước 3: min

Bước 4: x := c

Bước 5: D0 := D0\ {c} = {d;e;t};U := U\ {c} = {d;e;t};L := L ∪ {c := [b; 39]} = s := [s; 0] ;a := [s; 5] ;b := [s; 31] ;c := [s; 39] ;

Bước 6: D0 6= ∅. Ta phải quay lại bước 2. Lần lặp 4

Bước 2: d := [s; 78] ;e:= [b; 55] ;t:= [b; 69]

Bước 3: min

y∈U l(y) = l(ve) = 55

Bước 4: x := e

Bước 5: D0 := D0\ {e} = {d;t};U := U\ {e} = {d;t};L := L ∪ {e:= [c; 55]} = s := [s; 0] ;a := [s; 5] ;b := [s; 31] ;c := [s; 39] ;e:= [c; 55] ;

Bước 6: D0 6= ∅. Ta phải quay lại bước 2. Lần lặp 5 Bước 2: d := [s; 78] ;t:= [b; 69] Bước 3: min y∈U l(y) = l(t) = 67 Bước 4: x := t Bước 5:D0 := D0\ {t} = {d};U := U\ {t} = {d};L := L∪ t := [e; 67] = s := [s; 0] ;a := [s; 5] ;b := [s; 31] ;c := [s; 39] ;e := [c; 55] ;t:= [e; 67] ;

Bước 6: D0 6= ∅. Ta phải quay lại bước 2. Lần lặp 6 Bước 2: d := [s; 77] Bước 3: min y∈U l(y) = l(d) = 77 Bước 4: x := d Bước 5: D0 := D0\ {d} = ∅;U := U\ {d} = ∅;L := L∪ d := [t; 77] = s := [s; 0] ;a := [s; 5] ;b := [s; 31] ;c := [s; 39] ;e := [c; 55] ;t:= [e; 67] ;d:= [t; 77] ;

Bước 6: D0 = ∅. Ta bắt đầu tìm đường có hướng có trọng số nhỏ nhất từ đỉnhS tới mỗi đỉnh thuộc tậpD = {d;e;t}dựa và giá trị nhận được của

biếnLsau lần lặp cuối cùng là:L := s := [s; 0]a := [s; 5] ;c := [b; 39] ;e := [c; 55] ;t := [e; 67] ;d := [t; 77] . Ta nhận đưuọc các đường sau:

d ←t ←e ← c ←b ← s: trọng lượng của đường bằng l(d) = 77 e ←c ← b ←s: trọng lượng của đường bằng l(e) = 55

Kết luận

Trong luận văn này, tác giả đã đặt ra và hồn thành được một số kết quả như sau:

(i) Trình bày được bốn bài tốn cơ bản của lý thuyết tổ hợp;

(ii) Trong mỗi bài toán đều đưa ra được những ứng dụng giải một số bài toán tổ hợp cụ thể;

(iii) Phân dạng có ví dụ và bài tập chi tiết đối với hai bài tốn có ứng dụng trong tốn sơ cấp là bài toán tồn tại và bài toán đếm;

Tài liệu tham khảo

[1] Nguyễn Văn Mậu (2008), Chuyên đề chọn lọc tổ hợp và toán rời rạc,

NXB Giáo Dục.

[2] Nguyễn Văn Mậu (4/2012), Các chuyên đề toán bồi dưỡng học sinh giỏi , Kỷ yếu hội nghị khoa học, Hà Nội.

[3] Hồng Chí Thành (2001), Giáo trình tổ hợp, NXB Đại học Quốc gia

Hà Nội.

[4] Hồng Chí Thành (2011), Lý thuyết đồ thị , NXB Đại học Quốc gia Hà Nội.

[5] Nguyễn Đức Nghĩa(2001), Toán học rời rạc, NXB Đại học Quốc gia

Hà Nội.

[6] Ngô Đắc Tân(2004), Lý thuyết tổ hợp và đồ thị, NXB Đại học Quốc

gia Hà Nội.

[7] Tạp chí tốn học và tuổi trẻ, Tuyển tập 30 năm, NXB Giáo Dục, 1997.

[8] Kenneth H Rosen, Toán học rời rạc ứng dụng trong tin học, NXB khoa

học và kĩ thuật, 1998. [9] Tài liệu từ Internet.

Một phần của tài liệu (LUẬN văn THẠC sĩ) các bài toán cơ bản của lý thuyết tổ hợp 13 (Trang 127 - 132)

Tải bản đầy đủ (PDF)

(132 trang)