Ta định nghĩa: « Một thành phần liên thông của đồ thị là một lớp tương đương được xác định bởi quan hệ "xâp xỉ" nói trên.. e Liên thông một phần: Đồ thị có hướng gọi là liên thông một ph
Trang 1
ĐẠI HỌC QUỐC GIA THÀNH PHÓ HÒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
BK
TP.HCM
Đề tài số 7 : LÝ THUYẾT ĐỎ THỊ (Chu trình EULER và Chu trình HAMILTON)
GVHD : NGUYÊN HỮU HIỆP
Trang 2
để học tốt các môn khác trong chương trình đảo tạo
Sự phát triển của toán tin ra đời đã hỗ trợ rất lớn trong quá trình phát triển của các môn học đại số Việc ứng dụng tin học trong quá trình giải thích các cơ sở dữ liệu của, giải các bài toán đại số đã làm cho thời gian bỏ ra được rút ngắn lại và mang hiệu quả cao hơn Như
ta đã biết, phần mềm ứng dụng Matlab đã giải quyết được cácvấn đề đó Vì thế việc tìm hiểu Matlab và ung dung Matlab trong việc thực hành môn học đại số tuyến tính rất quan trọng và có tính cấp thiết cao
Ở bài tập lớn này, nhóm thực hiện nội dung “Lý thuyết đồ thị” thông qua phần mềm Matlab Đây là một dạng bài toán khá quan trọng trong việc tìm đường đi giao hàng
Trang 3MỤC LỤC LỜI MỞ ĐẦU 12c 1L n2 HH1 H 2221111 H1 nà chu 1 LỜI CẢM MƠN L0 L0 nh HH nh HH HH HH HH ru 4 CHƯƠNG I : Lý thuyết đồ thị S2 1211231 21112121 1E 181211221 rea 5 1.1 Ma trận kÈ 1 tt 211 1121111210111 11181212 HT HH1 1n Hs HH HH HH He 5 1.1.1 Ma trận kể là QÌ? 1 n1 21H ng 2n 1n tt 2c tt ng nh n ng 5 1.1.2 Tính chất của ma trận kÈ - 2-52 2 25112112711 271127122712 112 1121122110226 1e 5 1.2 Đồ thị liên thông i1 21112212 21121 211111 1 101812112 11011 HH HH HH HH no tàu 5
2.5 Thuat toan tim chu trình culos ccccccceeeeeseeeee sete ceesa eee sastesa ete seetaeeaeensastnaeetnesianenea 7
3.4 Định ly CGhouila — HOUIFI 0 S1 SH nh HT HE KĐT KHE ĐH thà 8
CHƯƠNG 4: Chu trình Euler,Hamilton vào bài toán thực Cocco ằ 8
0;00/9)005.18./7.v000 1 HA 10
2
Trang 45.3.1 Chu trình Euler trong bài toán giao hàng Q0 2.0002 12222nn*nHnnHnke 12
CHƯƠNG 6 : KẾT LUẬN - S121 E21 11121 121 21k HH HH He 19
“S00 .ddddẦ 19 4.2 Nhược điểm - ¿22-221 221122112 1112211221122 1211211111121 ng 19 4.3 Kết luận bài báo cáo ::: 22c 2212 11122211111 2111 21112112111212 2211k ràg 19 TÀI LIỆU THAM KHẢO - 1 1212122 1121212111 121122112212 HH HH Hưng 20 DANH MỤC HÌNH ẢNH :
Hình 1 Đồ thị có hướng và ma trận kề 2c nh 2E H21 1 12122 cg ren rei 5 Hình 2 Các loại đồ thị liên thÔng L1 22111112151 111222 1112 11T Hn t2 nà HH HH ng 6
Hình 6 Bảng giá trị khi chạy chương trình tìm đường đi ngắn nhất óc cv sen 18
3
Trang 5LOI CAM ON
Chúng em xin gửi lời cảm ơn chân thành đến thầy Nguyễn Hữu Hiệp giáo viên Trường
ĐH Bách Khoa TPHCM đã tạo điều kiện thuận lợi cho chúng em học tập và hoàn thảnh
đề tài BTL môn Đại Số Tuyến Tính Đặc biệt, chúng em xin bày tỏ lòng biết ơn sâu sắc đến thầy đã truyền đạt kiến thức và hướng dẫn chúng em trong quá trình làm bài
Em đã có gắng vận dụng những kiến thức đã học được trong học kỳ qua để hoàn thành
bài tiêu luận Nhưng do kiến thức hạn chế và không có nhiều kinh nghiệm về Matlab
nên khó tránh khỏi những thiếu sót trong quá trình nghiên cứu và trình bày Rất kính mong sự góp ý củaquý thầy cô để bài tiểu luận của em được hoàn thiện hơn
Một lần nữa, em xin trân trọng cảm ơn sự quan tâm giúp đỡ của thầy đã giúp đỡ em trong quá trình thực hiện bài tiểu luận này
Trang 6Tính chất của ma trận kề của đồ thị vô hướng:
— Tính đối xứng: a[i.j]Ea[i.1] i.j=1.2 n
— Tống các phần từ trên dòng ¡ (cột j) băng bậc của đỉnh ¡ (đỉnh j)
Tính chất của ma trận kề của đồ thị có hướng:
— Không có tính đối xứng
— Tổng các phần từ trên dòng ¡ bằng bán bậc ra cua dinh i (deg+(i)) va tong cdc phan tir
trên cột J băng bán bậc vào của đỉnh ] (deg-()))
1.2 Đồ thị liên thông
1.2.1 Đồ thị liên thông là gì?
Đồ thị liên thông là một đồ thị nếu có đường đi giữa mọi cặp đỉnh phân biệt của đồ thị Cho đồ thị G = (X.U) vô hướng hay co hướng Với mọi ¡, j thuộc X, ¡ xấp xỉ j <=> ¡ =
j hay có đây chuyền đỉnh đầu là ¡ và đỉnh cuối là j Ta định nghĩa:
« Một thành phần liên thông của đồ thị là một lớp tương đương được xác định bởi quan hệ "xâp xỉ" nói trên
« Số thành phần liên thông của đồ thị là số lượng các lớp tương đương
« Một đồ thị liên thông là I đồ thị chỉ có 1 thành phân liên thông
1.2.2 Tính chất của đồ thị liên thông
e Liên thông mạnh: Đồ thị có hướng gọi là liên thông mạnh nếu có đường đi từ a tới
b và từ b tới a với mọi cặp đỉnh a và b của đô thị
5
Trang 7e Liên thông yêu: Đồ thị có hướng gọi là liên thông yếu nếu có đường đi giữa 2 đỉnh bat ky cua do thị vô hướng tương ứng với đồ thị đã cho
e Liên thông một phần: Đồ thị có hướng gọi là liên thông một phần nếu với mọi cặp đỉnh a, b bât kỳ, có ít nhât một đỉnh đên được đỉnh còn lại
Hinh 2 Cac loai dé thị liên thong
e Đỉnh khớp: của một đồ thị vô hướng là đỉnh mà nếu xóa đỉnh này khỏi đồ thị và
các cạnh nôi đên nó thì số thành phân liên thông của đồ thị sẽ tăng thêm
e Cạnh cầu: của một đồ thị vô hướng là cạnh mà nếu xóa đi khỏi đề thị thì số thành phân liên thông của đồ thị sẽ tăng thêm
e Đồ thị song liên thông: là đồ thị không chứa đỉnh khớp
<= Dinh khop
ì Khéng la dé thi
Dé thi song lién théng Cạnh câu song liên thông
Hình 3 Đồ thị song liên thông và không song liên thông Chương 2 : Chu Trình Euler
2.1 Đường đi Euler
Đường đi Euler trên một đồ thị là đường đi qua tat cả các cạnh, mỗi cạnh đúng một lan 2.2 Chu trình Euler
Chu trình Euler trên một đồ thị là đường đi Euler trên đồ thị đó thoả mãn điều kiện đường di bắt đầu và kết thúc tại củng một đỉnh
Đồ thị có chu trình Euler gọi là đồ thi Euler Đồ thị chỉ có đường đi nhưng không có chu trình Euler được gọi là đồ thị nửa Euler
2.3 Chu trình Euler trên đồ thị có hướng
Một đồ thị có hướng là đồ thị Euler nếu và chỉ nếu:
« Với mọi đỉnh u thuộc đồ thị, đeg+(u)=deg~(u)
« Tất cả đỉnh có bậc lớn hơn 0 thuộc cùng một thành phần liên thông
6
Trang 82.4 Đường đi Euler trên đồ thị có hướng
Đồ thị có hướng là đồ thị nửa Euler nếu và chỉ nếu đồ thị thoả một trong hai điều kiện
sau:
1 Tôn tại chu trinh Euler
2 Thoả tất cả các điều kiện sau:
e Tồn tại trong đồ thị đúng 22 đỉnh s và t sao cho
dep-(s)=deg+(s)+I và dep—(t)=deg+(t)—1
® Với mọi đỉnh u khác s và t, deg+(u)=deg—(u)
e Tất cả các đỉnh có bậc lớn hơn 0 thuộc củng một thành phần liên thông Đỉnh s và đỉnh † cũng chính là đỉnh xuất phát và kết thúc của đường đi Euler trong dé thị
2.5 Chu trình Euler trên đồ thị vô hướng
Đồ thị vô hướng là đồ thị Euler nếu và chỉ nếu:
« Bậc của mọi dinh 1a chan
« Tất cả các đỉnh có bậc lớn hơn 0 thuộc củng một thành phần liên thông
2.6 Đường đi Euler trên đồ thị vô hướng
Tén tại đường đi Euler trên một đồ thị vô hướng nếu và chỉ nếu:
* Dé thị có đúng 0 hoặc 2 đỉnh bậc lẻ
« Tất cả các đỉnh có bậc lớn hơn 0 thuộc cũng một thành phần liên thông
2.7 Thuật toán tìm chu trình Euler
1 Kiểm tra đồ thị có liên thông không: Đảm bảo rằng mọi đỉnh trong đồ thị đều
có thê đạt được từ một đỉnh khởi đầu nào đó Nêu đồ thị không liên thông, không thê có chu trình Euler
2 Kiểm tra bậc của mỗi đỉnh: Xác nhận rằng mỗi đỉnh trong dé thi déu có bậc chăn Nêu có hơn hai đỉnh có bậc lẻ, không thê có chu trình Euler Nêu có đúng hai đỉnh có bậc lẻ, có thê tìm được một đường đi Euler nhưng không phải chu trình Euler
3 Chọn một đỉnh khởi đầu: Chọn bất kỳ đỉnh nào làm điểm bắt đầu cho chu trình
4 Duyệt đồ thị: Duyệt dé thi bang thuật toán tìm kiếm theo chiều sâu hoặc một thuật toán phù hợp khác, đi theo các cạnh chưa được sử dụng Đánh dấu mỗi cạnh
đã sử dụng đề đảm bảo rang moi cạnh chỉ được đi qua một lân
Trang 95 Quay lại nếu cần: Nếu đến một đỉnh mà không còn cạnh nảo có thê đi tiếp, quay lại đỉnh gan nhât có cạnh chưa được sử dụng và tiệp tục duyệt
6 Kiém tra xem tat cả các cạnh đã được sử dụng chưa: Xác nhận răng tât cả các cạnh đã được sử dụng trong quá trình duyệt Nếu đúng, quá trình duyệt tạo ra một chu trình Euler
Chương 3 : Chu Trình Hamilton
3.1 Đường đi Hamilton
Đường đi xI,x2 ,xn được gọi là đường đi Hamilton nếu xi⁄xj;Vi,j:I<i<j<n
Đồ thị có đường đi Hamilton được gọi là đồ thị nửa Hamilton
3.2 Chu trình Hamilton
Một chu trình xI,x2, ,xn,xI được gọi là chu trình Hamilton nếu xI⁄xJ;VI,J:l<I<j<n
Đồ thị có chu trình Hamilton được gọi lả đồ thị Hamilton
3.3 Định lý Dirak
Xét đơn đỏ thị vô hướng G=(V, E) có n đỉnh (n>3) Nếu mọi đỉnh đều có lậkhông
nhỏ hơn |2n| thì G là đồ thị Hamilton
3.4 Dinh ly Ghouila — Houiri
Xét đơn đồ thị có hương liên thông mạh G=(V, E) có n định Nếu trên phiên bản vô
3.5 Thuật toán tim chu trinh HAMILTON
Một chu trình Hamilton là một chuỗi các đỉnh trong đồ thị sao cho mỗi đỉnh chỉ xuất hiện một lần và có một cạnh nỗi mỗi đỉnh với đỉnh liền kề trong chuỗi
1 Kiểm tra tính liên thông của dé thị: Đảm bảo rằng đồ thị là liên thông Nếu đồ thị không liên thông, không thê có chu trình Hamilton
5 Quay lai néu can: Néu khong thể thăm thêm đỉnh nào nữa mà vẫn giữ được tính
hợp
lệ của chu trình, quay lại đỉnh trước đó và thử các lựa chọn khác
Trang 106 Kiểm tra nếu tìm được chu trình Hamilton: Nếu đã thăm tất cả các đỉnh và đồ thị là liên thông, kiêm tra xem chu trình đã tìm được có phải là chu trình Hamilton
không
Chương 4 : Chu trình EULER, HAMILTON vào bài toán thực tế
4.1 Áp dụng chu trình Euler
6 2 2-5 Là câu ( Không còn lỗôi| Xóa cầu | 5-3,5-1,5-4
Trang 11Do deg(A) = deg(C) = deg(E) = 2 ( có 2 cạnh tiến tới A,C,E)
> AB, AF, CB, CD, ED, EF € H
Luc nay deg(B) = deg(D) = deg(F) = 2 ( đã có 2 cạnh tiến tới B, D, F )
Ta xóa các cạnh còn lại hướng tới B, D, E
=>> Kết luận : có chu trình Hamilton : A-B-C-D-E-F-A
Ví dụ 2:
A
mm
ST 1
Gọi K là chu trinh Hamilton cần tim
Do deg(A) = deg(C) = deg(G) = deg(J) = 2 ( có 2 canh tién téi A,C,G,J)
> AB, AF, CB, CD, GF, GH, JH, JD € K
Lúc này deg(B) = deg(D) = deg(F) = deg(H) = 2 ( đã có 2 cạnh tién tới B, D, F, H)
= Ta xóa các cạnh còn lại hướng tới B, D, F, H
Lúc này ta thấy điểm E còn cô lập
=>> Kết luận : Không có chu trình Hamilton
2 Matlab là ngôn ngữ lập trình do MathWorks phát triển, cho phép người dùng xây
dựng ma trận, vẽ đô thị hàm số hay biêu đô dữ liệu, thực hiện các phép toán, tạo các giao diện người dùng, liên kết các chương trình máy tính được việt trên nhiêu ngôn ngữ khác nhau, bao gom ca C, C++, Java, va FORTRAN, phân tích dữ liệu, phát triên các thuật toán, tạo ra các mô hình và ứng dụng
3 Matlab được tích hợp nhiều lệnh và các hàm toán học, giúp người dùng thực hiện tính toán các con số, vẽ đồ thị và thực hiện các phương pháp số
10
Trang 125.2 Giới thiệu một số hàm thường dùng trong Matlab
Input x = input(‘tén bién’) Hiên thị đâu nhac lệnh và chờ đầu vào
Int int(ham, bién) Dung dé tính tích phân của hàm theo biến
lf-end If (điều kiện) Dùng đề xác định điều kiện để cho chương
trong khoảng từ if dén end
5.3 Đoạn code biếu diễn chương trình mô tả bài toán giao hàng
5.3.1 Chu trình Euler của đồ thị
11
Trang 13% Kiểm tra đồ thị có phải là Euler không
if ~check_euler_graph(n, adj, deg)
% Tim được một cạnh nối chưa bị xóa có thể đi được
if next_v ~= 0
12
Trang 14end end
end for next_v = 1:n
if is_free(next_v) && adj(cur, next_v) ~= @ is_free(next_v) = false;
path = [path, next_v];
13
Trang 15
end end
Trang 16Hình 4 Bảng gia tri khi chạy chu trình Euler
5 3.2 Chu trình Hamilton của đồ thị
15
Trang 17
Ta có đoạn code :
function HamiltonianCycle
% Nhập đồ thị và tìm chu trình Hami1ton
[n, ~, adj, deg] = enter(); % Nhập thông tin đồ thị
is free = ones(1, n); % Mang danh dau đỉnh chưa được duyệt circuit = zeros(1, n); % Mang luu chu trinh Hamilton khi tim thay
solution(n, adj, deg, is free, circuit); % Tim chu trinh
Hamilton
end
function [n, m, adj, deg] = enter()
% Nhập thông tin về số đỉnh và số cạnh của đồ thị
adj = zeros(n); % Ma tran ké
deg = zeros(1, n); % Mang bậc của các đỉnh
function check = check_hamilton_graph(~, deg)
% Kiểm tra xem đồ thị có chu trình Hamilton hay không
check = all(deg >= 2); % MOi dinh có bậc ít nhất là 2
end
function print_hamilton_circuit(n, circuit)
% In ra chu trinh Hamilton
Trang 18function find_hamilton_circuit(i, n, adj, circuit, is free)
% Tim chu trinh Hamilton bang phương pháp backtracking
for v = 1:n
if is_free(v) && adj(circuit(i - 1), v) circuit(i) = v;
ifi<ono
is free(v) = 9; % Đánh dấu đỉnh v đã được thäm
find_hamilton_circuit(i + 1, n, adj, circuit,
end end end
end
function solution(n, adj, deg, is free, circuit)
% Tìm chu trình Hamilton ti dinh 1
Trang 19HamiltonianCycle.m |
Hình 5 Bảng giá trị khi chạy chu trình Hamilton
5.3.3 Đường đi ngắn nhất qua các điểm giao hàng và trở về vị trí ban đầu
Trang 20chutrinh_euler = [chutrinh, diemhientai];
disp('Duong di ngan nhat la: ', char(chutrinh_ euler)]);
Trang 21Chương 6 Kết Luận
4.1UƯu điểm:
với cách thông thường
nhau Qua đó sẽ thuận tiện hơn cho việc tính toán các bài toán thực tế
4.2 Khuyết điểm:
hiện các chủ đề khác
4.3 Kết luận bài báo cáo:
1 Nhằm mục đích tông quan về một số vấn đề, cơ bản nhất của lý thuyết đồ thị: Trình bày các khái niệm, định nghĩa cơ bản vẻ lý thuyết đồ thị, các định lý, tính chất được áp dụng thiết thực và hiệu quả để giải các bài toán sơ cấp
2 Làm nỗi bật ưu thế của lý thuyết đồ thị trong việc giải một số bài toán sơ cấp: Nêu ra được một số bài toán liên quan đến đỉnh, cạnh, tô màu, chu trình, đường
đi của đồ thị Các bài toán đó được chứng minh một cách cụ thể và được vận dụng có hiệu quả trong việc giải các bài toán sơ cấp liên quan
3 Lý thuyết đồ thị áp dụng vào đời sông khi dùng các chu trình trình Euler và chu trình Hamilton vào các bài toán giao hàng và tìm đường đi ngắn nhất thành lập
nên một hệ thông rõ ràng
20