Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
114,5 KB
Nội dung
CHƯƠNG CHU TRÌNH EULER VÀ CHU TRÌNH HAMILTON 1/55 NỘI DUNG Chu trình Euler Điều kiện tồn chu trình Euler Chu trình Hamilton\ Điều kiện tồn chu trình Hamilton 2/55 7.1 CHU TRÌNH EULER Bài toán cầu Định nghĩa chu trình Euler Điều kiện tồn chu trình Euler vô hướng Điều kiện tồn chu trình Euler có hướng Thuật toán tìm chu trình Euler 3/55 BÀI TOÁN CÂY CẦU Sông Pregel cù lao Kneiphof chia thành phố Konigsberg nước CH Litva thành vùng đất cầu nối vùng đất B A D Pregel C 4/55 BÀI TOÁN CÂY CẦU (tiếp) Bài toán: Liệu qua cầu, cầu lần, quay chỗ xuất phát hay không? Bài toán làm say mê cư dân thành phố Họ háo hức thử không thành công 5/55 BÀI TOÁN CÂY CẦU (tiếp) Năm 1736, L.Euler chứng minh toán không giải Từ toán đưa đến khái niệm đường chu trình Euler 6/55 BÀI TOÁN CÂY CẦU (tiếp) Biểu diễn vùng đất đỉnh đa đồ thị vô hướng, hai đỉnh có cạnh nối có cầu nối tương ứng Bài toán đưa việc tìm chu trình đồ thị qua cạnh đồ thị lần b a d c 7/55 ĐƯỜNG VÀ CHU TRÌNH EULER Định nghĩa 7.1 - Đường Euler đa đồ thị đường qua cạnh đồ thị lần - Chu trình Euler đa đồ thị đường qua cạnh đồ thị lần 8/55 VÍ DỤ 7.1 a b e 10 d c Chu trình Euler: E = [1, 2, 3, 4, 5, 8, 9, 10, 6, 7] 9/55 7.2 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER VÔ HƯỚNG Định lý 7.1 Đa đồ thị G có chu trình vô hướng Euler đỉnh có bậc chẵn 10/55 7.2 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER VÔ HƯỚNG (tiếp) Chứng minh định lý: 2) Điều kiện đủ Xuất phát từ đỉnh a bất kỳ, lập dãy cạnh kề liên tiếp hết khả tiếp Khi dừng phải dừng đỉnh a bậc đỉnh chẵn, thu chu trình C1 Nếu C1 vét hết cạnh đồ thị C1 chu trình cần tìm Nếu cạnh C1, cạnh phải kề với đỉnh a1 C1, xuất phát từ a1 tìm chu trình C2 … 12/55 7.2 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER VÔ HƯỚNG (tiếp) Chứng minh định lý: Khi C1, C2,… vét hết cạnh đồ thị, lập chu trình Euler sau: - Từ đỉnh a theo nửa C1 đến a1 - Từ a1 theo nửa C2 đến a2 …… - Khi đến chu trình cuối ngược lại theo nửa chu trình để trở a 13/55 VÍ DỤ 7.2 Tìm chu trình Euler cho đồ thị: C1 = [1, 3, 4, 5, 8, 2] C2 = [2, 3, 5, 6, 7] C3 = [6, 9, 7, 8] C = [ 1, 3, 4, 5, 8, 2, 3, 5, 6, 9, 7, 8, 6, 7, ] 14/55 7.2 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER VÔ HƯỚNG (tiếp) Hệ 7.1: Đa đồ thị G có đường Euler vô hướng số đỉnh bậc lẻ Chứng minh: Điều kiện cần: Nếu có đường Euler vô hướng nối a với b a b đỉnh có bậc lẻ Điều kiện đủ: Nếu a, b đỉnh có bậc lẻ, xây dựng G’ từ G cách thêm cạnh (a,b) G’ đỉnh bậc lẻ có chu trình Euler C Bỏ cạnh (a,b) khỏi chu trình C, thu đường Euler G 15/55 7.3 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER CÓ HƯỚNG Định lý 7.2: Đa đồ thị có hướng liên thông G có chu trình Euler có hướng đỉnh số cạnh vào số cạnh ra: ∀x ∈ V , r-(x) = r+(x) , đó: - r-(x): số cạnh vào đỉnh x - r+(x): số cạnh khỏi đỉnh x 16/55 VÍ DỤ 7.3 a b e 10 d c Chu trình Euler: E = [1, 2, 3, 4, 5, 8, 9, 10, 6, 7] 17/55 7.3 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER CÓ HƯỚNG (tiếp) Hệ 7.2 Đa đồ thị có hướng liên thông G có đường Euler có hướng G có đỉnh a, b thoả mãn: r-(a) = r+(a) - r-(b) = r+(b) + đỉnh khác cân 18/55 7.3 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER CÓ HƯỚNG (tiếp) Chứng minh hệ 1) Điều kiện cần: Giả sử đồ thị G có đường Euler có hướng α qua tất cạnh đồ thị - Với đỉnh xuất phát a α, Trừ cạnh α từ a, cạnh vào a phải có cạnh khỏi a α kết thúc đỉnh khác Do đó: r-(a) = r+(a) - 19/55 7.3 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER CÓ HƯỚNG (tiếp) - Với đỉnh kết thúc b α, Trừ cạnh cuối α tới b, cạnh khỏi b phải có cạnh vào b α kết thúc b Do đó: r-(b) = r+(b) + 20/55 7.3 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER CÓ HƯỚNG (tiếp) 2) Điều kiện đủ: Giả sử G có đỉnh a, b thoả mãn: r-(a) = r+(a) - r-(b) = r+(b) + Thêm vào cạnh (b,a), theo định lý 7.3 ta có chu trình Euler có hướng C Bỏ cạnh (b,a) khỏi C ta đường Euler có hướng 21/55 7.4 THUẬT TOÁN TÌM CHU TRÌNH EULER Thuật toán 7.1 Dữ liệu: Đồ thị liên thông G = (V, E) đỉnh bậc lẻ biểu diễn mảng danh sách kề DK Kết quả: Chu trình vô hưóng Euler với danh sách đỉnh nằm stack CE 22/55 7.4 THUẬT TOÁN TÌM CHU TRÌNH EULER (tiếp) Thuật toán: Begin S := ∅ ; CE := ∅ ; v := đỉnh tuỳ ý đồ thị ; push v onto S ; while S ≠ ∅ begin v := top(S) ; 23/55 7.4 THUẬT TOÁN TÌM CHU TRÌNH EULER (tiếp) 10 11 12 13 14 15 if DK(v) ≠ ∅ then begin u := đỉnh danh sách DK[v] ; push u onto S ; DK[v] := DK[v] \ {u} ; DK[u] := DK[u] \ {v}; { Xoá cạnh (v,u) } v := u end 24/55 7.4 THUẬT TOÁN TÌM CHU TRÌNH EULER (tiếp) 16 else 17 begin 18 v := top(S) ; 19 push v onto CE 20 end 21 end 22 End 25/55 7.4 THUẬT TOÁN TÌM CHU TRÌNH EULER (tiếp) Độ phức tạp: Mỗi lần lặp chu trình (5 - 20): - Hoặc đặt đỉnh lên stack S xoá cạnh, - Hoặc chuyển đỉnh từ stack S sang stack CE Số lần lặp chu trình không vượt số cạnh m Độ phức tạp tổng thể thuật toán O(m) 26/55 [...]... đi Euler vô hướng nối a với b thì a và b là 2 đỉnh duy nhất có bậc lẻ 2 Điều kiện đủ: Nếu a, b là 2 đỉnh duy nhất có bậc lẻ, xây dựng G’ từ G bằng cách thêm cạnh (a,b) G’ không có đỉnh bậc lẻ do đó có chu trình Euler C Bỏ cạnh (a,b) khỏi chu trình C, thu được đường Euler trong G 15/55 7.3 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER CÓ HƯỚNG Định lý 7.2: Đa đồ thị có hướng liên thông G có chu trình Euler. .. một cạnh đi vào b vì α kết thúc ở b Do đó: r-(b) = r+(b) + 1 20/55 7.3 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER CÓ HƯỚNG (tiếp) 2) Điều kiện đủ: Giả sử G có các đỉnh a, b thoả mãn: r-(a) = r+(a) - 1 và r-(b) = r+(b) + 1 Thêm vào cạnh mới (b,a), khi đó theo định lý 7.3 ta có chu trình Euler có hướng C Bỏ cạnh (b,a) khỏi C ta được một đường Euler có hướng 21/55 7.4 THUẬT TOÁN TÌM CHU TRÌNH EULER Thuật... ở đỉnh a vì bậc các đỉnh đều chẵn, thu được chu trình C1 Nếu C1 vét hết các cạnh của đồ thị thì C1 là chu trình cần tìm Nếu còn cạnh ngoài C1, thì cạnh đó phải kề với đỉnh a1 của C1, xuất phát từ a1 tìm chu trình C2 … 12/55 7.2 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER VÔ HƯỚNG (tiếp) Chứng minh định lý: Khi C1, C2,… đã vét hết các cạnh của đồ thị, lập chu trình Euler như sau: - Từ đỉnh a đi theo nửa trên... Khi đã đến chu trình con cuối cùng thì đi ngược lại theo nửa dưới các chu trình để trở về a 13/55 VÍ DỤ 7.2 Tìm chu trình Euler cho đồ thị: 4 3 C1 = [1, 3, 4, 5, 8, 2] 5 1 6 2 C2 = [2, 3, 5, 6, 7] 8 C3 = [6, 9, 7, 8] 7 9 C = [ 1, 3, 4, 5, 8, 2, 3, 5, 6, 9, 7, 8, 6, 7, 2 ] 14/55 7.2 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER VÔ HƯỚNG (tiếp) Hệ quả 7.1: Đa đồ thị G có đường đi Euler vô hướng khi và chỉ khi... cạnh (v,u) } v := u end 24/55 7.4 THUẬT TOÁN TÌM CHU TRÌNH EULER (tiếp) 16 else 17 begin 18 v := top(S) ; 19 push v onto CE 20 end 21 end 22 End 25/55 7.4 THUẬT TOÁN TÌM CHU TRÌNH EULER (tiếp) Độ phức tạp: Mỗi lần lặp của chu trình (5 - 20): - Hoặc là đặt đỉnh lên stack S và xoá cạnh, - Hoặc chuyển đỉnh từ stack S sang stack CE Số lần lặp của chu trình không vượt quá số cạnh m Độ phức tạp tổng thể... khi và chỉ khi tại mỗi đỉnh số cạnh đi vào bằng số cạnh đi ra: ∀x ∈ V , r-(x) = r+(x) , trong đó: - r-(x): số cạnh đi vào đỉnh x - r+(x): số cạnh đi ra khỏi đỉnh x 16/55 VÍ DỤ 7.3 7 a b 1 3 4 2 6 e 10 9 8 d c 5 Chu trình Euler: E = [1, 2, 3, 4, 5, 8, 9, 10, 6, 7] 17/55 7.3 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER CÓ HƯỚNG (tiếp) Hệ quả 7.2 Đa đồ thị có hướng liên thông G có đường Euler có hướng khi và chỉ... bậc lẻ được biểu diễn bởi mảng các danh sách kề DK Kết quả: Chu trình vô hưóng Euler với danh sách các đỉnh nằm trong stack CE 22/55 7.4 THUẬT TOÁN TÌM CHU TRÌNH EULER (tiếp) Thuật toán: 1 Begin 2 S := ∅ ; CE := ∅ ; 3 v := đỉnh tuỳ ý của đồ thị ; 4 push v onto S ; 5 while S ≠ ∅ do 6 begin 7 v := top(S) ; 23/55 7.4 THUẬT TOÁN TÌM CHU TRÌNH EULER (tiếp) 8 9 10 11 12 13 14 15 if DK(v) ≠ ∅ then begin u... 18/55 7.3 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER CÓ HƯỚNG (tiếp) Chứng minh hệ quả 1) Điều kiện cần: Giả sử đồ thị G có đường Euler có hướng α đi qua tất cả các cạnh của đồ thị - Với đỉnh xuất phát a của α, Trừ cạnh đầu tiên của α đi ra từ a, cứ một cạnh đi vào a thì phải có một cạnh đi ra khỏi a vì α kết thúc ở đỉnh khác Do đó: r-(a) = r+(a) - 1 19/55 7.3 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER CÓ HƯỚNG (tiếp) -...7.2 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER VÔ HƯỚNG (tiếp) Chứng minh định lý 1) Điều kiện cần Mỗi lần chu trình đi qua một đỉnh thì đỉnh đó bớt đi 2 cạnh kề Cuối cùng, số cạnh kề của mỗi đỉnh bằng 0 Vì vậy, số cạnh kề của mỗi đỉnh phải là một số chẵn 11/55 7.2 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER VÔ HƯỚNG (tiếp) Chứng minh định lý: 2) Điều kiện đủ Xuất phát ... Chu trình Euler Điều kiện tồn chu trình Euler Chu trình Hamilton Điều kiện tồn chu trình Hamilton 2/55 7.1 CHU TRÌNH EULER Bài toán cầu Định nghĩa chu trình Euler Điều kiện tồn chu. .. có chu trình Euler C Bỏ cạnh (a,b) khỏi chu trình C, thu đường Euler G 15/55 7.3 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH EULER CÓ HƯỚNG Định lý 7.2: Đa đồ thị có hướng liên thông G có chu trình Euler. .. thị, lập chu trình Euler sau: - Từ đỉnh a theo nửa C1 đến a1 - Từ a1 theo nửa C2 đến a2 …… - Khi đến chu trình cuối ngược lại theo nửa chu trình để trở a 13/55 VÍ DỤ 7.2 Tìm chu trình Euler cho