Số hóa bởi Trung tâm Học liệu
i
ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
LUẬN VĂN THẠC SỸ KHOA HỌC MÁY TÍNH
Nguyễn Tam Hùng
CÁC THUẬT TOÁN VỀ ĐƢỜNG ĐI VÀ
CHU TRÌNH EULER VÀ ỨNG DỤNG
Ngành: Công nghệ thông tin
Chuyên ngành: Khoa học máy tính
Mã số: 60.48.01
Người hướng dẫn khoa học: PGS TSKH Nguyễn Xuân Huy
Thái Nguyên, năm 2014
Số hóa bởi Trung tâm Học liệu
i
LỜI CẢM ƠN
Tôi xin gửi lời cảm ơn tới Trường ĐH CNTT&TT – ĐHTN, nơi các thầy
cô đã tận tình truyền đạt các kiến thức quý báu cho tôi trong suốt quá trình học
tập. Xin cảm ơn Ban chủ nhiệm khoa và các cán bộ đã tạo điều kiện tốt nhất cho
chúng tôi học tập và hoàn thành đề tài tốt nghiệp của mình.
Đặc biệt, tôi xin gửi tới PGS TSKH Nguyễn Xuân Huy, thầy đã tận tình chỉ
bảo tôi trong suốt quá trình thực hiện đề tài lời cảm ơn và biết ơn sâu sắc nhất.
Bên cạnh những kiến thức khoa học, thầy đã giúp tôi nhận ra những bài học về
phong cách học tập, làm việc và những kinh nghiệm sống quý báu.
Tôi xin bày tỏ lòng biết ơn tới gia đình, bạn bè, đồng nghiệp và những người
thân đã động viên khích lệ tinh thần và giúp đỡ để tôi hoàn thành luận luận này.
Thái Nguyên, ngày 15 tháng 5 năm 2014
Học viên thực hiện
Nguyễn Tam Hùng
Số hóa bởi Trung tâm Học liệu
ii
LỜI CAM ĐOAN
Học viên xin cam đoan, toàn bộ nội dung liên quan tới đề tài được trình bày
trong luận văn là bản thân học viên tự tìm hiểu và nghiên cứu, dưới sự hướng
dẫn khoa học của Thầy giáo PGS TSKH Nguyễn Xuân Huy.
Các tài liệu, số liệu tham khảo được trích dẫn đầy đủ nguồn gốc. Học viên
xin chịu trách nhiệm trước pháp luật lời cam đoan của mình.
Thái Nguyên, ngày 15 tháng 5 năm 2014
Học viên thực hiện
Nguyễn Tam Hùng
Số hóa bởi Trung tâm Học liệu
iii
MỤC LỤC
LỜI CẢM ƠN I
LỜI CAM ĐOAN II
MỤC LỤC III
DANH MỤC CÁC BẢNG IV
DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ VI
LỜI MỞ ĐẦU 1
CHƢƠNG 1 3
ĐẠI CƢƠNG VỀ ĐỒ THỊ 3
1.1 Đồ thị vô hướng 3
1.2 Bậc của đồ thị 4
1.3 Đường đi, chu trình, tính liên thông 8
1.4 Biểu diễn đồ thị vô hướng 11
CHƢƠNG 2 15
CÁC THUẬT TOÁN VÀ TỔ CHỨC DỮ LIỆU 15
2.1 Chu trình, đường đi Euler 15
2.2 Các thuật toán tìm chu trình Euler 18
2.3 Tổ chức dữ liệu cho thuật toán 31
CHƢƠNG 3 35
ỨNG DỤNG ĐỒ THỊ EULER 35
3.1 Bài toán về những cây cầu ở Königsberg 35
3.2. Bài toán về các quân Domino 36
Số hóa bởi Trung tâm Học liệu
iv
3.3 Bài toán "Thanh tra giao thông" 38
KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 46
TÀI LIỆU THAM KHẢO 47
PHỤ LỤC 48
Số hóa bởi Trung tâm Học liệu
v
DANH MỤC CÁC BẢNG
Trang
Bảng 1.1 Ma trận kề của đồ thị G hình 1.7 12
Bảng 1.2 Ma trận liên thuộc của đồ thị G hình 1.7 14
Bảng 1.3 Danh sách cạnh của đồ thị G hình 1.7 14
Bảng 2.1 Các bước thực hiện thuật toán Hierholzer để tìm chu trình Euler 29
Bảng 2.2 Các bước thực hiện thuật toán Hierholzer để tìm đường đi Euler 30
Bảng 3.1 Kết quả của đồ thị Domino 38
Bảng 3.2 Số cạnh nối thêm giữa các cặp đỉnh bậc lẻ 42
Bảng 3.3 Cách chọn cặp đỉnh bậc lẻ và số cạnh nối thêm 43
Bảng 3.4 Chu trình Euler tìm được với đồ thị G
T
45
Số hóa bởi Trung tâm Học liệu
vi
DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ
Trang
Hình 1.1 Đồ thị vô hướng với 7 đỉnh và 8 cạnh 4
Hình 1.2 Đồ thị đầy đủ với 5 đỉnh 5
Hình 1.3 Đồ thị có vectơ bậc [3, 3, 2, 2] 6
Hình 1.4 Đồ thị có vectơ bậc [5, 4, 4, 3, 3, 3, 2] 8
Hình 1.5 Đồ thị vô hướng liên thông 9
Hình 1.6 Đồ thị vô hướng G với 7 đỉnh 8 cạnh 10
Hình 1.7 Đồ thị vô hướng G với 5 đỉnh 8 cạnh 12
Hình 2.1 Đồ thị G với 6 đinh 8 cạnh 15
Hình 2.2 Đồ thị vô hướng G với 6 đỉnh bậc chẵn 19
Hình 2.3 Đồ thị G sau khi xóa cạnh (1,2) 20
Hình 2.4 Đồ thị G sau khi xóa cạnh (1,2), (2,3) 21
Hình 2.5 Đồ thị G sau khi xóa cạnh (1,2), (2,3), (3,4) 22
Hình 2.6 Đồ thị G sau khi xóa cạnh (1,2), (2,3), (3,4), (4, 5) và đỉnh 4 23
Hình 2.7 Đồ thị G sau khi xóa cạnh (1,2), (2,3), (3,4), (4,5), (5,6) và đỉnh 4 23
Hình 2.8 Đồ thị G sau khi xóa cạnh (1,2), (2,3), (3,4), (4,5), (5,6),(6,2) và đỉnh 4 24
Hình 2.9 Đồ thị G sau khi xóa cạnh (1,2), (2,3), (3,4), (4,5), (5,6),(6,2),(2,5) và xóa
đỉnh 4, 2 25
Số hóa bởi Trung tâm Học liệu
vii
Hình 2.10 Đồ thị G sau khi xóa cạnh (1,2), (2,3), (3,4), (4,5), (5,6),(6,2),(2,5),(5,3) và
xóa đỉnh 4, 2, 5 26
Hình 2 11 Đồ thị G sau khi xóa cạnh (1,2), (2,3), (3,4), (4,5), (5,6),(6,2),(2,5),(5,3),
(3,6) và xóa đỉnh 4, 2, 5, 3 26
Đồ thị G : Đồ thị gồm 6 đỉnh bậc chẵn V={1, 2, 3, 4, 5, 6} ; tập cạnh E={a, b, c, d, e, f,
g, h, i, j} 28
Hình 2.13 Đồ thị vô hướng G liên thông có 2 đỉnh bậc lẻ 30
Hình 3.1 Bảy cây cầu bên bờ sông của thành phố Königsberg 35
Hình 3.2 Đồ thị biểu diễn bảy cây cầu ở hình 3.1 36
Hình 3.3 Đồ thị Domino 37
Hình 3.4 Bản đồ khu vực thanh tra 39
Hình 3.5 Đồ thị biểu diễn bản đồ ở hình 3.4 40
Hình 3.6 Đồ thị G
T
có được khi thêm cạnh (các nét đứt là các cạnh nối thêm) 44
Số hóa bởi Trung tâm Học liệu
1
LỜI MỞ ĐẦU
Những vấn đề cơ bản của lý thuyết đồ thị được đề xuất từ thế kỷ XVIII,
bắt đầu từ bài báo của Euler công bố năm 1736 liên quan đến lời giải bài toán nổi
tiếng về các cây cầu ở Königsberg. Tại thành phố Königsberg nước Đức có sông
Pregel bao quanh 2 đảo lớn. Hai đảo này được nối với các vùng đất thành phố
bởi 7 cây cầu. Cư dân thành phố đặt ra bài toán: có thể xuất phát tại một điểm và
đi qua 7 cây cầu, mỗi cây cầu chỉ được đi qua đúng một lần, và trở về điểm xuất
phát được không? Và nhà toán học L.Euler đã trả lời trọn vẹn cho bài toán này.
Người ta lấy tên cho bài toán trên là tên của nhà toán học Euler. Tuy nhiên, cho
tới nay mối quan tâm đến lý thuyết đồ thị không hề suy giảm. Lý do của sự quan
tâm ấy chính là sự vận dụng rộng rãi của đồ thị trong rất nhiều lĩnh vực khác
nhau. Chẳng hạn, đồ thị có thể xác định các mạch vòng trong vấn đề giải tích
mạch điện. Chúng ta có thể phân biệt các hợp chất hóa học hữu cơ khác nhau với
cùng công thức phân tử nhưng khác nhau về cấu trúc phân tử nhờ đồ thị. Chúng
ta có thể xác định xem hai máy tính trong mạng có thể trao đổi thông tin được
với nhau hay không nhờ mô hình đồ thị mạng máy tính. Đồ thị có trọng số trên
các cạnh có thể sử dụng để giải các bài toán như: Tìm đường đi ngắn nhất giữa
hai thành phố trong một mạng giao thông. Chúng ta cũng còn sử dụng đồ thị để
giải các bài toán về lập lịch, thời khóa biểu, và phân bố tần số cho các trạm phát
thanh truyền hình
Hiện nay, một vài tài liệu viết về nội dung này được đưa vào giảng dạy như
Toán rời rạc ứng dụng trong tin học (bản dịch) của tác giả Kenneth H.Rosen [1]
hay Toán rời rạc của Nguyễn Đức Nghĩa, Nguyễn Tô Thành [2]. Trong cuốn
Số hóa bởi Trung tâm Học liệu
2
giải thuật và lập trình [4] của Lê Minh Hoàng đã trình bày lại thuật toán fleury
để tìm chu trình Euler.
Tuy nhiên, đối với những bài toán trong thực tế, lượng dữ liệu vào cũng như
dữ liệu ra là tương đối lớn. Một số bài toán có số lượng các đỉnh đến hàng nghìn,
tương ứng với nó là số lượng kết quả đưa ra có thể lên đến hàng trăm nghìn, ví
dụ như bài toán kiểm thử tốc độ tính toán của các thuật toán dùng trong các bộ
tìm kiếm trên mạng. Với một đồ thị như trên, lượng đỉnh và cạnh của đồ thị là
lớn cho nên ta cần có được cách tổ chức dữ liệu cho hợp lý cho bài toán là một
vấn đề cần đặt ra.
Luận văn tìm hiểu các thuật toán về chu trình Euler và cách tổ chức dữ liệu
cho bài toán, từ đó đưa ra thuật toán tối ưu nhất cho dạng bài qua nghiên cứu
sáng tạo trong thuật toán và lập trình [3] và dưới sự hướng dẫn của GS.TSKH
Nguyễn Xuân Huy với tên đề tài:
"Các thuật toán về đƣờng đi và chu trình Euler và ứng dụng"
Nội dung luận văn được trình bày thành ba chương:
Chương 1 giới thiệu đại cương về đồ thị, các định nghĩa cơ bản về đồ thị như
đồ thị có hướng, đường đi, chu trình của đồ thị
Chương 2 tìm hiểu về đồ thị Euler, điều kiện cần và đủ, các thuật toán về
đường đi Euler như thuật toán Fluery, thuật toán Hierholzer và cách tổ chức lại
dữ liệu sao cho thuật toán tối ưu.
Chương 3 áp dụng thuật toán tìm đường đi và chu trình Euler trong một số
bài toán điển hình và bài toán Thanh tra giao thông.
Số hóa bởi Trung tâm Học liệu
3
CHƢƠNG 1
ĐẠI CƢƠNG VỀ ĐỒ THỊ
Lý thuyết đồ thị đã được khoa học phát triển từ rất lâu nhưng lại có nhiều
ứng dụng hiện đại. Đặc biệt trong khoảng vài mươi năm trở lại đây, cùng với sự
ra đời của máy tính điện tử và sự phát triển nhanh chóng của tin học, lý thuyết đồ
thị càng được quan tâm đến nhiều hơn. Ví dụ như trong kiến trúc máy tính, tổ
chức và tìm kiếm dữ liệu trên mạng …
Trong chương 1 sẽ trình bày những khái niệm tổng quan cơ bản về lý thuyết
đồ thị như: định nghĩa một đồ thị, bậc của đồ thị, tính liên thông, đường đi, chu
trình của đồ thị …
1.1 Đồ thị vô hướng
Định nghĩa 1.1
Đồ thị vô hướng: G = (V, E) gồm một tập V các đỉnh và tập E các cạnh [2]
Mỗi cạnh e E được liên kết với một cặp đỉnh v, w ( không kể thứ tự) như hình
sau
Số hóa bởi Trung tâm Học liệu
4
Hình 1.1 Đồ thị vô hướng với 7 đỉnh và 8 cạnh
Hình 1.1 là một đồ vô hướng bao gồm:
- Tập đỉnh V = {1; 2; 3; 4; 5; 6;7}
- Tập cạnh E = {(1, 1); (1, 2); (2, 3); (3, 4); (4; 5); (4; 6); (1, 5)}
1.2 Bậc của đồ thị
Cho đồ thị G = (V, E)
Định nghĩa 1.2
Bậc của đỉnh v V là tổng số cạnh liên thuộc với nó và ký hiệu là d(v). Nếu đỉnh
có khuyên thì mỗi khuyên được tính là 2 khi tính bậc, như vậy
d(v) = số cạnh liên thuộc + 2* Số khuyên
Từ định nghĩa suy ra đỉnh cô lập trong đồ thị đơn là đỉnh có bậc bằng 0
Số bậc lớn nhất của G ký hiệu là ∆(G), số bậc nhỏ nhất của G ký hiệu là δ(G)
Đỉnh treo là đỉnh có bậc bằng 1
Định nghĩa 1.3
6
4
5
1
2
3
7
Số hóa bởi Trung tâm Học liệu
5
Cho G = (V, E) là đồ thị có hướng, v V, nửa bậc ra của đỉnh v, ký hiệu là d
0
(v) là
số cung đi ra từ đỉnh v (v là đỉnh đầu) và nửa bậc vào của đỉnh v V, ký hiệu là d
i
(v) là
số cung đi tới đỉnh v ( v là đỉnh cuối)
Ví dụ1.2.1:
Xét đồ thị ở Hình 1.1
d(1) = 4; d(2) = d(4) = d(5) = 3; d(3) = 2; d(6) = 1; d(7) = 0;
Đỉnh 1 có 1 khuyên liên thuộc
Đỉnh 7 là đỉnh cô lập
Đỉnh 6 là đỉnh treo
Định nghĩa 1.4
Đồ thị đầy đủ K
n
là đồ thị đơn, đủ n đỉnh ( mỗi cặp đỉnh đều có duy nhất 1 cạnh liên
kết)
Ví dụ 1.2.2
Hình 1.2 Đồ thị đầy đủ với 5 đỉnh
Trong Hình 1.2 đồ thị K là một đồ thị đầy đủ có tất cả 5 đỉnh, mỗi cặp đỉnh đều có
duy nhất 1 cạnh liên kết.
Mệnh đề 1.1 Mọi đỉnh của đồ thị K
n
có bậc n – 1 và K
n
có n(n – 1) / 2 cạnh
1
2
3
4
5
Số hóa bởi Trung tâm Học liệu
6
Định nghĩa 1.5
Cho đồ thị G. Vectơ bậc d(V) của đồ thị G là dãy các bậc của tất cả các đỉnh của G
sắp xếp giảm dần.
Vectơ v gồm các số tự nhiên gọi là Vectơ đồ thị. Nếu tồn tại đơn thì đồ thị có vectơ bậc
là v.
Ghi chú: Từ bổ đề bắt tay suy ra trong vectơ đồ thị số thành phần lẻ là số chẵn.
Ví dụ 1.2.3
Vectơ [3, 3, 2, 2] là Vectơ đồ thị vì nó là vectơ bậc của đồ thị sau
Hình 1.3 Đồ thị có vectơ bậc [3, 3, 2, 2]
Ngược lại [3, 3, 3, 1] không phải là vectơ đồ thị vì nếu tồn tại đồ thị G(4 đỉnh ) có
vectơ bậc là [3, 3, 3, 1] thì sau khi loại đỉnh bậc 1 và cạnh liên thuộc nó ta nhận được
đồ thị 3 đỉnh không đơn vì có đỉnh bậc 3, suy ra G cũng không đơn.
Định lý 1.6 (Hakimi-Havel)
Cho v = [d
1
, d
2
, , d
n
], n 2, là Vectơ n số tự nhiên thỏa mãn
n – 1 d
1
d
2
d
n
0
Cho v’ là vectơ nhận được từ v bằng cách bỏ thành phần d
1
và trừ bớt 1 trong d
1
thành phần tiếp theo. Ký hiệu v
1
là vectơ v’ trong đó các thành phần được sắp xếp giảm
dần. Khi đó v là vectơ đồ thị khi và chỉ khi v
1
là vectơ đồ thị.
1
2
3
4
Số hóa bởi Trung tâm Học liệu
7
Sử dụng định lý Hakimi- Havel ta có thể đưa ra thuật toán kiểm tra xem 1 vectơ có
phải là vectơ đồ thị không như sau
Thuật toán 1.1 Kiểm tra vectơ đồ thị
* Đầu vào: vectơ v= [d
1
, d
2
, , d
n
] gồm n số nguyên giảm dần
* Đầu ra: kết luận v là vectơ đồ thị hay v không là vectơ đồ thị
* Các bước:
Bước 0( khởi tạo): Đặt k: = n và u: = v = [d
1
, d
2
, , d
n
]
Bước 1: Nếu u có thành phần lơn hơn ( k – 1) hoặc nhỏ hơn 0, thì sang bước 4.
Bước 2: Nếu các thành phần của u đều là số 0 thì sang bước 5
Bước 3( Bước lặp): Cho u’ là vectơ nhận được từ u bằng cách bỏ thành phần d
1
và
trừ bớt 1 trong d
1
thành phần tiếp theo. Ký hiệu, u
1
là vec tơ u’ trong đó các thành phần
được sắp xếp giảm dần. Đặt k: = n - 1 và u : = u
1
. Quay lại bước 1
Bước 4: kết luận: v không phải là vec tơ đồ thị. Kết thúc
Bước 5: kết luận: v là vec tơ đồ thị. Kết thúc
Ví dụ 1.2.4: Kiểm tra vectơ v =[5, 4, 4, 3, 3, 3, 2]
Bước 0: Đặt k:= 7, u = [5, 4, 4, 3, 3, 3, 2]
Bước lặp 1: k:= 7, u = [5, 4, 4, 3, 3, 3, 2], u’= [3, 3, 2, 2, 2, 2], u
1
= [3, 3, 2, 2, 2, 2]
Bước lặp 2: k:= 6, u = [3, 3, 2, 2, 2, 2], u’= [2, 1, 1, 2, 2], u
1
= [2, 2, 2, 1, 1]
Bước lặp 3: k:= 5, u = [2, 2, 2, 1, 1], u’= [1, 1, 1, 1], u
1
= [1, 1, 1, 1]
Bước lặp 4: k:= 4, u = [1, 1, 1, 1], u’= [0, 1, 1], u
1
= [1, 1, 0]
Bước lặp 5: k:= 3, u = [1, 1, 0], u’= [0, 0], u
1
= [0, 0]
Kết luận v là vectơ đồ thị. Đồ thị sau có vectơ bậc là v = [5, 4, 4, 3, 3, 3, 2]
Số hóa bởi Trung tâm Học liệu
8
Hình 1.4 Đồ thị có vectơ bậc [5, 4, 4, 3, 3, 3, 2]
1.3 Đường đi, chu trình, tính liên thông
Định nghĩa 1.7
Cho đồ thị G = (V, E).
Dây từ đỉnh v đến đỉnh w là dãy các đỉnh và cạnh nối tiếp nhau bắt đầu từ đỉnh v
và kết thúc tại đỉnh w. Số cạnh trên dãy gọi là độ dài của dãy .
Dây từ đỉnh v đến đỉnh n được biểu diễn như sau
= (v, e
1
, v
1
, e
2
, v
2
, …, v
n-1
, e
n
, w)
trong đó v
i
(i = 1, …, n-1) là các đỉnh trên dãy và e
i
(i = 1,…,n) là các cạnh trên dãy
liên thuộc đỉnh kề trước và sau nó. Các đỉnh và cạnh trên dãy có thể lặp lại.
Đường đi từ đỉnh v đến đỉnh w là dãy từ đỉnh v đến đỉnh w, trong đó có các cạnh
không lặp lại.
Đường đi sơ cấp là đường đi không đi qua một đỉnh quá 1 lần.
Chu trình là đường đi có đỉnh đầu và đỉnh cuối trùng nhau.
Chu trình sơ cấp là chu trình không đi qua một đỉnh quá 1 lần.
5
4
7
2
6
1
3
Số hóa bởi Trung tâm Học liệu
9
Đồ thị vô hướng gọi là liên thông, nếu mọi cặp đỉnh của nó đều có đường đi nối
chúng với nhau.
Thí dụ 1.3.1
Hình 1.5 Đồ thị vô hướng liên thông
Trong Hình 1.5 đồ thị G là đồ thị liên thông có:
Đường đi từ đỉnh 1 đến đỉnh 4 là (1, 5) – (5, 4) hoặc (1, 2) – (2, 3) – (3, 4)
Chu trình: 1 – 2 – 3 – 4 – 5 – 2 – 1
Chu trình sơ cấp: 1 – 2 – 3 – 4 – 5 – 1
Định lý 1.8
i) Trong đồ thị vô hướng mỗi dãy từ đỉnh v đến w chứa đường đi sơ cấp từ v đến
w.
ii) Trong đồ thị có hướng mỗi dãy có hướng từ đỉnh v đến w chứa đương đi có
hướng sơ cấp từ v đến w.
Định lý 1.9 Đồ thị G lưỡng phân khi và chỉ khi G không chứa chu trình độ dài lẻ
Định nghĩa 1.10
Cho đồ thị G = (V, E). Đồ thị G’ = (V’, E’) gọi là đồ thị con của G nếu
V’ V E’ E
Nếu V’ = V thì G’ gọi là đồ thì con phủ của G.
6
4
5
1
2
3
Số hóa bởi Trung tâm Học liệu
10
Nếu F E, thì ký hiệu G-F là đồ thị con (V, E-F) của G gồm tập đỉnh V và tập
cạnh (cung) E-F.
Nếu U V, thì ký hiệu G-U là đồ thị con của G thu được từ G sau khi loại bỏ các
đỉnh trong U và các cạnh liên thuộc chúng.
Cho U V. Đồ thị con của G sinh bởi U, ký hiệu <U>, là đồ thị (U, E
U
) với
E
U
= {e E / e liên thuộc đỉnh trong U}
Đồ thị con G’ = (V’, E’) của đồ thị (có hướng) G = (V, E) gọi là thành phần liên
thông (mạnh) của đồ thị G, nếu nó là đồ thị con liên thông (mạnh) tối đại của G, tức là
không tồn tại đồ thị con liên thông (mạnh) G’’ = (V’’, E’’) G’ của G thỏa V’ V’’,
E’ E’’.
Ví dụ1.3.2. Xét đồ thị G = (V, E) .
Hình 1.6 Đồ thị vô hướng G với 7 đỉnh 8 cạnh
Đồ thị G
1
= (V
1
, E
1
), với V
1
= {1, 2, 5, 7} và E
1
= {(1, 1); (1, 2); (1, 5); (2, 5)} là đồ
thị con của đồ thị G nhưng không phải thành phần liên thông.
Đồ thị G
2
= {V-{7}, E} là thành phần liên thông của G.
Đồ thị G
3
= {7} là thành phần liên thông của G
G có 2 thành phần liên thông
6
4
5
1
2
3
7
Số hóa bởi Trung tâm Học liệu
11
Ghi chú: Đồ thị là liên thông khi và chỉ khi số thành phần liên thông của nó bằng 1
Định lý 1.11 Cho đồ thị đơn G = (V, E) với n đỉnh, và k thành phần liên thông. Khi đó
số cạnh m của đồ thị thỏa bất đẳng thức
n – k m
2
)1)(( knkn
Hệ quả 1.2 Mọi đơn đồ thị n đỉnh với số cạnh lớn hơn
2
)2)(1( nn
là liên thông.
Định nghĩa 1.12
Cho đồ thị G = (V, E) liên thông.
Tập cạnh F E gọi là tập hợp tách cạnh của đồ thị liên thông G, nếu G-F không
liên thông. Hơn nữa, nếu F là tập hợp tách cạnh cực tiểu(tức không tồn tại F’ F, F’
F, F’ là tập tách cạnh), thì F gọi là tập cắt cạnh. Nếu tập cắt cạnh chỉ có 1 cạnh, thì
cạnh đó gọi là cầu.
Đại lượng
(G) = min{card(F) / F là tập tách cạnh của G}
gọi là số liên thông cạnh của G.
Đồ thị G gọi là k cạnh liên thông, nếu mọi tập tách cạnh có ít nhất k cạnh.
Ghi chú. Từ định nghĩa ta có
(G) k k, G là k cạnh liên thông
Và (G) = max{k / G là k cạnh liên thông}
1.4 Biểu diễn đồ thị vô hướng
1.4.1 Ma trận kề
Định nghĩa 1.13: Cho đồ thị vô hướng G = (V , E) có n đỉnh theo thứ tự v
1
, v
2
, …,
v
n
. Ma trận kề của đồ thị G là ma trận vuông A = (a
ij
)
nxn
, trong đó a
ij
là cạnh nối v
i
với
v
j
. Lưu ý rằng mỗi khuyên được tính là hai cạnh.[2]
Từ định nghĩa suy ra rằng ma trận kề của đồ thị vô hướng luôn luôn đối xứng qua
đường chéo chính.
Ví dụ 1.4.1.1 Đồ thị
Số hóa bởi Trung tâm Học liệu
12
Hình 1.7 Đồ thị vô hướng G với 5 đỉnh 8 cạnh
có ma trận kề là
Mệnh đề 1.2. Cho đồ thị G = (V, E) với ma trận kề (a
ij
). Khi đó
d(v
i
) =
n
j 1
a
ij
+a
ii
=
n
j 1
a
ji
+a
ii
v
i,j
V
Định lý 1.14
Cho đồ thị đơn G = (V, E) có n đỉnh, V = {v
1
, v
2
, …, v
n
} và có ma trận kề của đồ thị
G là ma trận A = (a
ij
)
nxn
. Giả sử A
k
= (c
ij
)
nxn
, k 1. Khi đó c
ij
, i j, là số các dãy có
1
2
3
4
5
1
0
1
1
0
1
2
1
0
0
1
0
3
1
0
0
1
1
4
0
1
1
0
1
5
1
0
1
1
0
Bảng 1.1Ma trận kề của
đồ thị G hình 1.7
1
2
5
3
4
Số hóa bởi Trung tâm Học liệu
13
chiều dài k từ đỉnh v
i
đến đỉnh v
j
. Đặc biệt phần tử trên ô [i, j] , 1 i n, của A
2
là bậc
của đỉnh v
i
.
Hệ quả 1.3
Cho đồ thị G = (V, E) có n đỉnh, V = {v
1
, v
2
, …, v
n
} và ma trận kề của đồ thị
G là ma trận A = (a
ij
)
nxn
. Ký hiệu
T = A + A
2
+ …+ A
n-1
.
Khi đó đồ thị G liên thông khi và chỉ khi các phần tử ngoài đường chéo
chính của ma trận T đều lớn hơn 0.
+ Chú ý. Nếu đồ thị có 2 thành phần liên thông thì ta có thể đánh số lại các đỉnh và ma
trận kề có dạng
2
1
0
0
A
A
Nếu đồ thị là lưỡng phân thì ta có thể đánh số lại các đỉnh và ma trận kề có
dạng
0
0
T
A
A
1.4.2 Ma trận liên thuộc
Một cách thường dùng nữa để biểu diễn đồ thị là dùng ma trận liên thuộc. Giả sử
G = (V, E) là một đồ thị vô hướng với các đỉnh v
1
, v
2
, … v
n
và các cạnh là e
1
, e
2
, … e
m
.
[2]
Khi đó ma trận liên thuộc M = [m
ij
] kích thước n x m trong đó:
m
ij
= 0 nếu cạnh e
j
không nối với đỉnh v
i
m
ij
= 1 nếu cạnh e
j
nối với đỉnh v
i
Thí dụ 1.4.2.1
Giả sử e
1
={1, 2}; e
2
={1, 3}; e
3
={1, 5}; e
4
={2, 4}; e
5
={2, 4}; e
6
={3, 5}; e
7
={3, 5};
Số hóa bởi Trung tâm Học liệu
14
Khi đó ma trận liên thuộc tương ứng sẽ là:
e
1
e
2
e
3
e
4
e
5
e
6
e
7
1
1
1
1
0
0
0
0
2
1
0
0
1
0
0
0
3
0
1
0
0
1
1
0
4
0
0
0
1
1
0
1
5
0
0
1
0
0
1
1
Bảng 1.2 Ma trận liên thuộc của đồ
thị G hình 1.7
1.4.3 Danh sách kề
Biểu diễn đồ thị bởi danh sách kề là liệt kê tất cả các đỉnh liền kề với mỗi đỉnh của
đồ thị. [2]
Thí dụ 1.4.3.1
Biểu diễn đồ thị bằng danh sách cạnh như sau:
Đỉnh
Đỉnh liền kề
1
2, 3, 5
2
1, 4
3
1, 4, 5
4
2, 3, 5
5
1, 3, 4
Bảng 1.3 Danh sách cạnh của đồ thị G hình 1.7
Số hóa bởi Trung tâm Học liệu
15
CHƢƠNG 2
CÁC THUẬT TOÁN VÀ TỔ CHỨC DỮ LIỆU
2.1 Chu trình, đường đi Euler
2.1.1 Định nghĩa
Cho đồ thị G = (V, E).
Chu trình Euler là chu trình qua mọi cạnh và mọi đỉnh của đồ thị, mỗi cạnh không
quá 1 lần.
Đường đi Euler là đường đi qua mọi cạnh và mọi đỉnh của đồ thị, mỗi cạnh không
quá 1 lần.
Cho đồ thị có hướng G = (V, E).
Đồ thị chứa chu trình Euler gọi là Đồ thị Euler.
Thí dụ 2.1.1 Đồ thị
Hình 2.1 Đồ thị G với 6 đinh 8 cạnh
Có chu trình Euler là: (1, 2, 3, 4, 2, 5, 6, 3, 1).
1
2
3
6
5
5
5
4
Số hóa bởi Trung tâm Học liệu
16
2.1.2 Điều kiện cần và đủ.
Định lý 2.1 (Định lý Euler)
Đồ thị G có chu trình Euler khi và chỉ khi G liên thông và mọi đỉnh có bậc chẵn.
Chứng minh :
(i) : Giả sử G có chu trình Euler và v là một đỉnh bất kì của G. Khi đó chu trình
Euler đến v theo cạnh e thì ra khỏi v bằng cạnh e’ e. Do đó bậc của G phải là số chẵn.
G hiển nhiên liên thông.
(ii) : Giả sử G liên thông và mọi đỉnh có bậc chẵn khác 0. Ta chứng minh G có chu
trình Euler quy nạp theo số cạnh m của G.
+) m = 1 : Vì G liên thông và mọi đỉnh có bậc chẵn nên G chỉ có 1 đỉnh và 1
khuyên. Khuyên đó cũng tạo thành chu trình Euler.
+) Giả sử G có m cạnh, số đỉnh n > 0 và mọi đồ thị liên thông có số cạnh nhỏ hơn
m với mọi đỉnh có bậc chẵn đều có chu trình Euler.
- Trường hợp n = 1 hoặc n = 2 thì hiển nhiên tồn tại chu trình Euler.
- Trường hợp n > 2. Vì bậc của các đỉnh chẵn
2
, bao giờ cũng chọn được 3 đỉnh
a, b, c với các cạnh x=(a, b) ; y=(a, c) .
Giả sử G chứa cạnh z = (b, c).
Xét đồ thị G’ thu được từ G bằng cách loại bỏ ba cạnh x, y, z. Sẽ xảy ra một trong 3
khả năng sau :
*/ G’ liên thông, vì số cạnh của G’ nhỏ hơn m và các đỉnh của G vẫn có bậc chẵn
nên theo giả thiết quy nạp tồn tại chu trình Euler C’ của G’. Nối chu trình con (x, y, z)
với C’ ta thu được chu trình Euler C của G.
*/ G’ có 2 thành phần liên thông G
1
và G
2
. Không mất tính tổng quát giả sử G
1
chứa a, G
2
chứa b và c. G
1
có chu trình Euler C
1
, G
2
có chu trình Euler C
2
. Ta xây dựng
chu trình Euler của G như sau:
Số hóa bởi Trung tâm Học liệu
17
Xuất phát từ đỉnh a ta đi theo chu trình C
1
, quay về a sau đó ta đi theo cạnh x=(a,
b) đến đỉnh b, rồi từ b đi theo chu trình C
2
quay về b, sau đó đi theo cạnh z = (b, c),
y=(c, a) quay về a.
*/ G’ có 3 thành phần liên thông G
1
, G
2
và G
3
. Không mất tính tổng quát giả sử G
1
chứa a, G
2
chứa b và G
3
chứa c. G
1
có chu trình Euler C
1
, G
2
có chu trình Euler C
2
và
G
3
có chu trình Euler C
3
. Ta xây dựng chu trình Euler C của G như sau :
Xuất phát từ đỉnh a ta đi theo chu trình C
1
, quay về a sau đó ta đi theo cạnh x=(a, b)
đến đỉnh b, rồi từ b đi theo chu trình C
2
quay về b, sau đó đi theo cạnh z = (b, c) đến
đỉnh c, rồi từ c đi theo chu trình C
3
quay về c sau đó đi theo cạnh y=(c, a) quay về a.
Giả sử G không chứa cạnh z = (b, c).
Xét đồ thị G’ thu được từ G bằng cách loại bỏ hai cạnh x, y và thêm cạnh z, sẽ xảy
ra một trong hai khả năng sau :
*/ G’ liên thông, vì số cạnh của G’ nhỏ hơn m và các đỉnh vẫn có bậc chẵn nên
theo giả thiết quy nạp tồn tại chu trình Euler C’ của G’. Thay cạnh
'zC
bằng cạnh x
và y ta thu được chu trình Euler C của G.
*/ G’ có 2 thành phần liên thông G
1
và G
2
. Không mất tính tổng quát giả sử G
1
chứa a, G
2
chứa b và c. G
1
có chu trình Euler C
1
, G
2
có chu trình Euler C
2
. Ta xây dựng
chu trình Euler của G như sau:
Thay cạnh z
2
C
bằng các cạnh x và y ta có chu trình C
2
’. Nối C
2
’ với C
1
ta thu
được chu trình Euler C của G.
Định lý 2.2
Cho đồ thị G có k đỉnh bậc lẻ. Khi đó số đường đi tối thiểu phủ G là
/2k
Chứng minh :
Ta đã biết số đỉnh bậc lẻ là chẵn, k = 2n, chứng minh quy nạp theo n ta có :
*/ n = 1 : Đồ thị có 2 đỉnh bậc lẻ nối với nhau bằng cạnh z ta thu được đồ thị G’ thỏa
mãn định lí Euler. Như vậy G’ có chu trình Euler C’. Bỏ cạnh z trên C’ ta thu được
đường đi Euler phủ G.