1. Trang chủ
  2. » Luận Văn - Báo Cáo

Một số bài toán tối ưu trên đồ thị

46 11 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 46
Dung lượng 481,44 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trong quá trìnhthực hiện đề tài “Một số bài toán tối ưu trên đồ thị” em đã tham khảo một số tàiliệu được ghi trong phần "Tài liệu tham khảo".. 294.3 Thuật toán Ford-Fulkerson tìm luồng l

Trang 1

KHOA TOÁN

ĐÀO THỊ HOÀI PHƯƠNG

MỘT SỐ BÀI TOÁN TỐI ƯU TRÊN ĐỒ THỊ

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC

Chuyên ngành: Toán ứng dụng

Hà Nội – Năm 2019

Trang 2

KHOA TOÁN

ĐÀO THỊ HOÀI PHƯƠNG

MỘT SỐ BÀI TOÁN TỐI ƯU TRÊN ĐỒ THỊ

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC

Chuyên ngành: Toán ứng dụng

Người hướng dẫn khoa học

TS TRẦN VĨNH ĐỨC

Hà Nội – Năm 2019

Trang 3

Em xin bày tỏ sự kính trọng và lời cảm ơn tới các thầy cô khoa Toán, Trường Đạihọc Sư phạm Hà Nội 2, các thầy cô trong tổ Ứng dụng cũng như các thầy cô tham giagiảng dạy đã tận tình truyền đạt những tri thức quý báu và tạo điều kiện thuận lợi để

em hoàn thành tốt chương trình học trong suốt 4 năm Đại học và thời gian thực hiệnkhóa luận

Đặc biệt, em xin bày tỏ lòng biết ơn sâu sắc tới TS Trần Vĩnh Đức - Giảng viênTrường Đại học Bách Khoa Hà Nội, người đã trực tiếp hướng dẫn, chỉ bảo tận tìnhgiúp đỡ để em có thể hoàn thành khóa luận này

Do thời gian, năng lực và điều kiện bản thân còn hạn chế nên bản khóa luận khôngthể tránh khỏi những sai sót Vì vậy, em rất mong nhận được những ý kiến góp ý quýbáu của các thầy cô và các bạn

Em xin chân thành cảm ơn

Hà Nội, tháng 05 năm 2019

Sinh viên

Đào Thị Hoài Phương

Trang 4

Em xin cam đoan khóa luận này là kết quả của việc học tập, nghiên cứu độc lậpcủa bản thân dưới sự hướng dẫn của thầy giáo TS Trần Vĩnh Đức Trong quá trìnhthực hiện đề tài “Một số bài toán tối ưu trên đồ thị” em đã tham khảo một số tàiliệu được ghi trong phần "Tài liệu tham khảo" Nếu sai em xin chịu mọi trách nhiệm.

Hà Nội, tháng 05 năm 2019

Sinh Viên

Đào Thị Hoài Phương

Trang 5

LỜI NÓI ĐẦU 1

1.1 Đồ thị có hướng 2

1.2 Đồ thị vô hướng 2

1.3 Đồ thị có trọng số 3

1.4 Đồ thị liên thông 4

1.4.1 Hành trình, đường, chu trình 4

1.4.2 Liên thông 5

1.4.3 Cây 6

1.5 Biểu diễn đồ thị bằng ma trận kề 7

1.6 Biểu diễn đồ thị bằng ma trận liên thuộc 8

1.7 Biểu diễn đồ thị có trọng số bằng các ma trận 9

2 BÀI TOÁN TÌM CÂY BAO TRÙM CÓ TRỌNG LƯỢNG NHỎ NHẤT 11 2.1 Bài toán 11

2.2 Thuật toán Kruskal 11

2.3 Thuật toán Prim 16

3 BÀI TOÁN TÌM ĐƯỜNG CÓ TRỌNG LƯỢNG NHỎ NHẤT 20 3.1 Bài toán 20

3.2 Thuật toán Dijkstra 20

3.3 Thuật toán Ford-Bellman 25

4 BÀI TOÁN TÌM LUỒNG LỚN NHẤT TRONG MẠNG VẬN TẢI 28 4.1 Mạng vận tải Luồng trong mạng vận tải 28

Trang 6

4.2 Bài toán 29

4.3 Thuật toán Ford-Fulkerson tìm luồng lớn nhất trong mạng vận tải nguyên 30 5 MỘT SỐ BÀI TOÁN KHÁC VỀ LUỒNG 35 5.1 Bài toán tìm luồng lớn nhất trong mạng vận tải đỉnh 35

5.1.1 Mạng vận tải đỉnh 35

5.1.2 Luồng trong mạng vận tải đỉnh 35

5.1.3 Lát cắt trong mạng vận tải đỉnh 36

5.1.4 Bài toán 36

5.2 Bài toán tìm luồng lớn nhất trong mạng vận tải đỉnh - cung 37

5.2.1 Mạng vận tải đỉnh - cung 37

5.2.2 Luồng trong mạng vận tải đỉnh - cung 37

5.2.3 Bài toán 37

5.3 Bài toán tìm luồng lớn nhất trong mạng vận tải có nhiều điểm phát và nhiều điểm thu 38

Trang 7

LỜI NÓI ĐẦU

Các bài toán tối ưu trên đồ thị đã được ứng dụng rất nhiều vào các ngành khácnhau của khoa học và kỹ thuật Nhiều bài toán thực tế có thể được giải quyết bằngcách quy chúng về các bài toán tối ưu trên đồ thị Biểu diễn đồ thị cho ta cách nhìntrực quan giữa các quan hệ, ràng buộc của bài toán và từ đó giải quyết các bài toánbằng những công cụ tính toán Đề tài “Một số bài toán tối ưu trên đồ thị” nhằm tìmhiểu một số nội dung như: Bài toán tìm cây bao trùm có trọng lượng nhỏ nhất, Bàitoán tìm đường có trọng lượng nhỏ nhất, Bài toán tìm luồng lớn nhất trong mạng vậntải

Nội dung chính của khóa luận gồm có năm chương:

Chương 1: Chương này trình bày các khái niệm cơ bản của đồ thị và các cáchbiểu diễn đồ thị bằng mà trận

Chương 2: Chương này trình bày bài toán tìm cây bao trùm có trọng lượng nhỏnhất và hướng dẫn sử dụng thuật toán Kruskal và thuật toán P rim để giải bài toán.Chương 3: Nội dung chương này là trình bày bài toán tìm đường có trọng lượngnhỏ nhất và hướng dẫn sử dụng thuật toán Dijkstra và thuật toán F ord − Bellman

để giải bài toán

Chương 4: Chương này trình bày bài toán tìm luồng lớn nhất trong mạng vậntải và hướng dẫn sử dụng thuật toán F ord − F ulkerson để giải bài toán này

Chương 5: Chương này trình bày một số bài toán khác về luồng: tìm luồng lớnnhất trong mạng vận tải đỉnh, tìm luồng lớn nhất trong mạng vận tải đỉnh - cung, tìmluồng lớn nhất trong mạng vận tải có nhiều điểm phát và nhiều điểm thu

Trang 8

MỘT SỐ KHÁI NIỆM CƠ BẢN

CỦA ĐỒ THỊ

Tất cả những đinh nghĩa sẽ dùng trong các chương sau

1.1 Đồ thị có hướng

Định nghĩa 1.1 (Đồ thị có hướng) Một đồ thị có hướng G là một cặp có thứ tự

G = (V, E), trong đó V là một tập và E là một tập con của tích đề các V × V Cácphần tử trong V được gọi là các đỉnh, các phần tử trong E được gọi là các cung trong

đồ thị có hướng G Ví dụ, nếu (a, b) ∈ E thì a, b được gọi là đỉnh còn ab được gọi làcung trong đồ thị có hướng G có đỉnh đầu là a, đỉnh cuối là b và có hướng đi từ a tới b.Giả sử G = (V, E) là một đồ thị có hướng Nếu (a, b) ∈ E thì các đỉnh a, b đượcgọi là liên thuộc với cung (ab) Cung có dạng (a, a) với a ∈ V được gọi là khuyên

Đồ thị có hướng được biểu diễn trên mặt phẳng bằng cách biểu diễn các đỉnh lànhững vòng tròn nhỏ còn các cung được biểu diễn bằng các đường nối đỉnh đầu vớiđỉnh cuối và có mũi tên hướng từ đỉnh đầu tới đỉnh cuối

Ví dụ 1.1 Cho G = (V, E) có V = {v1, v2, v3, v4, v5} và E = {(v1, v2), (v1, v3), (v3, v2),(v2, v3), (v4, v2), (v3, v4), (v3, v5), (v4, v5)} có đồ thị như hình 1.1

1.2 Đồ thị vô hướng

Định nghĩa 1.2 (Đồ thị có hướng) Một đồ thị vô hướng G là một cặp có thứ tự

G = (V, E), trong đó V là một tập và E là một tập với các phần tử là các đa tập lực

Trang 9

Hình 1.1: Ví dụ một đồ thị có hướng

lượng 2 trên V Các phần tử trong V được gọi là các đỉnh, các phần tử trong E đượcgọi là các cạnh trong đồ thị vô hướng G Nếu e = {a, b} ∈ E thì a, b được gọi là đỉnhđầu mút của cạnh e Ta kí hiệu cạnh a, b là ab

Đồ thị vô hướng được biểu diễn trên mặt phẳng tương tự như đồ thị có hướng.Các đỉnh được biểu diễn là những vòng tròn nhỏ còn các cạnh được biểu diễn bằng cácđường nối hai đỉnh của cạnh Đồ thị vô hướng sẽ không có mũi tên chỉ hướng trên cácđường nối như đồ thị có hướng

Ví dụ 1.2 Cho G = (V, E) có V = {v1, v2, v3, v4, v5} và E = {(v1, v2), (v1, v3), (v3, v2),(v2, v3), (v4, v2), (v3, v4), (v3, v5), (v4, v5)} Khi đó, G có đồ thị như hình 1.2

Hình 1.2: Ví dụ một đồ thị vô hướng

1.3 Đồ thị có trọng số

Định nghĩa 1.3 (Đồ thị có trọng số) Một đồ thị G = (V, E) được gọi là đồ thị cótrọng số nếu ít nhất một trong hai hàm f : V −→ WV và g : E −→ WE được xác định.Trong đó, WV, WE là các tập mà các phần tử của chúng là các dữ liệu và mang một ý

Trang 10

nghĩa định lượng nào đấy Giá trị của f (v) với v ∈ V được gọi là trọng lượng đỉnh củađỉnh v Giá trị của g(e) với e ∈ E được gọi là trọng lượng cung của cạnh e Tùy thuộcvào việc những hàm nào được xác định, người ta kí hiệu đồ thị có trọng lượng bằng:

G = (V, E, f ) hoặc G = (V, E, g) hoặc G = (V, E, f, g)

Ví dụ 1.3 Cho G = (V, E, g) có V = {v1, v2, v3, v4, v5}, E = {(v1, v2), (v1, v3), (v2, v3),(v3, v2), (v4, v2), (v3, v4), (v3, v5), (v4, v5)} và hàm g : E −→ N được xác định như sau:g(v1, v2) = 2,

i = 0, 1, , n, ei ∈ E với mọi i = 1, 2, , n và ei = (vi−1, vi) Khi đó, v0 được gọi

là đỉnh đầu, vn được gọi là đỉnh cuối và n là độ dài của hành trình có hướng trên.Tương tự, một hành trình vô hướng trong đồ thị vô hướng G = (V, E) là một dãy

v0e1v1e2 , envn trong đó vi ∈ V với mọi i = 0, 1, , n, ei ∈ E với mọi i = 1, 2, , n và

Trang 11

ei = (vi−1, vi) hoặc ei = (vi, vi−1) Khi đó, v0 được gọi là đỉnh đầu, vn được gọi là đỉnhcuối và n là độ dài của hành trình vô hướng trên.

Một hành trình có hướng (hoặc vô hướng) được gọi là khép kín nếu đỉnh đầu vàđỉnh cuối của chúng trùng nhau

Định nghĩa 1.5 (Đường) Một hành trình có hướng (hoặc vô hướng) được gọi là mộtđường có hướng (hoặc vô hướng) nếu các đỉnh của chúng đều khác nhau

Định nghĩa 1.6 (Chu trình) Một hành trình khép kín được gọi là chu trình nếu nó

có độ dài không nhỏ hớn 3 và khi xóa đi đỉnh cuối thì trở thành đường

Ví dụ 1.4 Cho G = (V, E) có đồ thị như hình 1.4 Khi đó:

1) v1e1v2e2, v3e5v4 là một hành trình có hướng với đỉnh đầu là v1 và đỉnh cuối là v4

2) v1e1v2e4, v4e5v3 là một hành trình vô hướng với đỉnh đầu là v1 và đỉnh cuối là v3

Trang 12

Trong trường hợp đồ thị không liên thông, nó sẽ tạo thành những đồ thị con liênthông đôi một không có đỉnh chung Những đồ thị con liên thông như vậy được gọi lànhững thành phần liên thông.

Ví dụ 1.5 Đồ thị G = (V, E) trong Hình 1.5 là đồ thị không liên thông có 2 thànhphần liên thông là G1 = (V1, E1) và G2 = (V2, E2)

Trang 14

1.6 Biểu diễn đồ thị bằng ma trận liên thuộc

Định nghĩa 1.10 (Ma trận liên thuộc của đồ thị) Giả sử G = (V, E) là một đồthị có hướng với V = {v1, v2, , vn} và E = {e1, e2, , em} Ta luôn xác định được matrận:

1, nếu vi là đỉnh đầu của ej

−1, nếu vi là cuối nhưng không là đỉnh đầu của ej

0, nếu vi không liên thuộc với ejKhi đó, ma trận B được gọi là ma trận liên thuộc của đồ thị G

Ví dụ 1.8 Cho đồ thị G = (V, E) có V = {v1, v2, v3, v4, v5} và E = {e1, e2, e3, e4, e5, e6,

e7} có đồ thị như sau:

Hình 1.8: Đồ thị có hướng của ví dụ 1.8

Trang 15

Ma trận liên thuộc của G là:

Định nghĩa 1.12 (Ma trận trọng lượng đỉnh) Giả sử G = (V, E, f ) là một đồ thị

có hướng với V = {v1, v2, , vn} và f : V −→ WV là hàm trọng lượng đỉnh của G Khi

Trang 17

BÀI TOÁN TÌM CÂY BAO TRÙM

Ví dụ 2.1 Khi xây dựng hệ thống đường bộ qua 63 tỉnh, thành phố trong nước Người

ta tính toán được chi phí cho mỗi cung đường từ 2 thành phố bất kỳ Bài toán đặt ra

là tìm tuyến đường đi qua tất cả các tỉnh, thành phố mà chi phí xây dựng là nhỏ nhất

2.2 Thuật toán Kruskal

Thuật toán: Giả sử G = (V, E, w) là đồ thị có trọng số vô hướng liên thông có hàmtrọng lượng cạnh w : E → R, đồ thị con T = (V0, E0)

Bước 1: Khởi tạo: V0 := V, E0 := ∅ Mỗi thành phần liên thông của đồ thị T khi

Trang 18

khởi tạo chỉ bao gồm một đỉnh, ta kí hiệu tập các thành phần liên thông của T là C.Khi đó, C := {{x}|x ∈ V }

Bước 2: Sắp xếp các cạnh của G theo thứ tự trọng lượng không giảm

Bước 3: Lấy cạnh đầu tiên ra khỏi dãy, kí hiệu là cạnh e = xy và xét:

Nếu hai đỉnh đầu mút x và y của e thuộc hai thành phần liên thông C1, C2 khácnhau của T thì S := S\{e}, E0 := E0∪ {e}, w(T ) := w(T ) + w(e) và ta nhập C1 và C2thành một thành phần liên thông của T Ngược lại, nếu hai đỉnh đầu mút x và y của

e không thuộc hai thành phần liên thông khác nhau của T thì S := S\{e}, E0 := E0

và các thành phần liên thông của T không đổi

Nếu E0 ∪ {e} chứa chu trình thì bỏ qua

Bước 4: Nếu T còn là đồ thị không liên thông (|E0| < |V | − 1) thì ta quay lạibước 3 Ngược lại, nếu T là đồ thị liên thông (|E0| = |V | − 1) thì dừng thuật toán và

đồ thị T khi đó chính là cây bao trùm có trọng lượng nhỏ nhất của đồ thị G

Định lý 2.1 Với mọi đồ thị có trọng số vô hướng liên thông G = (V, E, w) có hàmtrọng lượng cạnh w : E → R, thuật toán Kruskal luôn tìm được một cây bao trùm cótrọng lượng nhỏ nhất của G

Ví dụ 2.2 Cho đồ thị có trọng lượng G = (V, E, w) được biểu diễn như Hình 2.1.Hãy tìm cây bao trùm có trọng lượng nhỏ nhất của G

Trang 19

T := (V0, E0),

C := {{s}, {a}, {b}, {c}, {d}, {e}, {f }, {g}, {h}, {k}, {t}}

Bước 2: Sắp xếp các cạnh của đồ thị G theo thứ tự trọng lượng không giảm

S := {ab, bc, ef, kt, hk, ed, sb, sa, sc, be, bd, ad, bf, f h, dh, gt, eh, cf, gh, dg, f k}

Lần lặp 1Bước 3: Lấy cạnh đầu tiên ab ra khỏi dãy và xét Vì ab có các đỉnh đầu mút a và

b thuộc các thành phần liên thông khác nhau của T nên:

S := S\{ab} = {bc, ef, kt, hk, ed, sb, sa, sc, be, bd, ad, bf, f h, dh, gt, eh, cf, gh, dg, f k},

E0 := E0 ∪ {ab} = {ab},

C := {{s}, {a, b}, {c}, {d}, {e}, {f }, {g}, {h}, {k}, {t}}

Bước 4: T là đồ thị không liên thông, quay lại bước 3

Lần lặp 2Bước 3: Lấy cạnh đầu tiên bc ra khỏi dãy và xét Vì bc có các đỉnh đầu mút b và

c thuộc các thành phần liên thông khác nhau của T nên:

S := S\{bc} = {ef, kt, hk, ed, sb, sa, sc, be, bd, ad, bf, f h, dh, gt, eh, cf, gh, dg, f k},

E0 := E0 ∪ {bc} = {bc},

C := {{s}, {a, b, c}, {d}, {e}, {f }, {g}, {h}, {k}, {t}}

Bước 4: T là đồ thị không liên thông, ta quay lại bước 3

Lần lặp 3Bước 3: Lấy cạnh đầu tiên ef ra khỏi dãy và xét Vì ef có các đỉnh đầu mút e

và f thuộc các thành phần liên thông khác nhau của T nên:

S := S\{ef } = {kt, hk, ed, sb, sa, sc, be, bd, ad, bf, f h, dh, gt, eh, cf, gh, dg, f k},

h thuộc các thành phần liên thông khác nhau của T nên:

Trang 21

0

{ab, bc, ef, kt, hk, ed, sb,

sa, sc, be, bd, ad, bf, f h,

dh, gt, eh, cf, gh, dg, f k}

{{s}, {a}, {b}, {c}, {d},{e}, {f }, {g}, {h}, {k}, {t}}

6 {sb, sa, sc } {ab, bc, ef, kt,

hk, ed}

{{s}, {a, b, c, d, e, f }, {g},{h, k, t}}

7 {sa, sc, be } {ab, bc, ef, kt,

hk, ed, sb}

{{s, a, b, c, d, e, f }, {g},{h, k, t}}

Trang 22

2.3 Thuật toán Prim

Thuật toán: Giả sử G = (V, E, w) là đồ thị có trọng số vô hướng liên thông có hàmtrọng lượng cạnh w : E → R Ta định nghĩa nhãn của đỉnh v là bộ [v, α(v)] với v ∈ V ,a(v) ∈ R

Bước 1: Khởi tạo:

Bước 3: Tìm đỉnh vi sao cho α(vi) đạt giá trị nhỏ nhất

Bước 4: Gán x := vi (nếu tìm được nhiều đỉnh vi thỏa mãn ở bước 3 thì có thểlấy một đỉnh tùy ý trong số những đỉnh vừa tìm được)

Bước 5: Gán E0 := E0∪ {xv}; U := \{x}

Bước 6: Nếu U 6= ∅ thì quay lại Bước 2 Ngược lại, nếu U = ∅ thì dừng thuậttoán và đồ thị T khi đó chính là cây bao trùm có trọng lượng nhỏ nhất của đồ thịG

Định lý 2.2 Với mọi đồ thị có trọng lượng vô hướng liên thông G = (V, E, w) có

w : E → R là hàm trọng lượng cạnh, thuật toán Prim luôn tìm được một cây bao trùm

Trang 23

Lần lặp 1Bước 2: Gán:

a := [s, 3], b := [s, 4], c := [s, 4], d := [s, ∞], e := [s, ∞], f := [s, ∞], g :=[s, ∞], h := [s, ∞], k := [s, ∞], t := [s, ∞]

Bước 3: Với mọi y ∈ U Ta có: minα(y) = min(a) = 3

Bước 4: Gán: x := a

Bước 5: Gán: E0 := E0∪ {as} = {as}; U := \{a} = {b, c, d, e, f, g, h, k, t}

Bước 6: U 6= ∅, ta quay lại Bước 2

Lần lặp 2Bước 2: Gán:

b := [a, 2], c := [s, 4], d := [b, 6], e := [b, ∞], f := [b, ∞], g := [s, ∞], h :=[s, ∞], k := [s, ∞], t := [s, ∞]

Bước 3: Với mọi y ∈ U Ta có: minα(y) = min(b) = 2

Bước 4: Gán: x := b

Bước 5: Gán: E0 := E0∪ {ab} = {bs, ab}; U := \{b} = {c, d, e, f, g, h, k, t}.Bước 6: U 6= ∅, ta quay lại Bước 2

Lần lặp 3Bước 2: Gán:

Lần lặp 4Bước 2: Gán:

Trang 24

Bước 6: U 6= ∅, ta quay lại Bước 2.

Tiếp tục thực hiện thuật toán tới lần lặp cuối cùng:

Lần lặp 10Bước 2: Gán: g := [t, 6]

Bước 3: Với mọi y ∈ U Ta có: minα(y) = min(t) = 6

Các lần lặp của thuật toán Prim được thực hiện trong bảng trên với các hàng

là các lần lặp và các cột là tên các biến chứa nhãn của các đỉnh thuộc V \{s} Nhãncủa đỉnh y ở lần lặp i sẽ được ghi tại giao của hàng i và cột y Từ lần lặp 1, mỗi hàng

sẽ có một ô được có giá trị w(y) nhỏ nhất sẽ được đánh dấu * Các lần lặp sau đónhãn của y sẽ không thể thay đổi được và ta ký hiệu là dấu gạch ngang Khi ta thựchiện tới lần lặp mà chỉ còn một nhãn được đánh dấu và các nhãn khác được đánh dấubằng dấu gạch ngang thì ta dừng thuật toán Cây bao trùm có trọng lượng nhỏ nhất

Trang 25

T = (V0, E0) được xác định như sau: V0 = V và E0 là tập hợp tất cả các cạnh có dạng

xy với x là đỉnh được gán nhãn và y là đỉnh mà tại đó nhãn của x được đánh dấu *

Ngày đăng: 07/04/2021, 07:22

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w