Lý thuyết đồ thị được ứng dụng rất rộng rãi trong các lĩnh vực như toán học, khoa học máy tính, các mô hình tính toán thực tế về đường đi,sự cạnh tranh của các loài khác nhau trong một ổ
Trang 1VĂN PHÒNG KS CLC VIỆT-PHÁP
BÁO CÁO BÀI TẬP LỚN
MÔN HỌC: ĐẠI SỐ TUYẾN TÍNH(MT1015)
ĐỀ TÀI: THUẬT TOÁN FLOYD-WARSHALL TÌM
ĐƯỜNG ĐI NGẮN NHẤT
Giảng viên hướng dẫn: TS.Đặng Văn Vinh
Lớp: P02 Nhóm: 7
Tp.HCM, tháng 11 năm 2023
Trang 2DANH SÁCH CÁC THÀNH VIÊN TRONG NHÓM
Trang 3MỤC LỤC
DANH SÁCH THÀNH VIÊN………2
LỜI NÓI ĐẦU……… ……… 4
I.LÝ THUYẾT VỀ ĐỒ THỊ……… 5
1.Lịch sử ra đời của lý thuyết đồ thị……… 5
2.Cơ sở lý thuyết……… 6
A)Đồ thị……….6
B)Ma trận kề……….9
II.THUẬT TOÁN FLOYD-WARSHALL……… 12
1.Giới thiệu về thuật toán……….………12
2.Ý tưởng của thuật toán……… 12
3.Phương pháp giải ……… ………14
4.Ưu/nhược điểm của thuật toán……….15
5.Input 1 đồ thị, tìm đường đi ngắn nhất bằng thuật toán…………15
6.Giải bài toán tìm đường đi ngắn nhất trong MATLAB………… 19
III.CÁC VÍ DỤ……… 21
IV.TÀI LIỆU THAM KHẢO………26
V.TỔNG KẾT……….27
VI.NHẬN XÉT CỦA GIẢNG VIÊN……….27
Trang 4LỜI NÓI ĐẦU
Lý thuyết đồ thị là một ngành khoa học được phát triển từ lâu nhưng lại có nhiều ứng dụng hiện đại Những tư tưởng cơ bản của lý thuyết đồ thị được đề xuất vào những năm đầu của thế kỷ 18 bởi nhà toán học lỗi lạc người Thụy Sỹ Leonhard Euler Lý thuyết đồ thị được ứng dụng rất rộng rãi trong các lĩnh vực như toán học, khoa học máy tính, các
mô hình tính toán thực tế về đường đi,sự cạnh tranh của các loài khác nhau trong một ổ sinh thái, đại diện kết quả cho một giải đấu xoay vòng, xác định mạch vòng trong vấn đề giải tích mạch điện Đồ 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ạnh giao thông Chúng ta cũng
có thể sử dụng đồ thị để giải các bài toán về lập lịch , thời khoa biểu… Đặ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 Các thuật toán trên đồ thị đã có nhiều ứng dụng trong nhiều lĩnh vực khác nhau như: Mạng máy tính, Lí thuyết mã, Tối ưu hoá,…
Trong khoa học máy tính và toán học, thuật toán tìm đường đi ngắn nhất trong đồ thịthường được vận dụng trong các ứng dụng tin học Trong thực tế, bài toán tìm đường đingắn nhất giữa hai đỉnh của một đồ thị có ý nghĩa cực kỳ to lớn Ví dụ, bài toán chọn mộthành trình tiết kiệm nhất(về tiêu chuẩn khoảng cách, thời gian, chi phí, ) trên một mạnglưới giao thông đường bộ, đường thủy, đường hàng không,… Hiện nay có rất nhiềuphương pháp được đưa ra để giải quyết các bài toán như vậy Thế nhưng các thuật toánđược xây dựng dựa trên cơ sở lý thuyết đồ thị là mang lại hiệu quả cao nhất Một trong số
đó phải kể đến đó chính là thuật toán Floyd-Warshall, một trong những thuật toán tìmđường đi ngắn nhất dựa trên lí thuyết đồ thị được sử dụng rộng rãi
Trang 5I.LÝ THUYẾT VỀ ĐỒ THỊ
1.Lịch sử ra đời của lý thuyết đồ thị
Bài toán bảy cây cầu Euler, còn gọi là Bảy cầu ở Konigsberg là bài toán nảy
sinh từ thành phố Konigsberg, Phổ(nay là Kaliningrad, một phần lãnh thổ
của Liên Bang Nga Bài toán đặt ra là tìm một tuyến đường mà đi qua mỗi
cây cầu một lần và chỉ đúng một lần (bất kể điểm xuất phát hay điểm tới)
Năm 1736, Leonhard Euler đã chứng minh rằng bài toán này là không có lời
giải Kết quả này là cơ sở phát triển của lý thuyết đồ thị
Năm 1852 Francis Guthrie đưa ra bài toán bốn màu về vấn đề liệu chỉ với bốn màu có thể tô màu một bản đồ bất kì sao cho không có hai nước nào cùng biên giới được tô cùng màu Bài toán này được xem như đã khai sinh ra lý thuyết đồ thị và chỉ được giải sau một thế kỉ vào năm 1976 bởi Kenneth Appel (1932 -) và W.Haken (1928 - )
Mô tả bài toán 7 cây cầu ở Konigsberg của Euler
Trang 6-Đồ thị G=(V,E) bao gồm V(vertices) một tập các đỉnh(hoặc nút) khác rỗng và E(edges)
một tập các cạnh Mỗi cạnh có một hoặc hai đỉnh liên kết với nó, được gọi là điểm cuối của nó Một cạnh được cho là kết nối các điểm cuối của nó.
-Có thể hiểu E là tập hợp các cặp (u,v) với u và v là 2 đỉnh thuộc V
*Phân loại các loại đồ thị
G được gọi là đơn đồ thị nếu như giữa hai đỉnh (u,v) của V có nhiều nhất một cạnh
trong E nối từ u tới v.
G được gọi là đa đồ thị nếu như giữa hai đỉnh (u,v) của V có thể có nhiều
hơn 11 cạnh nối trong E nối từ u tới v Hiển nhiên đơn đồ thị cũng là đa đồ thị.
G được gọi là đồ thị vô hướng (undirected graph) nếu như các cạnh trong E là không định hướng, tức là cạnh (u,v) là cạnh hai chiều.
G được gọi là đồ thị có hướng (directed graph) nếu như các cạnh trong E là có
định hướng, tức là có thể tồn tại cạnh nối từ u tới v nhưng chưa chắc đã tồn tại
cạnh nối từ v tới u Trên đồ thị có hướng, các cạnh sẽ được gọi là các cung Đồ thị
vô hướng cũng có thể coi là đồ thị có hướng, nếu như ta coi cạnh (u,v) bất kỳ tương ứng với hai cung (u→v) và (v→u).
Trang 7*Các thuật ngữ trên đồ thị(Graph Terminology)
1 Cạnh liên thuộc, đỉnh kề, bậc và khuyên
-Đối với đồ thị vô hướng G=(V,E), hai đỉnh u và v trong đồ thị được gọi là kề
nhau(adjacent) trong G nếu u và v là điểm cuối của một cạnh e của G Cạnh e như vậy được gọi là liên thuộc(incident) với các đỉnh u và v và e được gọi là nối nhau(connect)
giữa u và v
-Với một đỉnh u thuộc đồ thị, bậc của nó được xác định bởi số cạnh liên thuộc với nó,
ngoại trừ một vòng lặp tại lại tại đỉnh đó,được kí hiệu là deg(u) Trên đơn đồ thị, số cạnh
liên thuộc với u cũng chính là số đỉnh kề với u
Định lý 1:
Giả sử G=(V,E) là đồ thị vô hướng với M cạnh khi đó tổng tất cả các bậc đỉnh trong V sẽ bằng 2M.
Chứng minh: Khi lấy tổng tất cả các bậc đỉnh, tức là mỗi cạnh e=(u,v) bất kỳ sẽ được tính
một lần trong deg(u) và một lần trong deg(v) Từ đó suy ra điều phải chứng minh.
Hệ quả: Trên đồ thị vô hướng, số đỉnh bậc lẻ là một số chẵn.
cận với v và v được gọi là liền kề với u Đỉnh u được gọi là đỉnh đầu còn đỉnh v được gọi
là đỉnh cuối của (u,v)
Với mỗi đỉnh u trong đồ thị có hướng, định nghĩa: Bán bậc ra (out-degree) của đỉnh u, kí hiệu deg+(u) là số cung đi ra khỏi nó; Bán bậc vào (in-degree) của đỉnh u, kí hiệu deg−
(u) là số cung đi vào nó.
Định lý 2:
Giả sử G=(V,E) là đồ thị có hướng với M cung khi đó tổng tất cả các bán bậc ra bằng tổng tất cả các bán bậc vào và bằng M:
Trang 8Chứng minh: Khi lấy tổng tất cả các bán bậc ra hoặc bán bậc vào, mỗi cung (u→v) bất kỳ
sẽ được tính đúng một lần trong deg+(u) và cũng được tính đúng một lần trong deg−(v)
Từ đó suy ra điều phải chứng minh
*Trên đồ thị có hướng hoặc vô hướng, trong một số trường hợp có thể có những cạnh nối
một đỉnh với chính nó Cạnh này được gọi là khuyên của đồ thị, và trong trường hợp này, thì các cạnh nối hai đỉnh phân biệt sẽ được gọi là các liên kết để tránh nhầm lẫn.
2 Đường đi và chu trình
Một đường đi P độ dài k từ đỉnh u0 tới đỉnh u k là tập đỉnh {u0,u1,u2, ,u k } sao cho (u i−1,ui
)∈E,∀i:1≤i≤k Khi đó ta nói đường đi này bao gồm các đỉnh u0,u1,u2, ,u k } và các cạnh u0,u1),(u1,u2), ,(uk−1,uk)}; và u 0 đến được uk thông qua đường đi P.
Đường đi được gọi là đường đi đơn giản (simple path) nếu tất cả các đỉnh trên đường đi
đó đều phân biệt Đường đi được gọi là đường đi đơn nếu như không có cạnh nào trên
đường đi đó đi qua hơn một lần
Một đường đi con (subpath) P′ của P là một đoạn liên tục các đỉnh và cạnh dọc theo
đường đi P.
Đường đi P gọi là chu trình (circuit) nếu như u0=u k Chu trình P gọi là chu trình đơn
không có cạnh nào đi qua hơn một lần được gọi là chu trình đơn.
3 Tính liên thông của đồ thị
Đối với đồ thị vô hướng G=(V,E) thì G được gọi là liên thông nếu như với mọi cặp đỉnh phân biệt (u,v), ta đều có u đến được v (đồng nghĩa với v cũng đến được u).
Đối với đồ thị có hướng G=(V,E):
biệt (u,v), ta có u đến được v và v đến được u.
Trang 9 G được gọi là liên thông yếu (weakly connected) nếu như đồ thị vô hướng nền
của nó là liên thông (tức là hủy bỏ chiều của các cạnh trên đồ thị)
đỉnh phân biệt (u,v), có ít nhất một đỉnh đến được đỉnh còn lại.
B)Ma trận kề(Adjacency Matrices)
-Việc thực hiện các thuật toán đồ thị bằng cách biểu diễn đồ thị theo danh sách các cạnh hoặc theo danh sách liền kề có thể rất phức tạp nếu có quá nhiều cạnh trong đồ thị Để đơn giản hóa việc tính toán, đồ thị được biểu diễn bằng ma trận
Đối với đồ thị vô hướng
-Xét một đồ thị vô hướng G=(V,E) với tập đỉnh V={1,2,…,n} và tập cạnh E={e1,e2,
….,en}
-Ma trận kề của đồ thị G là A(AG) có kích cỡ là nxn với các phần tử là 0 hoặc 1, aij = 1 nếu cạnh (i,j) là một cạnh giữa hai đỉnh ui và uj liền kề, aij = 0 nếu là một cạnh giữa hai đỉnh ui và uj không liền kề
*Tính chất:
-Là ma trận đối xứng
-Tổng các phần tử trên ma trận bằng 2 lần số cạnh
-Tổng các phần tử trên hàng hoặc cột thứ u là bậc đỉnh của u
Ví dụ: Lập ma trận kề cho đồ thị vô hướng sau:
Ta có ma trận kề của đồ thị tương ứng với 4 đỉnh a,b,c,d là
0]
Đối với đồ thị có hướng
Trang 10-Xét một đồ thị có hướng G=(V,E) với tập đỉnh V={1,2,…,n} và tập cạnh E={e1,e2,….,en}-Ma trận kề của đồ thị G là A(AG) có kích cỡ là nxn với các phần tử là 0 hoặc 1, aij = 1 nếu cạnh (i,j) là một cạnh giữa hai đỉnh ui và uj liền kề, aij = 0 nếu là một cạnh giữa hai đỉnh ui và uj không liền kề.
*Tính chất:
-Có thể không là ma trận đối xứng
-Tổng các phần tử của ma trận bằng số cạnh
-Tổng các phần tử trên hàng thứ u là bán bậc ra của đỉnh u
-Tổng các phần tử trên cột thứ u là bán bậc vào của đỉnh u
Ví dụ: Lập ma trận kề cho đồ thị có hướng sau:
Ta có ma trận kề của đồ thị tương ứng với 4 đỉnh a,b,c,d là
0]
*Ma trận kề của đồ thị có trọng số:
Ví dụ: Cho đồ thị vô hướng và có trọng số sau, hãy lập ma trận kề
Trang 11Ta có ma trận kề của đồ thị vô hướng có trọng số
0 ]
Ví dụ: Cho đồ thị có hướng và có trọng số sau, hãy lập ma trận kề
Ta có ma trận kề của đồ thị vô hướng có trọng số
0 ]
II.THUẬT TOÁN FLOYD-WARSHALL
1.Giới thiệu về thuật toán
-Bài toán tìm đường đi ngắn nhất(Shortest-Path) là một trong những bài toán có ứngdụng rất to lớn trong nhiều lĩnh vực khác nhau Khi nhắc đến nó người ta thường nghĩngay đến các thuật toán dễ tiếp cận và có thể chạy trong giới hạn cho phép như Breadth
Trang 12First Search, Dijkstra hay Bellman-Ford Tuy nhiên các thuật toán này sẽ hoạt động chưahiệu quả khi phải chạy lặp đi lặp lại khá nhiều thao tác trong một số trường hợp cụ thểcần chỉ ra đường đi ngắn nhất của mọi cặp đỉnh trong đồ thị bởi vì 3 thuật toán trên chỉ cóthể tìm được đường đi ngắn nhất từ một đỉnh nguồn nhất định đến đỉnh khác
-Thuật toán Floyd-Warshall(còn được gọi là thuật toán Floyd) được ra đời năm 1962 bởi Robert Floyd
2.Ý tưởng của thuật toán
-Thuật toán Floyd-Warshall là dạng quy hoạch động(Dynamic programming), dùng đểgiải bài toán đường đi ngắn nhất giữa tất cả các cặp đỉnh trong đồ thị có hướng Nó tìmđược đường đi ngắn nhất giữa các nút trong biểu đồ Thuật toán coi các đỉnh trung giancủa một đường đi đơn là bất kỳ đỉnh nào có trong đường đi đó ngoại trừ đỉnh đầu tiên vàđỉnh cuối cùng của đường đi Trước những năm 1962, việc tìm ra đường đi ngắn nhất chotất cả các cặp đỉnh là một việc khá khó khăn, Warshall quan tâm đến việc xác định đường
đi ngắn nhất giữa mỗi cặp đỉnh u và v, liệu u có thể tới được v hay không Thuật toánFloyd-Warshall là sự cải tiến của thuật toán này,chỉ cần chạy trong thời gian o(n3) Tínhthông minh của thuật toán là tìm ra một công thức khác cho bài toán con đường đi ngắnnhất so với công thức về độ dài đường đi Lúc đầu, công thức có vẻ không tự nhiên nhất,nhưng nó dẫn đến một thuật toán nhanh hơn
-Chúng ta sẽ tính toán một tập hợp các ma trận có phần tử là di,j(k) Ta sẽ thay đổi ý nghĩa
của từng phần tử này Cho một tập đường đi E=(v 1 ,v 2 ,…,v n ) ta nói rằng (v 1 ,v 2 ,…,v n-1 ) là các
đỉnh trung gian của đường đi này Lưu ý rằng đường đi gồm một cạnh không có đỉnh trung gian Chúng ta định nghĩa di,j(k) là đường đi ngắn nhất từ i đến j sao cho mọi đỉnh trung gian trên đường đi đều được chọn từ tập hợp {1,2,….,k} Đường đi có thể tự do đi qua bất kì tập con nào của các đỉnh này và thực hiện theo bất kỳ thứ tự nào Do đó, sự khác biệt giữa công thức Floyd-Warshall và các công thức khác là chỉ số trên (k) giới hạn tập hợp các đỉnh mà đường đi được phép đi qua và chỉ số (m) giới hạn số cạnh mà đường
đi được phép sử dụng Hãy xem ví dụ dưới đây, ta chú ý giá trị của di,j(k) thay đổi như thế nào khi k thay đổi Chúng ta tính di,j(k) giả sử rằng chúng ta đã tính ma trận dk-1 trước đó Như trước, có hai trường hợp cơ bản tùy thuộc vào cách chúng ta có thể đi từ đỉnh i đến j,giả sử rằng các đỉnh trung gian được chọn từ {1,2,…,k}
Ví dụ
Trang 13-Với mọi đồ thị nào(có hướng hoặc vô hướng) G=(V,E) trong đó V là số đỉnh còn E là số cạnh, với hàm trọng số w:E → R tìm tất cả các cặp đỉnh u,v ∈ V với trọng số nhỏ nhất có
thể của đường đi từ u đến v
Tìm đường đi ngắn nhất giữa các cặp đỉnh của đồ thị
Đối với các trường hợp chung, cạnh âm vẫn được chấp nhận Bài toán có thể được
giải quyết bằng cách chạy thuật toán Bellman-Ford “V” lần, với mỗi lần cho một đỉnh Thời gian tính toán phức tạp O(V 2 E), nếu đồ thị dày đặc thì O(V 4 ).
Thuật toán Floyd-Warshall có thể giải bài toán tương tự chỉ trong O(V 3 )
o Giải cho đồ thị dày đặc
có phải là đỉnh trung gian của P hay không.
Ví dụ
Trang 14-Từ ví dụ trên nếu K không nằm trong P thì đường đi ngắn nhất từ i đến j với tất cả các
đỉnh trung gian trong tập hợp {1,2,…k} cũng đồng thời là đường đi ngắn nhất trong tập
{1,2,…k} Nếu K nằm trong P thì ta chia P thành P 1 và P 2 trong đó:
P 1 là đường đi ngắn nhất từ i đến K với tất cả các đỉnh trung gian trong tập (1,2,
…,k)
P 2 là đường đi ngắn nhất từ K đến j với tất cả các đỉnh trung gian trong tập (1,2,
…,k)
3.Phương pháp giải
-Phương pháp của thuật toán Floyd-Warshall cho bài toán tìm đường đi ngắn nhất :
-Cho G=(V,E) là đồ thị có hướng có trọng số với hàm trọng số cạnh w:E → R có giá trị
thực cho các cạnh, trong đó V={1,2,…,n} với n là tập các đỉnh và E ⊆ VxV là một tập các
cạnh Giả sử rằng không có chu trình trọng số âm trong đồ thị G mặc dù cho phép các cạnh có trọng số âm Chúng ta sử dụng biểu diễn ma trận kề cho đồ thị G Input của bài
toán đường đi ngắn nhất cho tất cả các cặp là ma trận cỡ nxn W=[w(i,j)] trong đó w(i,j)
biểu thị trọng số cạnh từ đỉnh i đến đỉnh j trong đồ thị G, với n đỉnh, ta có:
d (i,j) = minp∈P(i,j){w(i,k1)+w(k1,k2)+…… +w(km,j)} (2)
Trong đó m là số đỉnh trung gian Khi đó, bài toán đường đi ngắn nhất cho tất cả các cặp
đỉnh là tìm ma trận cỡ nxn D=[d(i,j)] cho ma trận cỡ nxn W cho trước Chúng ta có thể
định nghĩa một công thức đệ quy để tính đường đi ngắn nhất Gọi di,j(k) là khoảng cáchcủa đường đi ngắn nhất (i,j) trong đó tất cả các đỉnh trung gian đều nằm trong tập hợp{1,2,…k} phép truy hồi được định nghĩa là
Trang 15Từ đó ta có mã giải của thuật toán:
Cho G là đồ thị đơn giản có trọng số {G có các đỉnh v 1 ,v 2 ,…v n và các trọng số w(v i ,v j ) với w(v i ,v j ) = ∞ nếu {v i ,v j } không phải là một cạnh}
Return[d(v i ,v j )]{d(v i ,v j ) là độ dài đường đi ngắn nhất giữa v i và v j với 1 ≤ i ≤ n,1 ≤ j ≤ n}
4.Ưu/nhược điểm của thuật toán
*Ưu điểm
-Cách tiếp cận đơn giản, quen thuộc
-Tìm được đường đi ngắn nhất giữa tất cả các điểm trong đồ thị với trọng số âm hoặc dương, trong đồ thị có hướng hoặc vô hướng
-Chỉ với một lần chạy thuật toán sẽ cho ta kết quả
-Phát hiện được chu trình âm trong đồ thị
*Nhược điểm
-Trong đồ thị không được có vòng nào có tổng các cạnh là âm, nếu có vòng như vậy ta
không thể tìm được đường đi ngắn nhất(mỗi lần đi qua vòng này độ dài quãng đường lại giảm, nên ta có thể đi vô hạn lần)
5.Input 1 đồ thị, tìm đường đi ngắn nhất bằng thuật toán
Ví dụ: Dùng thuật toán Floyd-Warshall tìm đường đi ngắn nhất, viết ma trận đường đi
ngắn nhất d(k) cho đồ thị dưới đây