TIẾP TỤC CHƯƠNG 1 CỦA MÔN TOÁN RỜI RẠC MÌNH SẼ GỬI DẾN D CÁC BẠN SLIDE BÀI GIẢNG CHƯƠNG 2.2 MÔN TOÁN RỜI RẠC CỦA TRƯỜNG ĐẠI HỌC MỎ ĐỊA CHẤT MONG RẰNG VỚI CÁC SLIDE NÀY SẼ GIÚP CÁC BẠN DỄ DÀNG CHINH PHỤC ĐƯỢC MÔN TOÁN RỜI RẠC
CHƯƠNG 3: LÝ THUYẾT ĐỒ THỊ GV: Đặng Hữu Nghị Sđt: 0989640319 Email: nghidanghuu@gmail.com NỘI DUNG 3.1 •Các khái niệm lý thuyết đồ thị 3.2 •Biểu diễn đồ thị máy tính 3.3 •Các thuật tốn tìm kiếm đồ thị 3.4 •Đồ thị Euler đồ thị Hamilton 3.5 •Cây khung đồ thị 3.6 •Bài tốn đường ngắn 3.7 •Bài tốn luồng cực đại mạng GIỚI THIỆU Luồng cực đại toán tối ưu đồ thị tìm ứng dụng rộng rãi thực tế lý thuyết tổ hợp Bài toán đề xuất vào đầu năm 1950 gắn liền với tên tuổi nhà toán học Mỹ: Ford (Lester Randolph Ford: 1927 - ) Fulkerson (Delbert Ray Fulkerson: 1924 - 1976) MẠNG (NETWORK) Mạng đồ thị có hướng G = (V, E) : Có đỉnh s khơng có cung vào gọi đỉnh phát (nguồn) đỉnh t cung gọi đỉnh thu (đích) Mỗi cung e G gắn với số không âm c(e) gọi khả thông qua e Ví dụ: Ta quy ước mạng khơng có cung (u, v) ta thêm vào cung (u, v) với khả thông qua c[u, v] LUỒNG TRONG MẠNG Định nghĩa Luồng f mạng G=(V,E) phép gán số f(e) cho cạnh e ( f(e) gọi luồng cạnh e) thoả mãn điều kiện: 1) Hạn chế khả thông qua (Capacity Rule): Với cung e, f (e) c(e) 2) Điều kiện cân luồng (Conservation Rule): Với v s, t f (e ) eE ( v ) f (e) eE ( v ) E(v) E(v) tương ứng tập cung vào khỏi đỉnh v Định nghĩa Giá trị luồng f val ( f ) eE ( s ) (*) f (e) f (e) eE ( t ) (Đẳng thức (*) thu cách cộng tất điều kiện cân luồng.) LUỒNG TRONG MẠNG – Ví dụ Ví dụ: v 1/3 2/6 1/1 3/3 s w 1/1 3/5 u 2/2 t 3/7 2/9 4/5 z Trong số viết bên cạnh: giá trị luồng cạnh số màu đỏ, số cịn lại khả thơng qua Các điều kiện 1) 2) thoả mãn => f luồng mạng Giá trị luồng là: = f(s,v) + f(s,u) + f(s,w) = f(v,t) + f(w,t) + f(z,t) Bài toán luồng cực đại Luồng mạng G gọi luồng cực đại số tất luồng mạng G luồng có giá trị lớn v 2/6 1/1 3/3 s Bài tốn tìm luồng cực đại mạng G gọi toán luồng cực đại 1/3 w 1/1 3/5 3/7 2/9 t 4/5 z 2/2 Luồng với giá trị = + + = + + u v 3/3 4/6 1/1 3/3 s w 1/1 3/5 3/7 2/9 t 4/5 z 2/2 Luồng cực đại có giá trị 10 = + + = + + u VÍ DỤ Xét đồ thị tương ứng hệ thống ống dẫn dầu Trong ống tương ứng với cung, điểm phát tàu chở dầu, điểm thu bể chứa, điểm nối ống nút đồ thị Khả thông qua cung tương ứng tiết diện ống Cần phải tìm luồng dầu lớn bơm từ tàu chở dầu vào bể chứa Luồng mạng Mạng truyền thông mạng điện khí thuỷ lợi tài giao thơng hoá học Đỉnh Cung Luồng cáp nối, cáp quang, voice, video, packets cổng, registers, processors dây dẫn dòng điện joints rods, beams, springs heat, energy hồ chứa, trạm bơm, nguồn nước đường ống dòng nước, chất lỏng nhà băng giao dịch tiền sân bay, ga tàu, giao lộ đường cao tốc, ray, đường bay hàng hoá, phương tiện, hành khách sites bonds energy trạm giao dịch, máy tính, vệ tinh Lát cắt – Đường tăng luồng 10 ĐỒ THỊ TĂNG LUỒNG 28 ĐƯỜNG TĂNG LUỒNG Đường tăng luồng f đường P từ s đến t đồ thị tăng luồng Gf Gọi d trọng số nhỏ trọng số cung đường P Từ luồng f, xây dựng luồng f’ mạng G sau: Nếu (v, w) P cung thuận f’(v, w) = f(v, w) + d Nếu (v, w) P cung nghịch f’(v, w) = f(v, w) – d Từ giá trị luồng tăng thêm đại lượng d: val(f’) = val(f) + d Các mệnh đề tương đương: f luồng cực đại mạng Không tìm đường tăng luồng f val(f) = c(X, X*) với lát cắt (X, X*) 29 THUẬT TOÁN FORD – FULKERSON Bước khởi tạo: Bắt đầu từ luồng mà tất cung (ta gọi luồng luồng không) lặp lại bước lặp sau thu luồng mà khơng cịn đường tăng Bước lặp tăng luồng (Ford – Fulkerson): Tìm đường tăng P luồng có Tăng luồng dọc theo P Khi có luồng cực đại, tìm lát cắt hẹp 30 Thuật tốn Ford-Fulkerson: Để tìm luồng cực đại mạng vận tải G, ta xuất phát từ luồng tuỳ ý ϕ G, nâng luồng lên đầy, sau áp dụng thuật toán Ford-Fulkerson Thuật toán gồm bước: Bước (đánh dấu đỉnh mạng): Lối vào v0 đánh dấu Nếu đỉnh vi đánh dấu ta dùng số +i để đánh dấu cho đỉnh y chưa đánh dấu mà (vi,y)∈E cung chưa bão hoà (ϕ(vi,y)0) 31 Thuật toán Ford-Fulkerson: Bước 3: Nếu với luồng ϕ0 phương pháp ta nâng giá trị luồng lên nữa, nghĩa ta khơng thể đánh dấu đỉnh vn, ta nói q trình nâng luồng kết thúc ϕ0 đạt giá trị cực đại, đồng thời gọi ϕ0 luồng kết thúc 32 Thuật toán Ford-Fulkerson: Nếu với phương pháp ta đánh dấu tới lối G tồn v0 xích α, đỉnh khác đánh dấu theo số đỉnh liền trước (chỉ sai khác dấu) Khi chắn ta nâng giá trị luồng 33 Thuật toán Ford-Fulkerson: Bước (nâng giá trị luồng): Để nâng giá trị luồng ϕ, ta đặt: ϕ’(e) = ϕ(e), e ∉ α ϕ’(e) = ϕ(e) + 1, e ∈ α định hướng theo chiều xích α từ vo đến ϕ’(e) = ϕ(e) − 1, e ∈ α định hướng ngược với chiều xích α từ vo đến ϕ’ thoả mãn điều kiện luồng, nên ϕ’ luồng ta có: ϕ’n= ϕn+1 Như vậy, ta nâng luồng lên đơn vị Sau lặp lại vịng Vì khả thơng qua cung hữu hạn, nên trình phải dừng lại sau số hữu hạn bước 34 Thuật toán Ford – Fulkerson Tăng luồng f dọc theo đường tăng P Augment(f,P) b cf(P) FOR e P DO IF (e E) THEN // cạnh thuận f(e) f(e) + b ELSE // cạnh nghịch f(eR) f(e) – b RETURN f Thuật tốn Ford-Fulkerson Ví dụ Ford_Fulkerson(G,c,s,t); FOR e E DO // Khởi tạo luồng f(e) Gf đồ thị tăng luồng f WHILE (tìm đường tăng luồng P) DO f augment(f, P) Sửa lại Gf RETURN f 35 VÍ DỤ: Cho mạng vận tải hình với khả thơng qua đặt khuyên tròn, luồng ghi cung Tìm luồng cực đại mạng 36 GIẢI: Mạng vận tải G có đỉnh phát v0 đỉnh thu v8 Luồng ϕ có đường (v0,v4), (v4,v6), (v6,v8) gồm cung chưa bão hoà nên chưa đầy Do nâng luồng cung lên đơn vị, để ϕ1 +0 V4 6+1 2+1 +4 V6 11+1 +6 V0 V8 37 GIẢI: Do đường xuất phát từ v0 đến v8 chứa cung bão hồ, nên luồng ϕ1 luồng đầy Song chưa phải luồng cực đại 38 Áp dụng TT Ford-Fulkerson để nâng luồng ϕ1 Xét xích α=(v0, v4, v6, v3, v7, v8) Quá trình đánh dấu từ v0 đến v8 để nâng luồng ϕ1 lên đơn vị cách biến đổi luồng cung thuộc xích α đánh dấu 39 GIẢI: Sau ta có luồng ϕ2 Luồng ϕ2 chưa phải cực đại nên ta tiếp tục nâng luồng 40 Tương tự, xét xích β=(v0, v1, v5, v2, v6, v3, v7, v8) 41 Nâng luồng ϕ2 lên đơn vị, sau ta có luồng ϕ3 Tiếp theo ta đánh dấu đỉnh v0 nên trình nâng luồng kết thúc ta giá trị luồng cực đại là: ϕ3 = 6+12+8 = 26 42 ... 3/ 3 s Bài tốn tìm luồng cực đại mạng G gọi toán luồng cực đại 1 /3 w 1/1 3/ 5 3/ 7 2/9 t 4/5 z 2/2 Luồng với giá trị = + + = + + u v 3/ 3 4/6 1/1 3/ 3 s w 1/1 3/ 5 3/ 7 2/9 t 4/5 z 2/2 Luồng cực đại. .. luồng mạng Giá trị luồng là: = f(s,v) + f(s,u) + f(s,w) = f(v,t) + f(w,t) + f(z,t) Bài toán luồng cực đại Luồng mạng G gọi luồng cực đại số tất luồng mạng G luồng có giá trị lớn v 2/6 1/1 3/ 3... thu cách cộng tất điều kiện cân luồng. ) LUỒNG TRONG MẠNG – Ví dụ Ví dụ: v 1 /3 2/6 1/1 3/ 3 s w 1/1 3/ 5 u 2/2 t 3/ 7 2/9 4/5 z Trong số viết bên cạnh: giá trị luồng cạnh số màu đỏ, số lại khả