Professional Documents
Culture Documents
MỤC LỤC
LỜI MỞ ĐẦU
Với sự phát triển và cải tiến của khoa học kĩ thuật, hiện nay, tất cả các trường học đều đã và đang
áp dụng các hiểu biết, kiến thức và kĩ năng về công nghệ thông tin trong các môn học, nhằm mục
đích nâng cao hiệu quả hoạt động học tập và giảng dạy.
Trong lĩnh vực Toán-Tin, thuật toán tìm đường đi ngắn nhất dựa vào đồ thị là một thuật toán được
vận dụng khá nhiều trong các ứng dụng tin học. Với các ứng dụng thực tiễn, bài toán tìm đường đi
ngắn nhất giữa hai đỉnh của một đồ thị mang ý nghĩa vô cùng quan trọng. Ví dụ, đó chính là bài toán
tìm hành trình tiết kiệm nhất (về tiêu chuẩn khoảng cách và thời gian) của “Google map” trên một
mạng lưới giao thông. Hiện nay, có rất nhiều phương pháp khác nhau để giải quyết bài toán này.
Nhưng các thuật toán được xây dựng dựa trên cơ sở lý thuyết đồ thị thì mang đến hiệu quả cao nhất.
Và sau đây, chúng ta cùng đề cập tới thuật toán FloydWarsall thuật toán tìm đường đi ngắn nhất dựa
trên lý thuyết đồ thị.
Mong thầy cùng các bạn theo dõi và góp ý để chủ đề của chúng em được hoàn thiện hơn.
PAGE \* MERGEFORMAT 23
G được gọi là đa đồ thị nếu hai đỉnh u, v của V có thể có nhiều hơn 1 cạnh trong E nối từ u tới v
(Hiển nhiên đơn đồ thị cũng là một đa đồ thị).
G được gọi là đồ thị vô hướng (undirected graph) nếu các cạnh trong E là không định hướng, tức
là cạnh nối hai đỉnh u, v bất kỳ cũng là cạnh nối hai đỉnh v, u. Hay nói tập E gồm các cặp (u, v)
không tính thức tự ( (u, v) = (v, u) ). Hình 2 và Hình 3 là các đồ thị vô hướng.
G được gọi là đồ thị có hướng (directed graph) nếu các cạnh trong E là có định hướng, có thể có
cạnh nối từ đỉnh u tới đỉnh v nhưng chưa chắc có cạnh nối từ đỉnh v tới đỉnh u. Hay nói cách khác
tập E gồm các cặp (u, v) có thứ tự: (u, v) ≠ (v, u). Cạnh trong đồ thị có hướng được gọi là cung.
Với một đỉnh v trong đồ thị, ta định nghĩa bậc (degree) của v kí hiệu là deg(v) là số cạnh liên
thuộc với v.
Với mỗi đỉnh v trong đồ thị có hướng, ta định nghĩa bán bậc ra của v ký hiệu là deg +(v) là số
cung đi ra khỏi nó; bán bậc vào ký hiệu deg-(v) là số cung đi vào đỉnh đó.
3. Biểu diễn đồ thị trên máy tính:
Có 3 cách để biểu diễn đồ thị trên máy tính đó là ma trận kề, danh sách kề và danh sách cạnh.
II. MÔ TẢ LÝ THUYẾT MA TRẬN KỀ CỦA ĐỒ THỊ CÓ HƯỜNG VÀ VÔ HƯỚNG:
Giả sử G = (V, E) là một đơn đồ thị có số đỉnh (ký hiệu | V |) là n, không mất tính tổng quát có
thể coi các đỉnh đánh số 1, 2, …, n. Khi đó ta có thể biểu diễn đồ thị bằng một ma trận vuông A =
[aij] cấp n. Trong đó:
aij = 1 nếu (i,j) ∈ E
aij = 0 nếu (i, j) ∉ E
Quy ước aij = 0 ∀ i;
Đối với đa đồ thị thì việc biểu diễn cũng tương tự trên, chỉ có điều nếu (i, j) là cạnh thì không phải
ta ghi số 1 vào aij mà ghị số cạnh nối giữa đỉnh i và j.
Ví dụ: Cho đồ thì G gồm 3 đỉnh như hình vẽ:
2
1 0 0 1
A= 0 0 1
1 1 0
Ma trận A là ma trận kề biểu diễn đồ thị G. Ở ma trận này với mỗi cạnh nối giữa 2 đỉnh sẽ được
ghi là 1 còn không có cạnh nối nào thì là 0, đỉnh 1 nối với đỉnh 3 nên ta có a 13 và a31 sẽ bằng 1; đỉnh
2 và đỉnh 1 không có cạnh nối nên a21 = a12 = 0. Với các phần tử của ma trận A trên đường chéo chính
sẽ bằng 0 vì tại các phần tử này trên đồ thị các đỉnh không có cạnh nối nào với chính nó.
Dưới đây là mô tả của một đồ thị có hướng gồm 5 đỉnh và ma trận kề biểu diễn đồ thị đó:
PAGE \* MERGEFORMAT 23
2
1 0 0 3
1 A1 = 0 0 1
3 1 0
3
Với các đỉnh được nối với nhau bằng cạnh có trọng số khác 1 thì ta sẽ biểu diễn ma trận kề với
các phần tử trong ma trận là các trọng số đó. Ví dụ ở ma trận A 1 ta có đỉnh 1 nối với đỉnh 3 bằng
cạnh có trọng số bằng 3 thì ở đồ thi vô hướng ta có a 13 = a31 = 3; tương tự thì ma trận có hướng cũng
vậy.
Các tính chất của ma trận kề:
Đối với đồ thị vô hướng G, thì ma trận kề tương ứng là ma trận đối xứng (a ji = aij), điều này không
đúng với đồ thị có hướng.
Nếu G là đồ thị vô hướng và A là ma trận kề tương ứng thì trên ma trận A:
Tổng các số trên hàng i = Tổng các số trên cột i = Bậc của đỉnh i = deg(i).
Nếu G là đồ thị có hường và A là ma trận kề tương ứng thì trên ma trận A:
Tổng các số trên hàng i = Bán bậc ra của đỉnh i = deg+(i).
Tổng các số trên cột i = Bán bậc vào của đỉnh i = deg-(i).
PAGE \* MERGEFORMAT 23
Trong trường hợp G là đơn đồ thị, ta có thể biểu diễn ma trận kề A tương ứng là các phần tử logic.
aij = TRUE nếu (i, j) ∈ R và aij = FALSE nếu (i, j) ∉ E.
Ưu điểm của ma trận kề:
Đơn giản, trực quan, dễ cài đặt trên máy tính.
Để kiểm tra xem hai đỉnh (u, v) 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: auv ≠ 0.
Nhược điểm của ma trận kề:
Bất kể số cạnh của đồ thị ít hay nhiều, ma trận kề luôn đòi hỏi n 2 ô nhớ để lưu các phần tử.
Điều này gây lãng phí bộ nhớ, dẫn đến không biểu diễn được các số đỉnh lớn.
Với một đỉnh u bất kỳ của đồ thị, nhiều khi ta phải xét tất cả cac đỉnh v kề với nó, hoặc xét tất
cả các cạnh liên thuộc với nó. Điều này gây lãng phí thời gian.
III. SƠ LƯỢC VỀ FLOYD – WARSHALL:
1. Giới thiệu:
Khi nhắc đến thuật toán để tìm đường đi ngắn nhất trong đồ thị, chúng ta có thể liên hệ tới những
thuật toán với thời gian chạy cho phép như Duyệt rộng (Breadth First Search), Dijkstra hay Bellman-
Ford. Tuy nhiên ba thuật toán nêu trên chỉ có thể tìm đường đi ngắn nhất từ một đỉnh nguồn nhất
định đến các đỉnh khác. Vậy nên trong một số trường hợp chỉ ra đường đi ngắn nhất giữa mọi cặp
đỉnh u và v bất kì trong đồ thị, các thuật toán nêu trên chưa thật sự hiệu quả vì có quá nhiều thao tác
lặp, gây ảnh hưởng đến thời gian.
Chính vì vậy, thuật toán tìm đường đi ngắn nhất Floyd – Warshall ra đời giúp chúng ta giải quyết
được vấn đề tìm đường đi ngắn nhất giữa mọi cặp đỉnh bất kì trong đồ thị. Hơn nữa cách triển khai
của nó trên máy tính cũng rất đơn giản.
Thuật toán tìm đường đi ngắn nhất giữa tất cả cặp đỉnh bất kì Floyd – Warshall còn được gọi là
thuật toán Floyd được Robert Floyd tìm ra vào năm 1962 là một thuật toán dùng để tìm đường đi
ngắn nhất giữa mọi cặp đỉnh trong đồ thị. Floyd hoạt động được trên đồ thị có hướng, có trọng số âm
nhưng không có chu trình âm. Tuy nhiên, Floyd được dùng như một thuật toán để phát hiện chu trình
âm.
PAGE \* MERGEFORMAT 23
0 1 2 3 4
0 0 5 inf 9 1
1 5 0 2 inf inf
2 inf 2 0 7 inf
3 9 inf 7 0 2
4 1 inf inf 2 0
PAGE \* MERGEFORMAT 23
0 1 2 3 4
0 0 5 inf 9 1
1 5 0 2 14 6
2 inf 2 0 7 inf
3 9 14 7 0 2
4 1 6 inf 2 0
Tiếp theo ta duyệt tới k = 1. Đường đi từ đỉnh 2 tới 0 có độ dài là 7, từ đỉnh 2 tới 4 có độ dài là 8.
Đường đi từ đỉnh 2 tới 3 không được cập nhật trên ma trận kề của đồ thị vì 7 < 2 + 5 + 9.
0 1 2 3 4
0 0 5 7 9 1
1 5 0 2 14 6
2 7 2 0 7 8
3 9 14 7 0 2
4 1 6 8 2 0
Cứ duyệt tiếp tục với k như vậy ta sẽ tới hết và thu được ma trận hoàn chỉnh:
PAGE \* MERGEFORMAT 23
0 1 2 3 4
0 0 5 7 3 1
1 5 0 2 8 6
2 7 2 0 7 8
3 3 8 7 0 2
4 1 6 8 2 0
Giả sử từ mảng này ra thấy đường đi ngắn nhất từ 2 đến 4 là 8. Dựa theo đồ thị thì đoạn đường nó
đi có vết Trace = {2, 1, 0, 4}.
3. Các bước giải bài toán:
Từ mô tả ví dụ ở trên ta rút ra cách giải của thuật toán Floyd – Warshall trong tìm đường đi ngắn
nhất giữa mọi cặp đỉnh trên đồ thị như sau:
Bước 1: Viết ma trận kề D từ đồ thị đã cho với các trọng số.
Bước 2: Chọn lần lượt từng đỉnh trên đồ thị làm đỉnh trung gian. Giả sử chọn đỉnh k làm đỉnh
trung gian. Ta giữ nguyên hàng k cột k của ma trận D, giữ nguyên các phần tử trên đường chéo
chính của D.
Bước 3: Ký hiệu Dk là ma trận của D sau mỗi lần duyệt với k, khi đó:
Dk[i, j] = min( Dk-1[i, j], Dk-1[i, k] + Dk-1[k, j] )
Bước 4: Sau khi thực hiện n lần lặp, sau lần lặp thứ k ma trận D sẽ chứa độ dài đường đi ngắn
nhất giữa các cặp đỉnh bất kì trong đồ thị.
Tuy nhiên với việc lặp ba vòng lặp n lần thì thuật toán Floyd – Warshall sẽ có độ phức tạp O(n3)
thì thời gian chạy trên máy tính cũng tương đối lớn nếu số đỉnh lớn.
PAGE \* MERGEFORMAT 23
2
3
3 7
Hãy tìm đường đi ngắn nhất giữa các địa điểm với nhau . Các địa điểm lần lượt là Đại học
Bách Khoa CS2, KTX Khu B, Chợ Nhân Văn, ĐH Kinh Tế-Luật, và Đường Quốc Lộ 1K ( được
đánh số theo thứ tự 1,2,3,4,5).
Lời giải:
Lập ma trận:
Giữ hàng , cột 1. Chọn Bách Khoa CS2 làm điểm trung gian thứ nhất ta được ma trận
Chọn KTX khu B làm điểm trung gian thứ 2. Giữ ta được ma trận
PAGE \* MERGEFORMAT 23
Chọn chợ Nhân Văn làm điểm trung gian thứ 3, Giữ ta được ma trận
Chọn ĐH Kinh tế-Luật làm điểm trung gian thứ 4. Giữ ta được ma trận :
Chọn Quốc Lộ 1K làm điểm trung gian thứ 5. Giữ ta được ma trận :
Vậy ta có thể tìm được đường đi ngắn nhất giữa các địa điểm thông qua ma trận trên.
PAGE \* MERGEFORMAT 23
2. Ví dụ 2:
Tưởng tượng trong thành phố Hồ Chí Minh với các địa điểm quan trọng như trường học, bệnh
viện, công viên và trung tâm mua sắm.Ta muốn xây dựng một ứng dụng hỗ trợ người dùng tìm
đường đi ngắn nhất giữa các địa điểm này.
7 2
Bảng dưới đây thể hiện ma trận đường đi giữa các địa điểm, trong đó các số thể hiện độ dài của
con đường nối giữa hai địa điểm:
PAGE \* MERGEFORMAT 23
PAGE \* MERGEFORMAT 23
Đây là ma trận biểu diễn đường đi ngắn nhất từ mỗi điểm đến mọi điểm khác:
Khi đó ta có thể hiểu là đường đi ngắn nhất từ trường đến công viên là 5km, và tương tự đến
các điểm còn lại.
3. Ví dụ 3:
Tưởng tượng bạn quản lý một hệ thống vận chuyển cho một công ty ở Hà Nội, và bạn cần tối
ưu hóa việc di chuyển hàng hóa từ các kho đến các cửa hàng khắp thành phố.
Giả sử có một số kho (Warehouse) và một loạt các cửa hàng (Stores) trong thành phố. Mỗi con
đường giữa các kho và cửa hàng có một chi phí vận chuyển khác nhau.
Bảng dưới đây biểu diễn ma trận chi phí (trọng số) để di chuyển hàng hóa từ các kho phân phối
đến các cửa hàng:
Áp dụng thuật toán Floyd-Warshall cho ma trận này sẽ tạo ra ma trận chứa thông tin về chi phí
của đường đi ngắn nhất giữa mọi cặp kho phân phối và cửa hàng.
PAGE \* MERGEFORMAT 23
4. Ví dụ 4:
Giả sử bạn là quản trị viên mạng cho một công ty lớn với nhiều văn phòng ở các thành phố
khác nhau. Bạn cần xác định đường dẫn kết nối tối ưu giữa các máy tính ở các văn phòng khác nhau,
sao cho dữ liệu có thể được truyền tải nhanh chóng và hiệu quả nhất giữa chúng.
Dưới đây là một ma trận biểu diễn thời gian truyền tải dữ liệu giữa các máy tính:
Dựa trên ma trận thời gian truyền tải dữ liệu giữa các máy tính đã được cung cấp, chúng ta
sẽ áp dụng thuật toán Floyd-Warshall để tính toán đường dẫn truyền tải tối ưu nhất giữa các
máy tính.
Sau khi áp dụng thuật toán, kết quả ma trận đường dẫn truyền tải tối ưu sẽ thể hiện thời
gian tối ưu để truyền dữ liệu giữa các máy tính. Dưới đây là kết quả sau khi áp dụng thuật toán:
PAGE \* MERGEFORMAT 23
5. Ví dụ 5:
Ví dụ một mạng lưới các ngân hàng và các tổ chức tài chính trong một khu vực, và một người
muốn sử dụng thuật toán Floyd-Warshall để tính toán chi phí hoặc lợi ích từ việc chuyển khoản tiền
từ mỗi ngân hàng đến ngân hàng khác.
Dưới đây là ma trận biểu diễn chi phí hoặc lợi ích (đơn vị: đồng) từ mỗi ngân hàng đến ngân
hàng khác:
Ví dụ: Chi phí từ Ngân hàng A đến Ngân hàng B là 50 đơn vị (nếu đơn vị là chi phí)
hoặc lợi ích từ Ngân hàng A đến Ngân hàng B là 50 đơn vị (nếu đơn vị là lợi ích).
Áp dụng thuật toán Floyd-Warshall cho ma trận này sẽ tạo ra ma trận chứa thông tin về chi phí
hoặc lợi ích ngắn nhất giữa mọi cặp ngân hàng.
Kết quả sẽ cung cấp thông tin về chi phí hoặc lợi ích khi chuyển khoản tiền từ mọi ngân hàng
đến mọi ngân hàng khác, giúp người quản lý tài chính hiểu rõ về mô hình kinh tế và quyết định về
việc chuyển khoản một cách hiệu quả.
6. Ví dụ 6:
Một công ty có một mạng xã hội với 5 người dùng và muốn tính toán khoảng cách hoặc số
bước cần thiết để kết nối mỗi người dùng với nhau thông qua các mối quan hệ trong mạng xã hội.
Dưới đây là ma trận biểu diễn mối quan hệ giữa các người dùng:
Ở đây:
Giá trị tại hàng i và cột j thể hiện mức độ quan hệ hoặc số bước cần thiết để kết nối từ
người dùng i đến người dùng j.
PAGE \* MERGEFORMAT 23
Kết quả này thể hiện số bước ngắn nhất hoặc mức độ kết nối ngắn nhất giữa các người dùng
trong mạng xã hội. Điều này có thể giúp hiểu về mức độ tương tác, quan hệ hoặc mức độ gần gũi
giữa các người dùng trong mạng xã hội.
PAGE \* MERGEFORMAT 23