You are on page 1of 65

Trường Đại học Công nghệ Thông tin, ĐHQG HCM

Môn học LÝ THUYẾT ĐỒ THỊ

- CÂY - CÂY BAO TRÙM (CÂY KHUNG) - CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT

NỘI DUNG • • • • Giới thiệu về cây. Cây bao trùm (cây khung). Cây bao trùm (cây khung) nhỏ nhất. Các giải thuật tìm cây bao trùm (cây khung) nhỏ nhất : - Giải thuật Prim. - Giải thuật Kruskal. • Các bài toán ứng dụng.

GIỚI THIỆU CÂY
• Định nghĩa: Cây còn gọi là cây tự do (free tree) là một đồ thị liên thông không có chu trình.

Ví dụ 3 cây T1, T2, T3

GIỚI THIỆU CÂY
Định nghĩa: Xét một cây có gốc T. • Mức (level) của một đỉnh v trong T là khoảng cách từ gốc đến v. • Mức lớn nhất của một đỉnh bất kỳ trong cây gọi là chiều cao của cây. • Nếu xy là cạnh của T thì ta gọi x là cha (parent) của y và y là con (child) của x. Hai đỉnh cùng cha gọi là anh em của nhau. Nếu có một đường (có hướng) đi từ bv đến w thì gọi là đỉnh trước của w, w gọi là đỉnh sau của v.

GIỚI THIỆU CÂY
Định nghĩa: Xét một cây có gốc T (tiếp theo) • Những đỉnh không có con gọi là lá (leaves), những đỉnh không là lá được gọi là đỉnh trong. • Một tập hợp gồm nhiều cây đôi một không có đỉnh chung gọi là rừng. • Mỗi đỉnh x của cây T là gốc một cây con của T gồm x và các đỉnh sau của nó. Như vậy, nếu hủy gốc khỏi cây T ta sẽ được một rừng.

GIỚI THIỆU CÂY

GIỚI THIỆU CÂY
• Định lý: Cho T là một cây thì giữa hai đỉnh bất kỳ của T luôn luôn tồn tại một và chỉ một đường trong T nối chúng. • Chứng minh: • Gọi x,y là 2 đỉnh trong cây T. Vì T liên thông nên ít nhất một đường trong cây T nối x và y. Giả sử có hai đường khác nhau cùng nối x và y: • P1=A0A1…An ; P2= B0B1…Bn trong đó A0=B0 =x và An=Bn=y.

GIỚI THIỆU CÂY
• Chứng minh: (tt) • Gọi i là chỉ số nhỏ nhất sao cho A1A(i+1) khác BiB(i+1). • Gọi j là chỉ số nhỏ nhất >=i sao cho có k>i để Bk= Aj. • Dễ thấy I, j, k tồn tại và AiAi+1…AjB(k-1)Bi là chu trình trong T, điều này là vô lý.

GIỚI THIỆU CÂY
• Định lý : Nếu cây có n đỉnh thì cây có n-1 cạnh. • Chứng minh: • Ta có thể giả sử là cây có gốc. Mỗi đỉnh khác gốc đều có bậc trong bằng 1, còn gốc có bậc trong bằng 0. Mà ta có tất cả n-1 đỉnh khác gốc, vậy có n-1 cạnh.

GIỚI THIỆU CÂY
Định lý (Daisy Chain Theorem) : Giả sử T là một đồ thị có n đỉnh thì 6 mệnh đề sau đây tương đương : • (1) : T là một cây. • (2) : T không có chu trình và có n-1 cạnh. • (3) T liên thông và nếu hủy bất kỳ một cạnh nào của nó cũng làm mất tính liên thông. • (4) Giữa 2 đỉnh bất kỳ của T luôn luôn tồn tại một đường duy nhất nối chúng. • (5) T không có chu trình và nếu thêm một cạnh mới nối 2 đỉnh bất kỳ của T thì sẽ tạo ra một chu trình. • (6) T liên thông và có n-1 cạnh.

CÂY m-Phân
Định nghĩa: Cho một cây có gốc T. • Nếu số con tối đa của một đỉnh trong T là m và có ít nhất một đỉnh có đúng m con thì T gọi là một cây m –phân. • Nếu mọi đỉnh trong của T đều có đúng m con thì T gọi là một cây m-phân đầy đủ.

Cây nhị phân

CÂY BAO TRÙM (CÂY KHUNG)
Định nghĩa: Cho một đồ thị vô hướng G. Một cây T được gọi là cây bao trùm (cây khung – spanning tree) của G nếu T là một đồ thị con chứa mọi đỉnh của G.

Ví dụ cây bao trùm (cây khung) của đồ thị

CÂY BAO TRÙM (CÂY KHUNG)
Định lý: Đồ thị G có cây bao trùm (cây khung) nếu và chỉ nếu đồ thị G liên thông. Chứng minh: Sách Lý thuyết đồ thị - Nguyễn Cam, Chu Đức Khánh trang 87.

CÂY BAO TRÙM (CÂY KHUNG)
Định lý: Cho một cây bao trùm T của một đồ thị G. - Thêm vào T một cạnh của G (không thuộc T), ta được một chu trình trong T. - Hủy một cạnh bất kỳ trên chu trình này khỏi T, ta nhận được một cây bao trùm mới của G Chứng minh: Hiển nhiên.

CÂY BAO TRÙM (CÂY KHUNG)
Tìm cây bao trùm (cây khung) của một đồ thị: - Dùng giải thuật duyệt đồ thị theo chiều sâu ( DFS - Depth First Search). - Cây bao trùm (cây khung) nhận được bằng phương pháp này gọi là cây bao trùm (cây khung) theo bề sâu ( Depth First Spanning Tree).

CÂY BAO TRÙM (CÂY KHUNG)
Tìm cây bao trùm (cây khung) của một đồ thị: - Dùng giải thuật duyệt đồ thị theo chiều rộng ( BFS Breadth First Search). - Cây bao trùm (cây khung) nhận được bằng phương pháp này gọi là cây bao trùm (cây khung) theo bề rộng (Breadth First Spanning Tree).

- Xem lại giải thuật DFS, BFS trong bài giảng 1.

CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Định nghĩa 1: Cho một đồ thị G. Giả sử mỗi cạnh của G được gán với một con số gọi là trọng số (weight) của cạnh ấy, khi đó đồ thị G được gọi là một đồ thị có trọng số (weighted graph).

CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Định nghĩa 2: Tổng trọng số tất cả các cạnh của một đường đi (chu trình, đồ thị con) gọi là trọng số của đường đi (chu trình, đồ thị con) ấy.

Đường đi từ đỉnh 1 đến 2 theo các cạnh : 13, 32 có trọng số 17 + 18 = 35.

CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Bài toán cây bao trùm (cây khung) có trọng số nhỏ nhất (minimal spanning tree : MST) là tìm cây bao trùm có trọng số nhỏ nhất của một đồ thị có trọng số liên thông.

GIẢI THUẬT TÌM CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Giải thuật 1: Giải thuật Prim Cho G là một đồ thị có trọng số liên thông. Giải thuật Prim xây dựng đồ thị con T của G, như sau: - B1: Chọn tùy ý một đỉnh của G đặt vào T. - B2: Nếu mọi đỉnh của G đều đã nằm trong T thì dừng. - B3: Nếu không, tìm một cạnh có trọng số nhỏ nhất nối một đỉnh trong T với một đỉnh ngoài T. Thêm cạnh này vào T. Quay lại bước 2.

GIẢI THUẬT TÌM CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Giải thuật 1: Giải thuật Prim (tt) - Chứng minh tính đúng đắn giải thuật Prim: Sách Lý thuyết đồ thị - Nguyễn Cam, Chu Đức Khánh trang 96,97. - Mã giả giải thuật và ví dụ: Sách Lý thuyết đồ thị Nguyễn Thanh Hùng chương 5.

GIẢI THUẬT TÌM CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Giải thuật 2: Giải thuật Kruskal Cho G=(V,E) là một đồ thị có trọng số liên thông. Giải thuật Kruskal xây dựng đồ thị con T của G, như sau: - B1: T = (V, Rỗng) - B2: Nếu T liên thông thì dừng. - B3: Nếu không, chọn một cạnh có trọng số nhỏ nhất không có trong T sao cho khi thêm cạnh này vào T thì không tạo ra chu trình. Đặt cạnh này vào T. Quay lại bước 2.

GIẢI THUẬT TÌM CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Giải thuật 2: Giải thuật Kruskal (tt) - Chứng minh tính đúng đắn giải thuật Prim: Sách Lý thuyết đồ thị - Nguyễn Cam, Chu Đức Khánh trang 98,99. - Mã giả giải thuật và ví dụ: Sách Lý thuyết đồ thị Nguyễn Thanh Hùng chương 5.

Bài toán xây dựng hệ thống đường sắt :

ỨNG DỤNG CỦA BÀI TÓAN CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT

- Giả sử ta muốn xây dựng một hệ thống đường sắt nối n thành phố sao cho hành khách có thể đi từ bất kỳ một thành phố nào đến bất kỳ một trong các thành phố còn lại. - Mặt khác trên quan điểm kinh tế đòi hỏi là chi phí xây dựng hệ thống đường phải nhỏ nhất. - Rõ ràng đồ thị mà đỉnh là các thành phố còn các cạnh là các tuyến đường sắt nối các thành phố tương ứng với phương án xây dựng tối ưu phải là cây. - Vì vây, bài toán đặt ra dẫn về bài toán tìm cây khung nhỏ nhất trên đồ thị đầy đủ n đỉnh, mỗi đỉnh tương ứng với một thành phố, với độ dài trên các các cạnh chính là chi phí xây dựng đường ray nối hai thành phố tương ứng.

ỨNG DỤNG CỦA BÀI TÓAN CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Bài toán nối mạng máy tính: - Cần nối mạng một hệ thống gồm n máy tính đánh số từ 1 đến n. Biết chi phí nối máy i với máy j là c[i,j], i,j = 1, 2, . . . ,n ( thông thường chi phí này phụ thuộc vào độ dài cáp nối cần sử dụng). - Hãy tìm cách nối mạng sao cho tổng chi phí nối mạng là nhỏ nhất.

ỨNG DỤNG CỦA BÀI TÓAN CÂY BAO TRÙM (CÂY KHUNG) NHỎ NHẤT
Bài toán xây dựng đường ống nước: - Có một trạm cấp nước và N điểm dân cư. - Hãy xây dựng chương trình thiết kế tuyến đường ống nước cung cấp đến mọi nhà sao cho tổng chiều dài đường ống phải dùng là ít nhất. - Giả sử rằng các đường ống chỉ được nối giữa 2 điểm dân cư hoặc giữa trạm cấp nước với điểm dân cư.

BÀI TOÁN ĐƯỜNG ĐI NGẮN NHẤT

NỘI DUNG
• • • • • Bài toán đường đi ngắn nhất Đường đi có trọng số bé nhất Thuật toán Dijsktra Đường đi trên đồ thị phi chu trình Đường đi ngắn nhất giữa các cặp đỉnh

BÀI TOÁN ĐƯỜNG ĐI NGẮN NHẤT
• Bài toán: Cho đồ thị G = (V, E) và hai đỉnh a, b. Tìm đường đi ngắn nhất (nếu có) đi từ đỉnh a đến đỉnh b trong đồ thị G. • Ý nghĩa thực tế: Bài toán giúp chúng ta chọn các hành trình tiết kiệm nhất (quãng đường, thời gian, chi phí ...) trong giao thông, lập lịch thi công công trình một cách tối ưu, xử lý trong truyền tin ...

ĐỒ THỊ CÓ TRỌNG SỐ
Định nghĩa 1: Đồ thị G được gọi là đồ thị có trọng số nếu trên mỗi cạnh (i, j) của đồ thị được gán một số nguyên không âm c(i,j). Nhãn c(i,j) trên cạnh (i, j) của đồ thị thường biểu diễn “chi phí” thực tế để đi qua cạnh này. Ký hiệu đồ thị có trọng số là (G, c).

ĐƯỜNG ĐI CÓ TRỌNG SỐ BÉ NHẤT
Độ dài của đường đi trong đồ thị có trọng số bằng tổng các trọng số của các cạnh trên đường đi đó.
-

- Độ dài đường đi có trọng số bé nhất đi từ đỉnh a đến đỉnh b được gọi là khoảng cách từ đỉnh a đến đỉnh b. - Nếu không có đường đi từ a đến b thì đặt khoảng cách bằng ∞.

ĐƯỜNG ĐI CÓ TRỌNG SỐ BÉ NHẤT (tiếp)
• Bài toán Cho đồ thị có trọng số (G, c) và hai đỉnh a, b thuộc G. Hãy tìm đường đi có trọng số bé nhất (nếu có) đi từ đỉnh a đến đỉnh b.

THUẬT TOÁN DIJKSTRA • Năm 1959, E. W. Dijkstra đưa ra một thuật toán rất
hiệu quả để giải bài toán đường đi ngắn nhất.

Thuật toán thực hiện việc gán và giảm giá trị của nhãn l(i) tại mỗi đỉnh i của đồ thị G như sau:

THUẬT TOÁN DIJKSTRA (tiếp)

Thuật toán 1. Với đỉnh xuất phát a, gán nhãn l(a) := 0. 2. Nếu có cạnh (i, j) mà đỉnh i đã được gán nhãn và đỉnh j chưa được gán nhãn hoặc đỉnh j đã được gán nhãn nhưng l(i) + c(i,j) < l(j) thì giảm nhãn: l(j) := l(i) + c(i,j). 3. Lặp lại bước 2 cho đến khi không gán hoặc giảm nhãn được nữa.

THUẬT TOÁN DIJKSTRA (tiếp)
Định lý : Tại mỗi đỉnh b giá trị nhãn l(b) cuối cùng (nếu có) chính là độ dài của đường đi ngắn nhất từ đỉnh a đến đỉnh b. Chứng minh: Sau khi đã thực hiện xong thuật toán trên, nếu nhãn l(b) xác định thì ta có đường đi từ đỉnh a tới đỉnh b.

THUẬT TOÁN DIJKSTRA (tiếp)
Khôi phục đường đi từ a đến b như sau: Xuất phát từ đỉnh b, tìm cạnh có đỉnh cuối là b và đỉnh đầu là i sao cho: l(i) + c(i,b) = l(b). Đỉnh i như thế chắc chắn phải tồn tại vì xảy ra đẳng thức ở lần gán hoặc giảm nhãn l(j) cuối cùng. Cứ tiếp tục như thế cho đến khi gặp đỉnh a.

THUẬT TOÁN DIJKSTRA (tiếp)
Giả sử ta nhận được dãy các cạnh: (a, a1) , (a1, a2) , ... , (ak-1, b) mà trên đó: l(a) + c(a,a1) = l(a1) l(a1) + c(a1,a2) = l(a2) .. . .. . . . .. .. . . . . . . .. . . l(ak-1) + c(ak-1,b) = l(b).

THUẬT TOÁN DIJKSTRA (tiếp)
Cộng từng vế và khử các giá trị chung ở cả hai vế ta có: c(a,a1) + c(a1,a2) + ... + c(ak-1 ,b) = l(b). Vậy giá trị nhãn l(b) chính là độ dài đường đi nói trên. Bất kỳ đường đi nào khác từ đỉnh a đến đỉnh b cũng có các hệ thức tương tự nhưng có dấu ≥. Vậy nhãn l(b) là độ dài của đường đi ngắn nhất.

VÍ DỤ
Xét đồ thị có trọng số sau đây:
1 0 1 1 2 3 1 3 2 Đồ thị có trọng số 2 5 2 1 1 4 5 3 1 3 1 5

a

b

Độ dài đường đi ngắn nhất từ đỉnh a đến đỉnh b là 5.

THUẬT TOÁN DIJKSTRA (tiếp)
Để đơn giản việc tính toán, ta xây dựng ma trận trọng số C : c(i,j) , nếu (i, j) ∈ E, C[i,j] = ∞ 0 , nếu (i, j) ∉ E, , nếu i = j.

THUẬT TOÁN DIJKSTRA (tiếp)
1 procedure DIJKSTRA(a) ; 2 begin 3 for j ∈ V do 4 begin L[j] := C[a, j] ; Truoc[j] := a end ; 5 T := V \ {a} ; 6 while T ≠ ∅ do 7 begin 8 chọn đỉnh i ∈ T mà L[i] = min {L[j] j ∈T end; 9 T := T \ {i} ;

THUẬT TOÁN DIJKSTRA (tiếp)
10 for j ∈ T do 11 if L[j] > L[i] + C[i, j] then 12 begin 13 L[j] := L[i] + C[i, j] ; 14 Truoc[j] := i ; 15 end 18 end 19 end ; Biến mảng Truoc dùng để khôi phục đường đi.

ĐƯỜNG ĐI TRÊN ĐỒ THỊ PHI CHU TRÌNH
Thuật toán: Dữ liệu: Biểu diễn mảng DK_V các danh sách kề của đồ thị định hướng phi chu trình G = (V, E) với tập đỉnh V = {v1, v2, ..., vn} đã được đánh số mà danh sách DK_V[vi] chứa các đỉnh nhận vi là đỉnh kề và ma trận trọng số C của đồ thị G. Kết quả: Mảng D các số nguyên với D[vi] chứa khoảng cách d(v1,vi) , i = 2, 3, ..., n.

ĐƯỜNG ĐI TRÊN ĐỒ THỊ PHI CHU TRÌNH (tiếp)
1 Begin 2 3 4 5 6 7 End. D[v1] := 0 ; for j := 2 to n do D[vj] := ∞ ; for j := 2 to n do for vi ∈ DK_V[vj] do D[vj] := min ( D[vj] , D[vj] + C[vi,vj] )

ĐƯỜNG ĐI TRÊN ĐỒ THỊ PHI CHU TRÌNH (tiếp)
• Tính đúng đắn của thuật toán suy từ chi tiết sau đây: - Tất cả các đỉnh trung gian trên đường đi ngắn nhất từ v1 tới vj có chỉ số nhỏ hơn j. - Mỗi cạnh (vi,vj) được xét trong dòng lệnh 5 đúng một lần. • Độ phức tạp của thuật toán là O(m).

ĐƯỜNG ĐI TRÊN ĐỒ THỊ PHI CHU TRÌNH (tiếp)
• Ta cũng có thể áp dụng thuật toán trên để tìm đường đi dài nhất từ đỉnh nguồn tới các đỉnh khác của đồ thị, hoặc tìm đường đi dài nhất trên đồ thị định hướng phi chu trình có trọng số.

VÍ DỤ
Tìm đường đi dài nhất trên đồ thị định hướng phi chu trình có trọng số dưới đây:
7 1 1 2 4 5 7 2 3 1 5 6 1 2 6 4 5 8 5 9

3

Đường đi dài nhất trên đồ thị phi chu trình có trọng số

ĐƯỜNG ĐI NGẮN NHẤT GIỮA CÁC CẶP ĐỈNH
Bài toán: Cho một đồ thị có trọng số (G, c). Hãy tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh. Bài toán này thường gặp trong việc xây dựng bảng khoảng cách giữa các thành phố, bảng giá cước vận chuyển giữa các nhà ga ...

ĐƯỜNG ĐI NGẮN NHẤT GIỮA CÁC CẶP ĐỈNH (tiếp)
Bài toán này có thể giải quyết bằng cách sử dụng thuật toán Dijkstra với mỗi đỉnh của đồ thị lần lượt là các đỉnh xuất phát. Ta có thể giải quyết bài toán trực tiếp bằng thuật toán Floyd.

ĐƯỜNG ĐI NGẮN NHẤT GIỮA CÁC CẶP ĐỈNH (tiếp)
Sử dụng ma trận Dn x n để tính độ dài đường đi ngắn nhất giữa tất cả các cặp đỉnh. 1) Bắt đầu gán D := C - ma trận trọng số. 2) Thực hiện n lần lặp trên D. Sau bước lặp thứ k, D[i,j] chứa độ dài đường đi ngắn nhất từ đỉnh i đến đỉnh j mà chỉ đi qua các đỉnh có chỉ số không vượt quá k: D(k)[i,j] := min ( D(k-1)[i,j] , D(k-1)[i,k] + D(k-1)[k,j] ) , với k = 1, 2, ... , n.

VÍ DỤ
Xét bản đồ giao thông sau đây:
8 a 3 b 4 2 c

Kết quả tính toán:
0 3 ∞ 8 0 2
D1

4 ∞ 0

0 3 ∞

8 0 2
D2

4 7 0

0 3 5

8 0 2
D3

4 7 0

0 3 5

6 0 2
D4

4 7 0

THUẬT TOÁN FLOYD
Thuật toán Floyd Dữ liệu: Ma trận trọng số C của đồ thị. Kết quả: Ma trận D cho biết khoảng cách của tất cả các cặp đỉnh.

THUẬT TOÁN FLOYD (tiếp)
1 BEGIN 2 for i := 1 to n do 3 for j := 1 to n do 4 begin D[i,j] := C[i,j] ; TRUOC[i,j] := 0 end ; 5 for k := 1 to n do 6 for i := 1 to n do 7 for j := 1 to n do 8 if D[i,k] + D[k,j] < D[i,j] then 9 begin 10 D[i,j] := D[i,k] + D[k,j] ; 11 TRUOC[i,j] := k 12 end 13 END .

THUẬT TOÁN FLOYD (tiếp)
• Khôi phục đường đi - Nếu TRUOC[i,j] = 0 thì đưòng đi ngắn nhất từ đỉnh i đến đỉnh j chính là cạnh (i, j). - Để in ra các đỉnh trung gian trên đường đi ngắn nhất từ đỉnh sau đây. i đến đỉnh j ta dùng thủ tục đệ quy

THUẬT TOÁN FLOYD (tiếp)
1 procedure Duong_di ( i, j ) ;

2 begin 3 k := TRUOC[i,j] ; 4 if k = 0 then Exit ; 5 Duong_di ( i, k ) ; 6 write( k ) ; 7 Duong_di ( k j ) 8 end ;

THUẬT TOÁN FLOYD (tiếp)
Chẳng hạn, ma trận TRUOC của ví dụ trên là:
0 0 2 3 0 0 0 1 0

Để xác định đường đi ngắn nhất từ đỉnh 1 đến đỉnh 2 ta lấy k = TRUOC[1,2] = 3. Vậy đường đi ngắn nhất là: < 1, 3, 2 >.

THUẬT TOÁN FORD BELLMAN
Thuât toán Ford-Bellman tìm đường đi ngắn nhất từ đỉnh s đến tất cả các đỉnh còn lại của đồ thị. Thuật toán làm việc trong trường hợp trọng số của các cung là tuỳ ý, nhưng giả thiết rằng trong đồ thị không có chu trình âm.

THUẬT TOÁN FORD BELLMAN (tiếp)
Đầu vào: Đồ thị có hướng G=(V,E) với n đỉnh. s thuộc V là đỉnh xuất phát. A[u,v] : ma trận trọng số. Giả thiết: Đồ thị không có chu trình âm. Đầu ra: Khoảng cách từ đỉnh s đến tất cả các đỉnh còn lại d[v], v thuộc V. Trước[v], v thuộc V, ghi nhận đỉnh đi trước v trong đường đi ngắn nhất từ s đến v.

THUẬT TOÁN FORD BELLMAN (tiếp)
B1 : Khởi tạo for v thuộc V do begin d[v]:=a[s,v]; Truoc[v]:=s; end; B2: Thuật toán d[s]:=0; for k:=1 to n-2 do for v thuộc V\{ s} do for u thuộc V do if d[v] > d[u] +a[u,v] then begin d[v]:=d[u]+a[u,v]; Truoc[v]:=u; end;

Lưu ý rằng chúng ta có thể chấm dứt vòng lặp theo k khi phát hiện trong quá trình thực hiện hai vòng lặp trong không có biến d[v] nào bị đổi giá trị.

Việc này có thể xảy ra đối với k<n-2, và điều đó làm tăng hiệu quả của thuật toán trong việc giải các bài toán thực tế.

THUẬT TOÁN NUMBERING
Thuật toán áp dụng trong tìm đường đi ngắn nhất trong đồ thị không có chu trình. Xem trong sách.

THUẬT TOÁN NUMBERING
Thuật toán áp dụng trong tìm đường đi ngắn nhất trong đồ thị không có chu trình. Xem trong sách.

BÀI TOÁN LUỒNG CỰC ĐẠI TRONG MẠNG

NỘI DUNG • • • • • Khái niệm về mạng Khái niệm về luồng trên mạng Khái niệm lát cắt Định lý Ford Fulkerson Thuật toán tìm luồng cực đại trên mạng.