Đồ thị G = V, E được gọi là liên thông nếu với hai đỉnh и và vkhác nhau bất kỳ của G tồn tại một đường đi trong G với đỉnh đầu là и và đỉnh cuối là V.. Cạnh e được gọi là cầu nểu khi loạ
Trang 1NGUYỄN THÚY LINH
NHỮNG VẤN ĐÊ Cơ BẢN VÀ MỘT SỐ
THUẬT TOÁN TRÊN ĐỒ THỊ
KHÓA LUÂN TỐT NGHIÊP ĐAI HOC • • •
Trang 2LỜI CẢM ƠNTrong quá trình thực hiện khoá luận em đã nhận được nhiều sự giúp
đỡ quý báu và bổ ích từ các thầy cô và bạn bè Em xin chân thành cảm ơncác thầy cô trong khoa Toán trường Đại học Sư phạm Hà Nội 2 đã tận tâmgiảng dạy, truyền thụ kiến thức và kinh nghiệm quý báu để em hoàn thànhtốt khoá học Đặc biệt, em xin bày tỏ lòng cảm ơn sâu sắc của mình tới
thầy Trần Minh Tước, thầy đã trực tiếp hướng dẫn, nhiệt tình giúp đỡ
và chỉ bảo em ừong suốt quá trình thực hiện khoá luận
Em xin chân thành cảm ơn các thầy cô trong tổ toán ứng dụng - khoaToán, thư viện nhà trường, gia đình và bạn bè đã tạo mọi điều kiện, độngviên, giúp đỡ để em hoàn thành khoá luận này
Xuân Hòa, ngày 06 tháng 5 năm 2014
Sinh viên
Nguyễn Thúy Linh
Trang 3Tôi cam đoan khoá luận “Những vẩn đề cơ bản và một sổ thuật toán
trên đồ thị” là kết quả nghiên cứu của tôi dưới sự hướng dẫn của TS.Trần
Minh Tước Tôi xin khẳng định kết quả nghiên cứu trong khoá luận nàykhông sao chép kết quả của bất cứ tác giả nào khác Nếu sai sót tôi xinchịu hoàn toàn trách nhiệm
Xuân Hòa, ngày 06 tháng 5 năm 2014
Sinh viên
Nguyễn Thúy Linh
Trang 4MỤC LỤC
MỞ ĐẦU 1
Chương 1 MỘT SỐ KIẾN THỨC cơ BẢN VỀ ĐỒ THỊ 2
1 Một số khái niệm của đồ thị 2
1.1.Định nghĩa đồ thị 2
1.2.Các thuật ngữ cơ bản 5
1.3.Một số đồ thị đặc biệt 9
2 Biểu diễn đồ thị 11
2.1.Biểu diễn đồ thị bằng ma trận kề, ma ừận ừọng số 11
2.2.Ma trận liên thuộc 13
2.3.Ý nghĩa của các cách biểu diễn đồ thị 14
Chương 2 MỘT SỐ THUẬT TOÁN TRÊN ĐỒ THỊ 16
1 Bài toán duyệt đồ thị 16
1.1.Thuật toán tìm kiếm theo chiều sâu DFS (Depth First Search) 16
1.2.Thuật toán tìm kiếm theo chiều rộng BFS (Breath First Search) 20
1.3.Ý nghĩa của bài toán duyệt đồ thị 24
2 Bài toán tìm đường đi ngắn nhất 24
2.1.Thuật toán tìm đường đi ngắn nhất Dijkstra 24
2.2 Thuật toán Floyd 30
2.3.Ý nghĩa của bài toán tìm đường đi ngắn nhất 33
3 Bài toán cây khung cực tiểu 34
3.1.Cây, cây khung và một số tính chất 34
3.2.Bài toán cây khung cực tiểu 35
3.3.Ý nghĩa của bài toán cây khung cực tiểu 42
KẾT LUẬN 44
TÀI LỆU THAM KHẢO 45
Trang 5ta có thể mã hóa các bài toán đó bằng máy tính Tuy nhiên, đây là kiếnthức hoàn toàn mới, không có ừong chương trình học của tôi Với mong
muốn học hỏi và tìm tòi kiến thức mới nên tôi chọn đề tài “Những vẩn đề
cơ bản và một số thuật toán trên đồ thị”.
Nội dung khóa luận của tôi tuy không phải là những kết quả mới tìmđược nhưng với tinh thần học hỏi kiến thức mới, hi vọng đề tài này sẽ đemlại nhiều kiến thức bổ ích cho bản thân và cho độc giả Nội dung khóa luậngồm hai chương:
Chương 1 Một sổ kiến thức cơ bản về đồ thị.
Chương 2 Một sổ thuật toán trên đồ thị.
Tuy đã có nhiều cố gắng, song do hạn chế về thời gian và năng lựccủa bản thân, nên khóa luận không tránh khỏi sai sót, rất mong được sựquan tâm góp ý của thầy cô và các bạn
Tôi xin chân thành cảm ơn!
Chương 1
MỘT SỐ KIẾN THỨC Cơ BẢN VỀ ĐỒ THỊ
Trang 61 Một số khái niệm của đồ thị
1.1 Định nghĩa đồ thị
Ta có thể hình dung đồ thị như tập hữu hạn các đối tượng và nhữngmối liên hệ giữa các đối tượng đó Sơ đồ biểu diễn một mạng máy tính làmột hình ảnh của đồ thị Các đối tượng là các máy tính, mỗi kênh thoại sẽbiểu diễn mối liên hệ giữa hai máy tính trong mạng
Có nhiều loại đồ thị được xây dựng dựa vào cấu trúc của đồ thị, cụthể là tùy thuộc vào sự xác định mối liên hệ giữa các đối tượng Khuônkhổ khóa luận này tôi chỉ đề cập tới đồ thị vô hướng và đồ thị vô hướng cótrọng số
Định nghĩa 1.1 Đồ thị là một cặp G = (y,E) gồm hai tập hợp hữu hạn
Một cách trực quan, người ta thường biểu diễn đồ thị bằng sơ đồ đỉnh
Trang 7đỉnh liên thuộc với cạnh đó.
Ví dụ Đồ thị G = (Y,E) với V ={v1,v2, ,v7}, E = {v l v2,
Định nghĩa 1.2 Giả sử G = (y,E) /à đồ thị không rỗng Đồ thị ơ = (y',E') được gọi là đồ thị con của G, kí hiệu G'cG, nếu VcV và E' <^E Trong trường hợp V' -Vthì ta nói rằng ơlà đồ thị con bao trùm của G.
Ví dụ Đồ thị ơ và G" là đồ thị con của G Đồ thị G" là đồ thị con bao trùm
Trang 9Định nghĩa 1.4 Giả sử G = (V,E)là đồ thị không rỗng với V e V và
Xét đồ thị G được cho trong hình 4:
Đỉnh v l liên thuộc với Ểj,Ể2 Đỉnh v2 kề với các đỉnh v15v3,v5
Trang 10Hình 5 Bậc của các đỉnh ừên đồ thị G.
Xét đồ thị G được cho ừong hình 5 ta có
degivj = 1, deg(v 2 ) = 3, deg(v 3 ) = 4, deg(v 4 ) = 2
deg(v5) = 0, deg(v 6 ) = 3, deg{v n ) = 3
Từ khái niệm ta có đỉnh v5 là đỉnh cô lập, V! là đỉnh ừeo
Định lý 1.1.[2] Trong đồ thị G = (V, E) bất kì ta luôn có
veV
*Nhận xét: Ta thấy rằng mỗi cạnh e = uv được tính một làn trong deg(u)
và một lần trong deg{v) Từ đó ta suy ra được rằng tổng của tất cả các bậc
của các đỉnh bằng hai lần số cạnh
1.2.3 Đường đi, chu trình
Định nghĩa 1.6 Giả sử G = (y,E)là đồ thị không rỗng, một đường đi trong
G là một dãy phân biệt các đỉnh v ữ ,v v v 2 , ,v n , Vị GVsao cho VịV i+l G E với mọi ỉ = 0,l, ,n-l Khi đó n được gọi là độ dài, đỉnh v 0 được gọi là đỉnh đầu, còn đỉnh V được gọi là đỉnh cuối của đường đi trên.
Một đường đi được gọi là chu trình nểu đỉnh đầu và đỉnh cuối
của nó trùng nhau.
Ví dụ Giả sử G = (V, E) là đồ thị như ở hình 6.
Vi
Trang 11Hình 6 Đường đi và chu trình trên G.
Khi đó:
Dãy v v v 2 ,v 3 ,v 4 ,v 6 là đường đi đơn độ dài 4
Dãy v1,v2,v4,v6,v5,v1 là chu trình có độ dài 5
1.2.4 Liên thông, thành phần liên thông
Định nghĩa 1.7 Đồ thị G = (V, E) được gọi là liên thông nếu với hai đỉnh и và vkhác nhau bất kỳ của G tồn tại một đường đi trong G với đỉnh đầu là и và đỉnh cuối là V.
Trong trường hợp ngược lại, đồ thị được gọi là không liên thông
Ví dụ Đồ thị G = (V,E) cho ttong hình 7 là đồ thị liên thông.
v2
Như vậy có thể thấy một đồ thị G không liên thông là tập họp các đồ
thị liên thông
Trang 12Mỗi đồ thị liên thông là đồ thị con của G và được gọi là một thành
phần liên thông của đồ thị G đã cho.
Ví dụ Đồ thị G = (Y,E) cho trong hình 8 là đồ thị không liên thông Nó gồm 3 thành phần liên thông G V G 2 ,G 3
Ví dụ Trong đồ G thị ở hình 9, đỉnh v2,v3là đỉnh cắt
Hình 9 Đỉnh cắt trong đồ thị G
Trang 13Hình 10 Cạnh càu ừên đồ thị G
4 ’'б
1.2.6 Cạnh cầu
Định nghĩa 1.9 Giả sử G = (Y,E) là đồ thị không rỗng với e là một
cạnh của G Cạnh e được gọi là cầu nểu khi loại bỏ nó khỏi đồ thị nhận được sẽ cỏ số thành phần liên thông lớn hơn số thành phần liên thông của
Đồ thị mà giữa hai đỉnh bất kỳ của nó luôn có cạnh nối được gọi là
đồ thị đầy đủ Đồ thị đày đủ n đỉnh, ký hiệu là K n
Ví dụ Các đồ thị K 2 ,K 3 ,K 4 ,K 5 cho trong hình 11 dưới đây.
Hình 11 Đồ thị đầy đủ Có thể thấy rằng đồ
Trang 14Đồ thị bánh xe thu được bằng cách bổ sung vào đồ thị vòng C n
một đinh mới nối với tất cả các đỉnh của с Kí hiệu w
Ví dụ Đồ thị bánh xe W 3 ,W 4 ,W 5 ,W 6 cho trong hình 13.
W,
Hình 13 Đồ thị bánh xe W 3 ,W 4 ,W 5 ,W 6
1.3.4 Đồ thị hai phía
Đồ thị G = (У, E) được gọi là hai phía nếu như tập đỉnh V của nó có thể
phân hoạch thành hai tập X và Y sao cho mỗi cạnh của đồ thị chỉ
Trang 15nối một đỉnh nào đó trong X với một đỉnh nào đó ừong Y Khi đó ta sẽ sử dụng ký hiệu G =(Xu Y, E) để chỉ đồ thị hai phía với tập đỉnh Xu Y.
Đồ thị hai phía G = (Zu Y, E) với \х\ = т,\у\ = пх\х\ = т,\у\ = п = т,\х\ = т,\у\ = пу\х\ = т,\у\ = п = п được gọi là đồ thị
hai phía đầy đủ và kí hiệu là K m n nếu mỗi đỉnh trong tập X đều được nối với mỗi đỉnh trong Y.
Ví dụ Các đồ thị K 23 ,K 33 ,K 34 được cho trong hình 15
Hình 15 Đồ thị hai phía
■
2.1 Biểu diễn đồ thị bằng ma trận kề, ma trận trọng số 2.1.1 Ma trân kề
Giả sử G = (У, E) là một đồ thị hữu hạn với V ={v15v2, ,vn} Khi
đó ma ừận kề của đồ thị G là ma trận:
Trang 16Ví dụ Ma trận kề của đồ thị G được cho trong
Trang 17- by = w 0ỉ vị) nếu V Ị V j G E,
nếu i = j và v,v; Ể E J 1 ]
- h= 0
Trang 18Ví dụ Giả sử G = (V,E,w) là đồ thị có trọng số được biểu diễn bằng
hình 18 Khi đó G được biểu diễn bằng ma ừận:
Hình 17 Đồ thị G.
* Nhận xét
ưu điểm:
-Đơn giản, trực quan, dễ cài đặt trên máy tính
-Để kiểm tra xem hai đỉnh (ỉ, ì) của đồ thị có kề nhau hay không, ta chỉ việc kiểm tra bằng một phép so sánh: bị-Ф0.
Nhược điểm:
-Bất kể số cạnh của đồ thị là nhiều hay ít, ma trận liền kề luôn luôn
đòi hỏi n 2 ô nhớ để lưu các phàn tử ma trận, điều đó gây lãng phí bộ nhớdẫn tới việc không thể biểu diễn được đồ thị vói số đỉnh lớn
2.2 Ma trân liên
thuôc • ■
Giả sử G = (У, E) là một đồ thị vói V ={v15v2, ,v„} và E = {e v e 2 , ,em} Khi đó ma trận liên thuộc của đồ thị G là:
V.
>
1 v<
Trang 19- Ma trận liên thuộc tốn ít bộ nhớ hơn khi đồ thị có ít cạnh.
- Nhìn vào ma trận ta có thể dễ dàng biết được số lượng cạnh, số lượng đỉnh và bậc của các đỉnh
Nhược điểm:
- Biểu diễn phức tạp nếu đồ thị có số lượng cạnh nhiều
2.3 Ý nghĩa của các cách biểu diễn đồ thị
Trong những ứng dụng rộng rãi của đồ thị đối với các lĩnh vực khoa
Trang 20học khác và đối với thực tế cuộc sống, việc biểu diễn đồ thị đóng một vaitrò quan trọng.
Biểu diễn đồ thị với sơ đồ đỉnh cạnh được dừng khi muốn mô hìnhhóa nhiều bài toán trong thực tế
Với các loại ma ừận (kề, liên thuộc, ừọng số) và một số cách biểudiễn khác nữa không được đề cập ở đây (Xem [1]), người ta sẽ mô phỏngđược đồ thị ừong các hệ thống máy tính thuận tiện cho việc lập trình.Phối hợp cả hai dạng biểu diễn nói ừên, việc lập trình giải quyếtnhiều bài toán thực tế sẽ trở nên đơn giản, thuận tiện hơn
Chương 2 MỘT SỐ THUẬT TOÁN TRÊN ĐỒ THỊ
1 Bài toán duyệt đồ thị
Một bài toán quan trọng trong lý thuyết đồ thị là bài toán duyệt đồthị Ta phải duyệt qua tất cả các đỉnh của đồ thị, bắt đầu từ một đỉnh xuấtphát nào đó Vấn đề này đưa về một bài toán liệt kê mà yêu càu của nó làkhông được bỏ sót và cũng không được lặp lại bất kỳ đỉnh nào Chính vìvậy mà ta phải xây dựng những thuật toán cho phép duyệt các đỉnh mộtcách hệ thống Những thuật toán như vậy gọi là những thuật toán tìm kiếmtrên đồ thị Ở đây ta quan tâm đến hai thuật toán cơ bản đó là thuật toántìm kiếm theo chiều sâu và thuật toán tìm kiếm theo chiều rộng
1.1 Thuật toán tìm kiếm theo chiều sâu DFS (Depth First Search)
Tư tưởng: Cho G = (y,E) là đồ thị với các đính u , v , w g V Ta sẽ
bắt đàu tìm kiếm tò đỉnh V nào đó của đồ thị Sau đó với mỗi đỉnh u tùy ý
kề với V, ta lặp lại quá trình một cách đệ quy đối với u Ở bước tổng quát,
giả sử đang xét đỉnh V, nếu như ừong số các đỉnh kề với V ta tìm được một
Trang 21đỉnh nào đó là chưa xét thì ta sẽ xét đỉnh này và bắt đầu từ nó ta sẽ tiếp tụcquá trình tìm kiếm Còn nếu như không có đỉnh nào kề với
lại tiếp tục tìm kiếm từ đỉnh mà trước đó ta đến được đỉnh V Quá trình này
có thể mô tả bởi thủ tục đệ quy sau:
if Chuaxet[v] then DFS(v);
END.
Ví dụ Dùng thuật toán DFS duyệt đồ thị sau
Trang 22Hình 1 Đồ thị G.
Thuật toán tìm kiếm theo chiều sâu trên đồ thị G được cho trong hình
1 được minh họa trong hình dưới đây Các đỉnh đang xét được khoanh
ừòn Các đỉnh đã duyệt xong được khoanh hình ô vuông Thứ tự duyệtbằng tay ta có thể tự quy định từ trên xuống dưới, từ trái qua phải hoặctheo sự tăng dần của chỉ số của đỉnh để tránh nhầm lẫn (bỏ sót hay lặp lạiđỉnh ữong quá trình duyệt) Ở ví dụ này, ta tìm kiếm theo thứ tự tăng dànchỉ số của các đỉnh Thuật toán bắt đầu tìm kiếm từ đỉnh V!, các
đỉnh kề với nó là v2,v3, v4 và tiếp tục tìm kiếm đến v2, đến v3 và đến v5
Trang 23Sau khi thăm đỉnh v7 ta thấy không còn đỉnh nào kề với nó nữa, tanói v7 đã duyệt xong, ta quay lại v5 và tiếp tục tìm kiếm các đỉnh tiếptheo.
Hình lg
Trang 24Hình li
Hình
Hình lk
Trang 25Hình lp Hình lq
Khi tất cả các đỉnh đã được đánh dấu là duyệt xong, thuật toán kếtthúc
1.2 Thuật toán tìm kiếm theo chiều rộng BFS (Breath First Search)
Tư tưởng: Thuật toán tìm kiếm theo chiều rộng trên đồ thị được xây
dựng dựa trên cơ sở hàng đợi QUEUE Tức là đỉnh được thăm càng sớm
sẽ càng sớm trở thành đã duyệt xong (tức là càng sớm rời khỏi hàng đợi).Một đỉnh sẽ ừở thành đã duyệt xong ngay sau khi ta xét xong tất cả cácđỉnh kề với nó Thủ tục có thể mô tả như sau:
Procedure BFS(v);
(* Tìm kiểm theo chiều rộng bắt đầu từ đỉnh
V*J begin
QUEUE := 0;
QUEUE <= v; (* Kết nạp V vào QUEUE *)
Chuaxet[v ]:=false; while QUEUE +0do
begin
p <= QUEUE; (* Lẩy p từ QUEUE *) Thăm_đỉnh(p); for u e Ke(p) do if Chuaxet[u] then begin
Trang 26QUEUE <=u; Chuaxet[u] :=false;
Trang 27minh họa ttong các hình và bảng dưới đây Tương tự như DFS, ở đây tacũng quy định duyệt theo thứ tự từ tăng dần của chỉ số của các cạnh Thuật
toán BFS bắt đàu tìm kiếm từ đỉnh v l Các đỉnh đang xét được khoanh tròn.
Các đỉnh đã duyệt xong được khoanh hình ô vuông
v8v„
Trang 28v5 v7 Hình 2mHình 2g
v5 v7 Hình 2f
Hình 2h
Trang 29v5 v7 v5
v7
Khi tất cả các đỉnh đã được đánh dấu
là duyệt xong, thuật toán kết
thúc
1.3.Ý nghĩa của bài toán duyệt đồ thị
Với một đồ thị có nhiều nút, việc
kiểm tra tính liên thông của đồ thị là bài
toán lớn, cần có cách thức để thực hiện
nhanh, chính xác Trên đây đã nêu hai cách
duyệt đồ thị phổ biến được áp dụng đó là
tìm kiếm theo chiều sâu và tìm kiếm theo
chiều rộng giúp người sử dụng dễ dàng
kiểm tra những tính chất liên quan đến tính
liên thông của đồ thị như kiểm tra sự liên
thông của một đồ thị, tìm đường đi giữa hai
đỉnh của một đồ thị,
2 Bài toán tìm đường đi ngắn nhất
Bài toán: Giả sử G = (y,E,w) là một
đồ thị có trọng số liên thông
Trang 30với w : E—»R Giả sử a,z&v và L là đường
đi từ a tới z Hãy tìm đường đi ngắn nhất trong số tất cả các đường đi tò a tới z và
cho biết độ dài đó bằng bao nhiêu?
2.1.Thuật toán tìm đường đi ngắn nhất Dijkstra
Tư tưởng: Trong trường họp trọng số
của các cạnh là không âm Thuật toán nàydựa trên một dãy các bước lặp Một tập đặcbiệt các đinh được xây dựng bằng cáchcộng thêm một đỉnh trong mỗi bước lặp.Thủ
Trang 31trong mỗi lần lặp đó Trong thủtục gán nhãn này, đỉnh z được gán nhãn bằng độ dài của đường
đi ngắn nhất từ a tới z và chỉ
đi qua các đỉnh đã thuộc tập đặc biệt Một đỉnh được thêm vào tập này là đỉnh có nhãn nhỏnhất so với các đinh chưa có trong tập đó Thuật toán tìm đường đi ngắn nhất Dijkstra:
Procedure Dijkstra (*G là đồ thị liên thông có trọng sổ, với trọng sổ không âm*)
Trang 32=
V o ,
V ] , v
n
=
z v à
t r ọ n g
s
Trang 33w ( v i ,
V j ) ,
v ớ i
w ( V j ,
V j )
Trang 340 0
n ế u
{ V ị ,
V j
}
k h ô n g
l
Trang 35m ộ t
c ạ n h
t r o n g
G
* }
f o r i
Trang 36= 1
t o n
L ( V ị )
:
=
0 0
L ị a )
Trang 37u := đỉnh không thuộc s có nhãn L(u) nhỏ
nhất.
s := s u{u}
for tất cả các đỉnh V không thuộc s ifL(u) + w(u, v)
< L(v) then Lịu) :=
Lịu) + w(u, v) {* thêm vào s đỉnh có
nhãn nhỏ nhất, và sửa
đổi nhãn của các đỉnh
không thuộc s*}
Trang 38end {* L(z) bằng độ dài đường
đi ngắn nhất từ a tới z *}
Trang 3939
V 15 V 2 , V 3 , V 4 , V 5 - (0,-)
Trang 41Chưa thăm Đã xét Đang
Trang 422.2 Thuật toán Floyd
Tư tưởng: Thuật toán Floyd có thể dùng để tìm độ dài của đường đi ngắn
nhất giữa tất cả các cặp đỉnh trong một đồ thị liên thông có ừọng số Giả sử đồ
thị có trọng số G = (V, E,w) Từ ma trận trọng số của G, thuật toán Floyd tính
lại các trọng số của cạnh thành độ dài đường đi ngắn nhất giữa hai đỉnh liên
thuộc với cạnh đó Cụ thể, với mọi đỉnh v k của đồ thị được xét theo thứ tự từ 1
tới n, xét mọi cặp đỉnh V , V Nếu
như đường đi từ V tới Vj đang có lại dài hơn đường đi từ V tới v k cộng
với đường đi từ v^tới v.thì ta huỷ bỏ đường đi TÒ
vàcoi đường đi từ V tới Vj sẽ là nối của hai đường đi từ V tới v k rồi từ v k tới