Tài liệu Bài giảng Lý thuyết đồ thị - Chương 2: 29/09/2014
1
1
Bài giảng
LÝ THUYẾT ĐỒ THỊ
(GRAPH THEORY)
TRẦN QUỐC VIỆT
2
Chương 2
ĐƯỜNG ĐI VÀ CHU TRÌNH EULER
ĐƯỜNG ĐI VÀ CHU TRÌNH HAMILTON
3
Nhà toán học Thụy sĩ
Ví dụ :Bài toán về các cây cầu ở
Konigsberg (Nga)
4
- Tìm cách đi qua cả bảy cây cầu, sau đó về điểm xuất phát, mỗi cây
cầu chỉ đi qua một lần ? Nhiều người đã đi thử nhưng không thành
công
- Năm 1736, L. Euler, đã dùng lý thuyết đồ thị, chứng minh được: Bài
toán không thể có lời giải
29/09/2014
2
Ví dụ :Bài toán về các cây cầu ở
Konigsberg (tt)
Gọi 1, 2, 3 và 4 là 4 vùng đất bị ngăn cách bởi các
nhánh sông
Biểu diễn mỗi vùng đất bởi một đỉnh của đồ thị
Một cạnh: một cây cầu nối giữa 2 vùng đất
1
3 4
2
Ví dụ :Bài toán về các cây cầu ở
Konigsberg (tt)
Bài toán trở thành: Tìm một chu trình đơn đi qua tất cả
các cạnh của đồ thị Chu trình Euler?
1
3 4
2
7
Đường đi Euler và chu trình Euler
Cho G là một đồ thị liên thông, một chu trình Euler (Eu...
10 trang |
Chia sẻ: honghanh66 | Lượt xem: 742 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Bài giảng Lý thuyết đồ thị - Chương 2, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
29/09/2014
1
1
Bài giảng
LÝ THUYẾT ĐỒ THỊ
(GRAPH THEORY)
TRẦN QUỐC VIỆT
2
Chương 2
ĐƯỜNG ĐI VÀ CHU TRÌNH EULER
ĐƯỜNG ĐI VÀ CHU TRÌNH HAMILTON
3
Nhà toán học Thụy sĩ
Ví dụ :Bài toán về các cây cầu ở
Konigsberg (Nga)
4
- Tìm cách đi qua cả bảy cây cầu, sau đó về điểm xuất phát, mỗi cây
cầu chỉ đi qua một lần ? Nhiều người đã đi thử nhưng không thành
công
- Năm 1736, L. Euler, đã dùng lý thuyết đồ thị, chứng minh được: Bài
toán không thể có lời giải
29/09/2014
2
Ví dụ :Bài toán về các cây cầu ở
Konigsberg (tt)
Gọi 1, 2, 3 và 4 là 4 vùng đất bị ngăn cách bởi các
nhánh sông
Biểu diễn mỗi vùng đất bởi một đỉnh của đồ thị
Một cạnh: một cây cầu nối giữa 2 vùng đất
1
3 4
2
Ví dụ :Bài toán về các cây cầu ở
Konigsberg (tt)
Bài toán trở thành: Tìm một chu trình đơn đi qua tất cả
các cạnh của đồ thị Chu trình Euler?
1
3 4
2
7
Đường đi Euler và chu trình Euler
Cho G là một đồ thị liên thông, một chu trình Euler (Eulerian circuit)
của G là một chu trình đi đơn đi qua tất cả các cạnh (cung) của G
Ví dụ 1
2
3
4
5
1,2,5,3,4,5,1: là một chu trình
Euler:
8
Đường đi Euler và chu trình Euler
Cho G là một đồ thị liên thông, một đường đi Euler (Eulerian path)
của G là đường đi đơn đi qua tất cả các cạnh (cung) của G
Ví dụ
1
2
3
4
5
2,1,5,2,3,4,5: là một đường đi Euler
29/09/2014
3
Định lý Euler 1
Định lý Euler 1:
Đồ thị vô hướng G=(V,E) liên thông và |V|>1, G có chu trình
Euler mọi đỉnh của G đều có bậc chẵn
Ví dụ: Đồ thị nào sau đây có chu trình Euler, không có chu trình
Uuler
a b
c
d
e
3
3
5
1
2
b c
d
g
a
f
e
4
G1 G2 G3
Định lý Euler 1
01100
10111
11020
01201
01010
A
a
b
c
d
e f
g
h
G4 G5 (cho bởi ma trận kề)
Bài toán về các cây cầu ở Konigsberg
(trong ví dụ trước)
Có lời giải cho bài toán các chiếc cầu?
11
1
3 4
2
12
Chứng minh Định lý Euler 1
C/m đ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ề
- Kết thúc chu trình Euler, số cạnh kề của mỗi đỉnh phải
bằng 0
Vậy: Tổng số cạnh kề của mỗi đỉnh phải là số chẵn. Hay
mọi đỉnh trong G đều có bậc chẵn
G vô hướng liên thông có chu trình Euler mọi
đỉnh của G có bậc chẵn
29/09/2014
4
13
Chứng minh Định lý Euler 1
C/m điều kiện đủ:
- Xuất phát từ đỉnh a bất kỳ, đi theo các cạnh một cách
ngẫu nhiên không lặp lại cạnh nào đã qua, cho đến
khi không thể đi tiếp. Gọi đỉnh dừng là b
- Nếu b ≠ a thì số lần đến b = số lần đi khỏi b+1 (vô lý,
vì mọi đỉnh có bậc chẵn)
- Vậy b ≡ a, nghĩa là ta có chu trình C1
G vô hướng liên thông, mọi đỉnh có bậc chẵn
G có chu trình Euler
14
Chứng minh Định lý Euler 1
C/m điều kiện đủ (tt):
- Nếu C1 chứa tất cả các cạnh của G thì C1 chính là chu
trình Euler cần tìm.
- Ngược lại:
+ Mở rộng C1: chọn một đỉnh a1 trong C1 có cạnh liên
thuộc không nằm trong C1 làm đỉnh bắt đầu của chu
trình mới, tương tự như tìm chu trình C1, ta tìm chu
trình C2 với đỉnh bắt đầu a1 có chứa C1.
+`Mở rộng C2: Tương tự ta được chu trình C3 chứa C2
..
Dừng khi nhận được Ck không thể mở rộng thêm:
15
Chứng minh Định lý Euler 1
C/m điều kiện đủ (tt):
- Xét một cạnh e=(x,y) bất kỳ
- Do G liên thông nên phải có một đường đi từ một
đỉnh a (trên Ck) đến x: av1v2.vmx
- Mọi đỉnh trên Ck đều không thể dùng để mở rộng chu
trình, do vậy: (a,v1)Ck, (v1,v2) Ck,, (vm,x) Ck,
và (x,y) Ck
- Kết luận: Ck chứa tất cả các cạnh của G hay Ck là một chu
trình Euler cần tìm
16
Định lý Euler 2
Đồ thị vô hướng liên thông G=(V,E) và có |V|>1, G có đường đi
Euler và không có chu trình Euler G có đúng 2 đỉnh bậc lẻ
Ví dụ: Đồ thi nào sau đây có chu trình Euler, đồ thi nào có đường
đi Euler nhưng không có chu trình Euler, đồ thị nào không có chu
trình Euler và cũng không có đường đi Euler
1
2
6
3
4
5
1 6
2
3
45
G1 G2
3
3
5
1
2
4
G3
a
b
c
d
e f
g
h
G4
29/09/2014
5
Chứng minh định lý Euler 2
17 18
Định lý Euler 3
Định lý Euler 3:
Đồ thị có hướng G=(V,E) liên thông yếu và |V|>1. G có chu trình
Euler mọi đỉnh trong G đều có nữa bậc trong bằng nữa bậc
ngoài (hay G cân bằng)
G1:
cân bằng nên Có chu trình Euler
G2:
Không cân bằng nên
Không Có chu trình Euler
1 2
34 2
1 3
4
19
Định lý Euler 4
Định lý Euler 4:
Cho G=(V,E) có hướng, không có đỉnh cô lập. Và |V|>1. G có
đường đi Euler nhưng không có chu trình Euler G liên thông
yếu và có đúng 2 đỉnh x,y thoả:
deg+(x)=deg-(x)+1
deg- (y)=deg+(y)+1
Các đỉnh còn lại cân bằng
Ví dụ: Đồ thị nào có chu trình Euler, đồ thị nào chỉ có đường đi Euler
G1 G2 G3
20
Ví dụ:
G1
1 2
3 4
5
6
7
8
e1
e3
e2
e4
e5
e6
e7
e8
G2
G3
-Đồ thị nào có chu trình Euler, đồ thị
nào có đường đi Euler
-Tìm đường đi Euler, chu trình Euler
(nếu có) trong mỗi đồ thị
1
29/09/2014
6
21
1
2
3
4
5
6
Tìm đường đi và chu trình Euler (nếu có) trong các đồ thị trên?
G H
Bài tập
Bài tập
Tìm chu trình Euler trên đồ thị được cho bởi ma trận
kề
22
Thuật toán tìm chu trình Euler
1. Chọn đỉnh v bất kỳ làm đỉnh bắt đầu
2. C {v};
3. Nếu còn cạnh của G chưa đặt vào C
(a) Đặt G’=(VG’,EG’) có được từ G sau khi xóa các cạnh có
trong C và xóa các đỉnh cô lập.
(b) Chọn một đỉnh a {tập đỉnh có trong C} VG’
(c) Từ a, chọn một dãy các cạnh, đỉnh kề liên tiếp trong G’
(không có canh lặp lai), cho đến khi không chọn được nữa, ta
được chu trình C1
(d) Thay thế vị trí a trong C bởi C1, lặp lại bước 3
end
4. Return C;
23
Bài tập thực hành
Cài đặt thuật toán kiểm tra một đồ thị (vô hướng hoặc có
hướng) có là Euler (hoặc nữa Euler) hay không
Cài đặt thuật toán tìm đường đi và chu trình Euler trong
đồ thị vô hướng (có hướng)
24
29/09/2014
7
25
2. Đường đi và chu trình Hamilton
Cho G liên thông, đường đi (tương tự chu trình) Hamilton
trong G là đường đi (tương tự chu trình) đi qua tất các đỉnh
của G, mỗi đỉnh chỉ qua đúng một lần
Một đồ thị có chu trình Hamilton được gọi là thị Hamilton.
Một đồ thị có đường đi Hamilton được gọi là nữa Hamilton.
Ví dụ:
G
1 2
5
6
3
4
Một đường đi Hamilton trong G
1 2
5
6
3
4
2. Đường đi và chu trình Hamilton (tt)
26
H
4
1 2
3
5
Một chu trình Hamilton trong H
4
1 2
3
5
Quy tắc tìm chu hình Hamilton
Nếu tồn tại 1 đỉnh của G có bậc ≤1 thì G không có chu
trình Hamilton
Nếu đỉnh x có bậc 2 thì cả 2 cạnh tới x đều phải thuộc
chu trình Hamilton
Chu trình Hamilton không chứa bất kỳ chu trình con
thực sự nào
Trong quá trình xây dựng chu trình Hamilton, sau khi
đã lấy 2 cạnh tới đỉnh x đặt vào chu trình Hamilton rồi
thì phải xóa mọi cạnh còn lại tới x
27
Ví dụ:
28
1 2 3
4
567
8
9
1
2
3
4
5
6
7
8
9
10
11
-Đồ thị nào có chu trình Hamilton, đồ thị nào không có chu trình
Hamilton?
-Tìm một chu trình Hamilton (nếu có) trên mỗi đồ thị
G
H
29/09/2014
8
29
2. Đường đi và chu trình Hamilton (tt)
Định lý: Mọi đồ thị đủ đều có chu trình Hamilton
K5
Là một chu trình Hamilton của K5
1
2 3
45
12 5 4 3 1
1
2 3
45
30
2. Đường đi và chu trình Hamilton (tt)
Định lý: Cho đồ thị G, giả sử có k đỉnh sao cho khi xoá
k đỉnh này cùng với các cạnh liên kết với chúng thì ta
được nhiều hơn k thành phần liên thông. Thì G không
có chu trình Hamilton
H
4
1 2
3
5
6
7
3
1
5
6
7
Xóa 2 đỉnh 2 và 4 cùng với các
cạnh liên kết của nó thu được 3
thành phần liên thông H không
có chu trình HamiltonH có chu trình Hamilton không?
9
8
9
8
2. Đường đi và chu trình Hamilton (tt)
Cho đồ thị G như hình dưới. G có chu trình Hamilton
không?
31
1
2
3
4
5
67
8
910
Giải:
Nếu xóa đi 3 đỉnh 3,4 và 6 ta được
4 thành phần liên thông. Vậy G không
là Hamilton 1
2
5
7
8
910
32
2. Đường đi và chu trình Hamilton (tt)
Định lý (Dirac): Cho G là đơn đồ thị có n đỉnh (n≥3). Nếu
mọi đỉnh của G đều có bậc ≥ n/2 thì G có chu trình
Hamilton
Định lý: Mọi đồ thị có hướng, có n đỉnh, liên thông mạnh.
Nếu mỗi đỉnh v thuộc đồ thị thỏa:
deg-(v)≥n/2 và deg+(v)≥n/2
Thì G có chu trình hamilton
4
1 2
3
5
Ví dụ:
n=5 (>3)
deg(1)=4 (≥5/2)
deg(2)=4 (≥5/2)
Deg(3)=4 (≥5/2)
Deg(4)=3 (≥5/2)
Deg(5)=3 (≥5/2)
Vậy G có chu trình Hamilton
29/09/2014
9
2. Đường đi và chu trình Hamilton (tt)
Bao đóng của đồ thị:
Cho đơn đồ thị G có n đỉnh, bao đóng c(G) được tạo ra
từ G bằng cách bổ sung cho mỗi cặp đỉnh không kề
nhau u và v với deg(v) + deg(u) ≥ n một cạnh mới uv.
Ví dụ: Cho G, tìm bao đóng của G
33
2. Đường đi và chu trình Hamilton (tt)
Định lý: Một đồ thị là Hamilton nếu và chỉ nếu bao
đóng của nó là Hamilton.
Ví dụ: Cho đồ thị
34
G có phải là hamilton không?
35
2. Đường đi và chu trình Hamilton (tt)
Định lý:
Mọi đồ thị đấu loại đều có đường đi Hamilton
Mọi đồ thị đấu loại liên thông mạnh đề có chu trình
Hamilton
Đồ thị đấu loại: Là đồ thị có hướng có đỉnh bất kỳ
luôn luôn được nối với nhau bởi đúng một cung
36
2. Đường đi và chu trình Hamilton (tt)
Định lý (Ore, 1960): Một đơn đồ thị vô hướng G gồm
n đỉnh với n≥3. Nếu deg(u)+deg(v)≥n với mọi cặp đỉnh
u,v không kề nhau trong G thì G là đồ thị Hamilton
Ví dụ:
G
Mọi cặp đỉnh khác nhau u, v trong G đều thỏa:
deg(u)+deg(v)≥n=6
Nên G có chu trình Hamilton
29/09/2014
10
Thuật toán tìm tất cả các chu trình Hamilton của G
(Thuật toán quay lui)
Expand(i)
{ for (j=0; j<n;j++)
if (visited[j]==false && a[x[i]-1][j]>0)
{ if (i<n-1)
{
visited [j]=true;
Expand(i+1);
visited[j]=false;
}
else
if (a[x[i]][0]>0)
printHamiltonCycle(x);
}
}
37
FindHamiltonCycles(int[][] A)
// A là ma trận kề của G
// G có n đỉnh
// hc[0..n-1] chứa chu trình
tìm được
//visited[0n-1] đánh dấu
các đỉnh đã xét
int[] hc= new int[n];
visited = new boolean[n];
for (j=0; j<a.length;j++)
visited[j]=false
x[0]=0;visited[0]=true;
Expand(1);
}
Các file đính kèm theo tài liệu này:
- ltdt_chuong02_1084.pdf