CHU TRÌNH EULERBài toán 7 cây cầu Định nghĩa chu trình Euler Điều kiện tồn tại chu trình Euler vô hướng Điều kiện tồn tại chu trình Euler có hướng Thuật toán tìm chu trình Euler...
Trang 1CHƯƠNG 7
CHU TRÌNH EULER VÀ CHU TRÌNH HAMILTON
Trang 37.1 CHU TRÌNH EULER
Bài toán 7 cây cầu
Định nghĩa chu trình Euler
Điều kiện tồn tại chu trình Euler vô hướng
Điều kiện tồn tại chu trình Euler có hướng
Thuật toán tìm chu trình Euler
Trang 4BÀI TOÁN 7 CÂY CẦU
Sông Pregel và cù lao Kneiphof chia thành phố Konigsberg ở nước CH Litva thành 4 vùng đất.
7 cây cầu nối giữa các vùng đất.
Trang 5
BÀI TOÁN 7 CÂY CẦU (tiếp)
Bài toán: Liệu có thể đi qua cả 7 cây cầu, mỗi cầu
đúng một lần, rồi quay về chỗ xuất phát được hay
không?
Bài toán đã làm say mê cư dân của thành phố Họ háo hức đi thử nhưng không thành công
Trang 6BÀI TOÁN 7 CÂY CẦU (tiếp)
Năm 1736, L.Euler đã chứng minh rằng bài toán
không giải được
Từ bài toán này đưa đến các khái niệm về đường và chu trình Euler
Trang 7BÀI TOÁN 7 CÂY CẦU (tiếp)
Biểu diễn mỗi vùng đất bằng một đỉnh của một đa đồ thị vô hướng, hai đỉnh có cạnh nối nếu có cầu nối tương ứng
Bài toán trên đưa về việc tìm một chu trình của đồ thị
đi qua mỗi cạnh của đồ thị đúng một lần
b
Trang 8ĐƯỜNG VÀ CHU TRÌNH EULER
Trang 107.2 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH
EULER VÔ HƯỚNG
Trang 117.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
Trang 127.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 cho đến khi hết khả năng đi tiếp
Khi dừng phải dừng ở đỉnh a vì bậc các đỉnh đều chẵn, thu được chu trình C 1
Nếu C 1 vét hết các cạnh của đồ thị thì C 1 là chutrình cần tìm
Nếu còn cạnh ngoài C 1, thì cạnh đó phải kề với
đỉnh a của C , xuất phát từ a tìm chu trình C …
Trang 137.2 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH
EULER VÔ HƯỚNG (tiếp)
Chứng minh định lý:
Khi C 1 , C 2 ,… đã 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 của C 1 đến a 1
- Từ a 1 đi theo nửa trên của C 2 đến a 2
……
- Khi đã đến chu trình con cuối cùng thì đi ngược
Trang 157.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 số đỉnh bậc lẻ bằng 2
Chứng minh:
1 Điều kiện cần: Nếu có đường đ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
Trang 167.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 khi và chỉ khi tại mỗi đỉnh số cạnh đi vàobằ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.
Trang 187.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ỉ khi trong G có 2 đỉnh a, b thoả
mãn:
r-(a) = r+(a) - 1
r-(b) = r+(b) + 1
còn các đỉnh khác đều cân bằng
Trang 197.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.
Trang 207.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 của α,
Trừ cạnh cuối cùng của α đi tới b, cứ một cạnh đi
ra khỏi b thì phải có một cạnh đi vào b vì α kết
thúc ở b
Do đó: r-(b) = r+(b) + 1.
Trang 217.3 ĐIỀU KIỆN TỒN TẠI CHU TRÌNH
EULER CÓ HƯỚNG (tiếp)
Trang 227.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) không có đỉnh
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
Trang 237.4 THUẬT TOÁN TÌM CHU TRÌNH EULER (tiếp)
Trang 247.4 THUẬT TOÁN TÌM CHU TRÌNH EULER (tiếp)
Trang 257.4 THUẬT TOÁN TÌM CHU TRÌNH EULER (tiếp)
Trang 267.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ể của thuật toán là O(m)