TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website: http://www.ispace.edu.vn MÔN HỌC: TOÁN ỨNG DỤNG Bài 1: CƠ SỞ LOGIC Bài 2: BÀI TOÁN ĐẾM VÀ BÀI TOÁN TỒN TẠI Bài 3: LÝ THUYẾT ĐỒ THỊ Bài 4: BIỂU
Trang 1TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
MÔN HỌC: TOÁN ỨNG DỤNG
Bài 1: CƠ SỞ LOGIC
Bài 2: BÀI TOÁN ĐẾM VÀ BÀI TOÁN TỒN TẠI
Bài 3: LÝ THUYẾT ĐỒ THỊ
Bài 4: BIỂU DIỄN ĐỒ THỊ VÀ CÁC THUẬT
TOÁN TÌM KIẾM
Bài 5: CÂY VÀ CÁC ỨNG DỤNG
Trang 2TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
Bài 4: BIỂU DIỄN ĐỒ THỊ
VÀ CÁC THUẬT TOÁN TÌM KIẾM
1 BIỂU DIỄN ĐỒ THỊ 1.1 Danh sách liền kề 1.2 Ma trận kề
1.3 Ma trận trọng số 1.4 Ma trận liên thuộc
2 BÀI TOÁN ĐƯỜNG ĐI NGẮN NHẤT 2.1 Giới thiệu bài toán
2.2 Thuật toán Dijkstra 2.3 Thuật toán Floyd
3 CÁC THUẬT TOÁN TÌM KIẾM 3.1 Giới thiệu
3.2 Duyệt đồ thị theo chiều sâu 3.3 Duyệt đồ thị theo chiều rộng
Trang 3TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
Trang 4TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
3,2 1,3,5 1,2,4 3,5,6 2,4,6 4,5
Trang 5TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
2,3
2 3 4,6
Trang 6TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
A G = (a ij ) , trong đó:
1, nếu (v i ,v j ) là một cạnh của G
aij = 0 ,nếu không có cạnh nối đỉnh v i với v j
Trang 7TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
2 3 4 5 6
1
3
6
4 2
5
Trang 8TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
2 3 4 5 6 5
a = k - tổng số cạnh nối hai đỉnh
Trang 9TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
2 3 4 5
Trang 10TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
- Khi chúng ta gán một giá trị số thực dương cho mỗi cạnh của đồ thị G thì chúng ta có đồ thị có trọng
số
- Chúng ta có thể xem đồ thị G bất kỳ là đồ thị có trọng số mà tất cả các cạnh có trọng số bằng 1.
Trang 11TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
1 Biểu diễn đồ thị
1.2 Ma trận trọng số
Trang 12TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
v1
v2
v6
v5 v3
v4 3
7
3
9
5 8 6
6
Trang 13TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
đường đi có trọng số nhỏ nhất trong các đường đi
từ u đến v.
d(u,v)=min(m(u,v))
Trang 14TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
Trang 15TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
v2 v3 v4 v5 v6
v1
v2
v6
v5 v3
v4 3
7
3
9
5 8 6
6
Trang 16TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
Trang 17TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
Trang 18TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
1 nếu cạnh e j nối với đỉnh v i
0 nếu cạnh e j không nối với đỉnh v i
m ij =
Trang 19TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
v2
v3
v4
v5
Trang 20TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2 Bài toán đường đi ngắn nhất
2.1 Giới thiệu bài toán
Cho đơn đồ thị liên thông, có trọng số dương G=(V,E)
Trang 21TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2.2 Thuật toán Dijkstra
Thuật toán tìm đường đi ngắn nhất từ đỉnh u đến mỗi đỉnh v
của đồ thị G, được nhà toán học người Hà Lan E Dijkstra
đề xuất vào năm 1959
Thuật toán thực hiện theo cách gán nhãn tại mỗi đỉnh
Thuật ngữ:
w(x,y) : trọng số dương của cạnh (x,y);
w(x,y) là ∞ (vô cùng lớn) nếu hai đỉnh không kề nhau.
d(v) : độ dài đường đi từ đỉnh xuất phát tới đỉnh v.
p(v) : đỉnh đứng ngay trước đỉnh v trên đường đi từ đỉnh
xuất phát đến đỉnh v.
Nhãn của đỉnh v : gồm cặp (d(v), p(v))
2 Bài toán đường đi ngắn nhất
Trang 22TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2.2 Thuật toán Dijkstra
Gán T = ø ; p(v) = NULL với mọi đỉnh v
Until (T=V)
2 Bài toán đường đi ngắn nhất
Trang 23TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2 Bài toán đường đi ngắn nhất
2.2 Thuật toán Dijkstra
6
2
Trang 24TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2 Bài toán đường đi ngắn nhất
2.2 Thuật toán Dijkstra
Ví dụ 1:
3 10
D B
D B
d(C) =∞ > d(A)+w(A,C)=0+2=2
Trang 25TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2 Bài toán đường đi ngắn nhất
2.2 Thuật toán Dijkstra
Ví dụ 1:
3 10
Trang 26TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2 Bài toán đường đi ngắn nhất
2.2 Thuật toán Dijkstra
Trang 27TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2 Bài toán đường đi ngắn nhất
2.2 Thuật toán Dijkstra
Ví dụ 1:
3 10
Trang 28TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2 Bài toán đường đi ngắn nhất
2.2 Thuật toán Dijkstra
Trang 29TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2 Bài toán đường đi ngắn nhất
2.2 Thuật toán Dijkstra
1/ Độ dài đường đi ngắn nhất từ A đến các đỉnh là
A 3/ Đường đi ngắn nhất từ A đến Z không đi qua C Vậy
đường đi ngắn nhất không đi qua tất cả các đỉnh của đồ thị
Trang 30TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
w v
5
2 Bài toán đường đi ngắn nhất
Trang 31TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
Until ( đỉnh đích chứa trong tập T)
2 Bài toán đường đi ngắn nhất
Trang 32TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2.2 Thuật toán Dijkstra
Ví dụ 2:
Tìm đường đi ngắn nhất giữa A và W trong đồ thị G
2 Bài toán đường đi ngắn nhất
0 ø (0.-) (,-) (,-) (,-) (,-) (,-)
1 a (0,-)* (2,a) (1,a) (,-) (5,a) (,-)
2 xa - (2,a) (1,a)* (2,x) (4,x) (,-)
3 yxa - (2,a) - (2,x)* (3,y) (4,y)
4 vyxa - (2,a)* - - (3,y) (4,y)
5 wvyxa - - - - (3,y)* (4,y)
6 Kết thúc vì đỉnh đến w chứa trong tập T
Trang 33TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2 Bài toán đường đi ngắn nhất
2.2 Thuật toán Dijkstra
Trang 34TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2 Bài toán đường đi ngắn nhất
2.2 Thuật toán Dijkstra
Trang 35TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
2 Bài toán đường đi ngắn nhất
2.2 Thuật toán Dijkstra
Trang 36TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
Việc tìm đường đi ngắn nhất dựa trên nguyên tắc sau:
" Nếu k là đỉnh nằm trên đường đi ngắn nhất từ i đến j thì đoạn đường từ i đến k và từ k đến j cũng ngắn nhất"
A k [i,j]=min(A k-1 [i,j], A k-1 [i,k]+A k-1 [k,j])
2 Bài toán đường đi ngắn nhất
Trang 37TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
Trang 38TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
P =
1
2
3 5
3 2
4
Trang 39TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
3
2 4
D1[2,3] = min( D0[2,3], D0[2,1]+D0[1,3] )
= min (, 7)
= 7 P[2,3]=1
D0 =
k = 1
Trang 40TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
P =
1
2
3 5
3
2 4
k = 2
3
Trang 41TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
1
2
3 5
Trang 42TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
3.1 Giới thiệu
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.
Hai cách duyệt đồ thị phổ biến được áp dụng:
1 Duyệt đồ thị theo chiều sâu (Depth First Search - DFS)
2 Duyệt đồ thị theo chiều rộng (Breadth First Search - BFS)
3 Duyệt đồ thị
Trang 43TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
3.2 Duyệt đồ thị theo chiều sâu
Xuất từ một đỉnh v bất kỳ của đồ thị G, chúng ta thực hiện như sau:
Bước 1: đánh dấu v đã được duyệt.
Bước 2: thực hiện đánh dấu đã duyệt với mỗi đỉnh w chưa duyệt kề với v,
Bước 3: làm lại bước 2 cho đến khi tất cả các đỉnh được duyệt.
3 Duyệt đồ thị
Trang 44TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
Trang 45TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
3.3 Duyệt đồ thị theo chiều rộng
Xuất từ một đỉnh v bất kỳ của đồ thị G, chúng ta thực hiện như sau:
Bước 1: đánh dấu đã duyệt cho một đỉnh v bất kỳ.
Bước 2: chọn đỉnh v đã được duyệt nhưng có đỉnh kề chưa được duyệt Việc chọn đỉnh v được xét ưu tiên cho các đỉnh được đánh dấu duyệt sớm.
Bước 3: thực hiện đánh dấu đã duyệt với tất cả các đỉnh w kề với v,
Bước 4: làm lại bước 2 cho đến khi tất cả các đỉnh được duyệt.
3 Duyệt đồ thị
Trang 46TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
http://www.ispace.edu.vn
3.3 Duyệt đồ thị theo chiều rộng
3 Duyệt đồ thị
Trang 47TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website:
Trang 48TRƯỜNG CAO ĐẲNG NGHỀ CNTT iSPACE Website: