LTDT Floyd

9
BÁO CÁO ĐỒ ÁN MÔN LÝ THUYẾT ĐỒ THỊ Tên đề tài : Tìm đường đi ngắn nhất . Viết chương trình tìm đường đi ngắn nhất bằng thuật toán Floyd Mục lục: 1. Giới thiệu 1.1. Thuật toán Floyd 1.2. Phân công công việc. 2. Phân tích bài toán. 2.1. Mục đích. 2.2. Thuật toán. 2.3. Chứng minh. 2.4. Chú ý 2.5. Ngôn ngữ sử dụng. 2.6. Một số giao diện và kết quả chạy chương trình. 3. Tài liệu tham khảo. Nội dung: 1. Giới thiệu: 1.1. Thuật toán Floyd: Xét đồ thị có hướng có trọng số G Để tìm con đường ngắn nhất giữa mọi cặp đỉnh của G, ta có thể áp dụng giải thuật Dijkstra nhiều lần hoặc áp dụng một giải thuật đơn giản là giải thuật Floyd được trình bày dưới đây 1.2. Phân công công việc 1

Transcript of LTDT Floyd

Page 1: LTDT Floyd

BÁO CÁO ĐỒ ÁN MÔN LÝ THUYẾT ĐỒ THỊ

Tên đề tài: Tìm đường đi ngắn nhất . Viết chương trình tìm đường đi ngắn nhất

bằng thuật toán Floyd

Mục lục:

1. Giới thiệu

1.1. Thuật toán Floyd

1.2. Phân công công việc.

2. Phân tích bài toán.

2.1. Mục đích.

2.2. Thuật toán.

2.3. Chứng minh.

2.4. Chú ý

2.5. Ngôn ngữ sử dụng.

2.6. Một số giao diện và kết quả chạy chương trình.

3. Tài liệu tham khảo.

Nội dung:

1. Giới thiệu:

1.1. Thuật toán Floyd:

Xét đồ thị có hướng có trọng số GĐể tìm con đường ngắn nhất giữa mọi cặp đỉnh của G, ta có thể áp dụng

giải thuật Dijkstra nhiều lần hoặc áp dụng một giải thuật đơn giản là giải thuật Floyd được trình bày dưới đây

1.2. Phân công công việc

- Nguyễn Vũ Ngọc Trai. Tổng hợp tài liệu và viết code chương trình.

- Nguyễn Hữu Trí tổng hợp tài liệu

- Nguyễn Quốc Phong soạn file Doc

- Nguyễn văn Thi, Nguyễn Mậu Tý tìm kiếm tài liệu liên quan đến đề tài đồ

án.

2. Phân tích bài toán:

1

Page 2: LTDT Floyd

2.1. Mục đích:

Để tìm con đường ngắn nhất giữa mọi cặp đỉnh của G, ta có thể áp dụng giải thuật Dijkstra nhiều lần hoặc áp dụng một giải thuật đơn giản là giải thuật Floyd được trình bày dưới đây.

Giả sử G có tập hợp các đỉnh là V = { v1,v2…vn} và có ma trận khoảng cách là W

Giải thuật Floyd xây dựng hai dãy các ma trận n*n là Wk và Pk (0 ≤ k ≤ n) như sau:.

2.2 Thuật toán:

* giải thuật Floyd1. W0 = Wk.

P0[i,j] = vj nếu W0[i,j] < ∞ (1 ≤ i , j ≤ n) Không xác định nếu W0[i,j] = ∞

2. Xây dựng Wk và Pk (1 ≤ k ≤ n) dựa vào Wk-1 và Pk-1 như sau:Với 1≤ i, j ≤ n. Xét bất đẳng thức

Wk-1[i ,j] > Wk-1[i, k] + Wk-1[k,j] (#)Nếu (#) đúng thì đặt

Wk[i,j] = Wk-1[i,k] + Wk-1[k,j]Pk[i,j] = Pk-1[i,k]

Nếu (#) sai thìWk[i,j] = Wk-1[i,j] Pk[i,j] = Pk-1[i,j]

* Định lýGiải thuật Floyd cho kết quả là các ma trận W* = Wn và P* = Pn.

Thì với 1 ≤ i , j ≤ n,. Con đường ngắn nhất đi từ vi đến vj… có chiều dài là W*[i,j];. Đỉnh đứng ngay sau đỉnh vi trên con đường ngắn nhất này là P*[i,j];

2.3. Chứng minh:

Gọi γk[i.j] là con đường ngắn nhất torng những đường nối đỉnh vi với đỉnh vj đi qua các đỉnh trung gian trong tập {v1,v2,….,vn}.

Ta chứng minh bằng quy nạp theo k mệnh đề sau:(i) Wk[i,j] = chiều dài của γk[i.j].(ii) Pk[i,j] = đỉnh đứng ngay sau vi trên con đường γk[i.j].

Trước hết mệnh đề hiển nhiên đúng với k = 0.Giả sử mệnh đề đúng với k – 1.Xét Wk[i,j]. Có hai trường hợp:a) Trong những đường chiều dài ngắn nhất nối vi với vj và đi qua các đỉnh

trung gian trong {v1,v2,…,vk}, có một đường γ sao cho Vk không thuộc

2

Page 3: LTDT Floyd

γ thì γ cũng là đường ngắn nhất nối vi với vj đi qua các đỉnh trung gian trong { v1,v2,…,vk-1}, nên theo gải thiết quy nạp,

Wk-1,j] = chiều dài γ ≤ Wk-1[i, k] + Wk-1[k,j].Do đó theo định nghĩa của Wk thì Wk[i, j = Wk-1[i,j].

b) Mọi đường chiều dài ngắn nhất nối vi với vj và đi qua các đỉnh trung gian trong {v1,v2,…,vk} đều chứa vk.

Gọi γ = vi…vk…vj là một đường ngắn nhất như thế thì vi…vk và vk…vj cũng là nhửng đường ngắn nhất đi qua các đỉnh trung gian trong {v1,v2,…,vk-1} và :

Wk-1[I,k] + Wk-1[k,j] = chiều dài (vi…vk) + chiều dài (vk…vj) = chiều dài (γ) < Wk-1[I,j].

Do đó theo định nghĩa của Wk thì:Wk[I,j] = Wk-1[I,k] + Wk-1[k,j].

2.4. Chú ý:a. giải thuật Floyd có thể áp dụng cho đồ thị vô hướng cũng như đồ thị có

hướng. ta chỉ cần thay mổi cạnh vô hướng uv bằng một cặp cạnh có hướng uv và vu với

c(uv) = c(vu) = c(uv).b. Đồi thị có hướng G là liên thông mạnh nếu và chỉ nếu mọi phần tử không

nằm trên đường chéo trong ma trận khoảng cách ngắn nhất W* đều hữu hạn.

c. Giải thuât: Floyd cũng có thể dùng để tìm quan hệ khả liên (reachhability relation) của một đồ thị có hướng G. chỉ cần đặt trọng số mỗi cạnh đều là một, khi đó ma trận W* tìm được sẽ cho ta biết có đường nối giữa hai đỉnh hay không.W*[I,j] < ∞ tương đương có đường nối từ vi đến vj.

d. Đặc biệt W*[I,j] < ∞ tương đương có chu trình trong G chứa vi.Như vậy ta cũng có thể kiểm tra xem đồ thị có hướngG có chu trình hay không bằng giải thuật Floyd.

2.5. Cài đặt:

Chương trình sử dụng ngôn ngữ VB

2.6. Một số giao diện và kết quả chạy chương trình:

3

Page 4: LTDT Floyd

4

Page 5: LTDT Floyd

5

Page 6: LTDT Floyd

6

Page 7: LTDT Floyd

7

Page 8: LTDT Floyd

3. Tài liệu tham khảo

Chu Đức Khánh , Lý thuyết đồ thị.

8