Professional Documents
Culture Documents
-2-
Bài giảng
-3-
Phần 1: toán rời rạc 1
-4-
Liệt kê ra tất cả các phần tử của tập
Chỉ rỏ tính chất đặc trưng của mọi phần tử thuộc tập
1.1.3. Các phép toán về tập
Phép hợp
Hợp của 2 tập A và B kí hiệu: A B , là tập các phân tử hoặc
thuộc A hoặc thuộc B hoặc thuộc cả hai tập A và B
A B = { x/ x A hoặc x B}
A B
A B
Ui 1
Ai = A1 A2 … An
là tập các phần tử thuộc ít nhất 1 tập Ai (i = 1, 2, …, n).
Phép giao
Giao 2 tập A và B kí hiệu: A B, là tập các phần tử đồng thời thuộc vào
cả hai tập A và B.
A B = {x/ x A và x B}
A B
A B
Tổng quát: Giao của n tập A, A, …, A, kí hiệu
n
Ai = A1 A2 … An
i 1
Phép hiệu
Hiệu của tập A và B, ký hiệu: A\ B, là tập các phần tử thuộc A nhưng
không thuộc B.
A\B = { x A/ x B }
-5- A B
A\ B
Hiệu đối xứng của A và B, ký hiệu: A B, là tập các phần tử thuộc A hoặc
thuộc B nhưng không đồng thời thuộc cả hai tập A và B.
A B = {x A B / x A B}
A B
A B
Phép lấy phần bù
Xét tập A là một tập con của tập X: A X. phần bù của tập A trong tập X
ký hiệu: A , là tập các phần tử thuộc tập X nhưng không thuộc tập A.
A = {x X/ x A}.
Tập đặc biệt: tập không có phần tử nào gọi là tập rỗng, ký hiệu là .
Tập rỗng có 2 tính chất:
Tập rỗng là tập duy nhất
Tập rỗng được xem là tập con của bất kỳ tập nào, kể cả nó.
Ví dụ: Cho A = {0, 1, 2, 4, 5}; B = {0, 3, 5, 6}
Tìm tập A hợp B, A giao B, A trừ B, B trừ A, A hiệu đối xứng với B
-7-
R = {(0, 0), (1, 1), (2, 4), (3, 9)} A x B
- Viết dưới dạng chỉ ra đặc trưng của các cặp phần tử:
R { (a,b) / a 2 b, a �A, b �B}
-8-
R={(1,1),(1,3),(1,5),(2,2),(2,4),(2,6),(3,3),(3,5), (3,1),(4,4),
(4,6),(4,2),(5,5),(5,3),(5,1),(6,6),(6,4),(6,2)}
- Biểu diễn quan hệ R bằng cách dùng ma trận:
1 2 3 4 5 6
1 1 0 1 0 1 0
2 0 1 0 1 0 1
3 1 0 1 0 1 0
6 x6
M R = 4 0 1 0 1 0 1
5 1 0 1 0 1 0
6 0 1 0 1 0 1
-
Biểu diễn quan hệ R bằng cách dùng đồ thị:
1 3 2 4
6 5
Nhận xét:
- 10 -
1.3. CáC NGUYÊN Lý CƠ BảN
1.3.1. Nguyên lý cộng
Bài toán: Một công việc có thể thực hiện được trong k tình huống:
Trong tình huống 1: có n1 cách thực hiện công việc.
Trong tình huống 2: có n2 cách thực hiện công việc.
Trong tình huống k: có nk cách thực hiện công việc.
Mà không có cách nào ở tình huống nào giống với cách thực hiện công việc ở
tình huống khác. Hãy tính xem có bao nhiêu cách thực hiện công việc trong k
tình huống đã có?
Bài giải:
Gọi Ai là các cách thực hiện công việc trong tình huống thứ i (i = 1, 2, …, k).
Ta có Ai = ni.
Vì các cách trong các tình huống là khác nhau, nên
Ai A¹ với i j
Ta có:
A1 A2 ... Ak = A1 + A2 … + Ak
= n1 + n2 + … + nk
Vậy có n = n1 + n2 + … + nk cách thực hiện công việc.
Đó là nguyên lý cộng.
Ví dụ: Từ 3 số 1, 2, 3 có thể tạo ra bao nhiêu số mới với các số khác nhau?
Công việc tạo ra số mới có thể thực hiện trong 3 tình huống:
Số mới có 1 chữ số: có 3 cách tạo ra {1, 2, 3}.
Số mới có 2 chữ số: có 6 cách tạo ra {12, 13; 21, 23;
31, 32}.
Số mới có 3 chữ số: có 6 cách {123, 132; 213, 231;
312, 321}.
Mỗi cách tạo ra một số mới. Theo nguyên lí cộng có:
n = 3 + 6 + 6 = 15 số mới được tạo ra theo yêu cầu.
- 11 -
1.3.2. Nguyên lý nhân
Bài toán: Một công việc được hoàn thành sau k giai đoạn:
Giai đoạn 1: có n1 cách hoàn thành phần việc của giai đoạn 1.
Giai đoạn 2: có n2 cách hoàn thành phần việc của giai đoạn 2.
….
Giai đoạn k: có nk cách hoàn thành phần việc của giai đoạn k.
Hãy tính xem có bao nhiêu cách hoàn thành công việc?
Bài giải:
Gọi Ai là tập các cách hoàn thành phần việc ở giai đoạn thứ i (i = 1, 2, …, k).
Ta có Ai = ni.
Mỗi khi phần việc trong k giai đoạn được hoàn thành thì công việc mới được
hoàn thành. Như vậy, một cách hoàn thành công việc là một phần tử của tích đề
các A1 x A2 x … x Ak.
A1 xA2 x...xAk = A1 . A2 … . Ak
= n1 . n2 . … . nk
Vậy có n = n1 . n2 . … . nk cách hoàn thành công việc.
Đó là nguyên lý nhân.
Ví dụ: Để có được một khóa cữ nhân, nhà trường cần có 4 năm đào tạo.
Phòng giáo vụ có 5 phương án giúp sinh viên hoàn thành nhiệm vụ học tập của
năm thứ nhất, 3 phương án cho năm thứ hai, 2 năm cuối thì mỗi năm có 2
phương án.
Để có được bằng cữ nhân, mỗi sinh viên chỉ cần có một kế hoạch học tập
trong tối đa bao nhiêu kế hoạch?
Theo nguyên lý nhân thì có 4 x 3 x 2 x 2 = 48 kế hoạch
1.4. Nguyên lý chuồng bồ câu(nguyên lý Dirichlet)
1.4.1. Nguyên lý Dirichlet
Nếu đem xếp nhiều hơn n đối tượng vào n cái hộp, thì luôn tìm được một hộp
chứa không ít hơn 2 đối tượng
Nguyên lý Dirichlet tổng quát
- 12 -
Nếu đem xếp n đối tượng vào k cái hộp, thì luôn tìm được một hộp chứa không
ít hơn [n/k] đối tượng
1.4.2. Ví dụ
Trong một nhóm 367 người bao giờ cũng tìm được ít nhất hai
người có cùng ngày sinh
Trong 97 người bao giờ cũng tìm được ít nhất 9 người có cùng
tháng sinh
1.5. đạI Số Tổ HợP
1.5.1. Chỉnh hợp
Bài toán: có n phần tử khác nhau.
Chọn ra k phần tử: 0 k n
Sắp xếp k phần tử đã chọn theo thứ tự
Ta được 1 chỉnh hợp chập k của n phần tử đã cho. Có thể lập được bao nhiêu
chỉnh hợp chập k của n phần tử?
Lời giải:
Việc thành lập chỉnh hợp chập k của n phần tử có thể chia thành k giai đoạn:
Giai đoạn 1: chọn 1 phần tử làm phần tử thứ nhất.
Có n phần tử, do có n cách chọn.
Giai đoạn 2: Chọn 1 phần tử làm phần tử thứ hai.
Còn n -1 phần tử, do đó có n-1 cách chọn.
….
Giai đoạn k: Chọn 1 phần tử làm phần tử thứ k.
Còn n - (k-1) = n - k +1 phần tử, do đó có n - k + 1 cách chọn
Nếu gọi Ank là số chỉnh hợp chập k của n phần tử khác nhau đã cho thì theo
nguyên lý nhân, ta có:
Ank = n(n-1)…(n-k+1)
- 13 -
n!
Ank =
( n k )!
Kí hiệu: n! = n(n-1)…3.2.1
Ví dụ: Có bao nhiêu số hàng trăm gồm các số lẻ khác nhau?
Ta có 5 số lẻ khác nhau là 1, 3, 5, 7, 9. Số hàng trăm theo yêu cầu gồm 3 số
khác nhau có sắp xếp thứ tự chọn ra trong 5 số lẻ đó, chính là số chỉnh hợp chập
3 của 5 số lẻ khác nhau.
5!
Đó là A53 =
(5 3)!
= 5.4.3
= 60
Chú ý:
Trong thực tế, thường thì khi ta gặp phải phép chọn lặp như sau: phần tử
được chọn ở lần sau lại chính là phần tử đã được chọn ở lần trước, hoặc giống
hệt nó, tức là trong n phần tử đã cho có những nhóm phần tử giống nhau.
Chỉnh hợp được thành lập do phép chọn lặp gọi là chỉnh hợp lặp.
Số chỉnh hợp lặp chập k của n phần tử đã cho là:
Ank n k
Ví dụ: Tập X có n phần tử khác nhau thì có bao nhiêu tập con?
Ta liệt kê n phần tử của X thành một dãy.
X = {x1, x2, …, xi, …xn}
Đặt sự tương ứng dãy phần tử này với dãy n số nhị phân
b = (b1, b2, … bi ….bn)
Mỗi tập con A của X sẽ thiếu đi một số phần tử.
Thiếu phần tử xi nào thì bi tương ứng nhận bít 0
Phần tử xj nào có mặt trong A thì bj tương ứng nhận bít 1
Nghĩa là
0 nếu xk �A
bk = 1 nếu x k A
- 14 -
Như vậy, ứng với 1 tập con của X là 1 dãy n bits. Do đó số tập con của X là số
dãy n bits.
Vậy số tập con của tập có n phần tử là:
A2n 2n tập
1.5.2. Hoán vị
Định nghĩa: Một hoán vị của n phần tử khác nhau là một cách xếp thứ tự các
phần tử đó
Một hoán vị của n phần tử là một chỉnh hợp chập n của n phần tử (trường
hợp đặc biệt, k = n).
1.5.3. Tổ hợp
Ank n!
Do đó C nk =
Pk k!(n k )!
Chú ý: Trong phép chọn lặp: phần tử chọn sau giống hệt như phần tử đã chọn
trước.
Hoặc là trong n phần tử đã cho có những nhóm phần
tử giống hệt nhau.
- 16 -
Hoặc là chọn được phần tử nào rồi thì bỏ lại vào tập để
chọn cho lần sau.
Tổ hợp tạo ra trong phép chọn lặp gọi là tổ hợp lặp. Số tổ hợp lặp chập k của n
phần tử C nk là:
Cnk Ckn+n11 `
Ví dụ: Có 4 món ăn là A, B, C, D. Mỗi người được chọn 7 lần, mỗi lần chọn 1
món. Hỏi có bao nhiêu cách chọn 7 món trong 4 món? Số cách chọn 7 món
trong 4 món là C 47
10!
C47 C103 120 cách.
3!(10 3)!
- 17 -
Chương 2: Logic mệnh đề
Mệnh đề logic hay mệnh đề toán học là một câu khẳng định hoặc đúng hoặc sai,
và không thể vừa đúng, vừa sai.
Ví dụ:
P: “20 chia hết cho 4”
Q: “ 8 là số nguyên tố”
Chú ý: Mệnh đề logic là một câu, nhưng không phải câu nào cũng là mệnh đề
logic.
Chẳng hạn:
x+4=5
Mấy giờ rồi?
Học toán hay lắm
s đ
s đ
Ví dụ:
P: “Mặt trời quay”
Thì P là:
Không phải mặt trời quay
Nói rằng mặt trời quay là sai
Mặt trời không quay.
- 18 -
2.1.2.2. Phép hội
Cho 2 mệnh đề P và Q
Phép hội của P và Q cho ta mệnh đề P ^ Q, đọc là “P hội Q”, là mệnh đề có giá
trị chân lý như sau:
P Q P ^ Q
đ đ đ
đ s s
s đ s
s s s
P Q P Q
đ đ đ
đ s đ
s đ đ
s s s
- 19 -
Phép cộng (phép tuyển loại)
Cho 2 mệnh đề logic P và Q. Phép cộng P với Q, cho ta mệnh đề P Q đọc
là “P cộng Q”, là mệnh đề có giá trị chân lý như sau:
P Q P Q P Q
đ đ s đ
đ s đ đ
s đ đ đ
s s s s
P Q = s khi P = Q
Chú ý: Trong ngôn ngữ hàng ngày, mệnh đề P Q và P Q có phát biểu giống
nhau: cùng dùng liên từ hoặc, chúng có chỗ khác nhau:
Xét 2 mệnh đề sau:
P: “Công việc này cần người giỏi tiếng Anh hoặc tiếng Pháp”.
Q: “Bạn An sinh ra ở Hà Nội hoặc ở Bắc Ninh”.
ở mệnh đề P ta hiểu là: công việc cần người giỏi tiếng Anh cũng được, người
giỏi tiếng Pháp cũng được và người giỏi 2 thứ tiếng đó cũng được.
ở mệnh đề Q ta hiểu là: Bạn An sinh ra hoặc ở Hà Nội hoặc ở Bắc Ninh. Nhưng
không thể vừa ở Hà Nội, vừa ở Bắc Ninh.
Mệnh đề P là mệnh đề tuyển : còn gọi là tuyển lỏng.
Mệnh đề Q là mệnh đề cộng : còn gọi là tuyển loại hay tuyển chặt.
Như vậy: P Q: “P hoặc Q và có thể cả P và Q”
P Q: “P hoặc Q nhưng không thể cả P và Q”
Hay:
P Q: “P hoặc Q”
P Q: “ hoặc P, hoặc Q”
- 20 -
2.1.2.4. Phép kéo theo
Phép kéo theo cho ta mệnh đề: P Q đọc là: “P kéo theo Q”. có giá trị chân lý
như sau:
P Q P Q
đ đ đ
đ s s
s đ đ
s s đ
Nhận xét: Khi P = s thì dù Q nhận giá trị gì, P Q cũng đúng.
Chú ý:
Mệnh đề P Q thường hay gặp trong 4 phát biểu sau:
Nếu P thì Q.
P chỉ khi Q
P là đủ để Q
Q là cần để P.
Ví dụ 1: P: “2 < 3”
Q: “4 < 9”
P Q: “Nếu 2 < 3 thì 4 < 9”. Mệnh đề đúng.
Ví dụ 2: P: “2 < 3”
Q: “Trái đất đứng yên”.
P Q: “Nếu 2 < 3 thì trái đất đứng yên”. Mệnh đề sai.
Những mệnh đề liên quan đến mệnh đề kéo theo
Một mệnh đề kéo theo P Q
có 3 mệnh đề liên quan:
- Q P là mệnh đề đảo của P Q
- Q P là mệnh đề phản đảo của P Q
- P Q là mệnh đề phản của P Q
- 21 -
2.1.2.5. Phép tương đương
Cho 2 mệnh đề logic P và Q.
Phép tương đương cho ta mệnh đề P Q, đọc là “P tương đương Q”. Có giá trị
chân lí như sau:
P Q P Q
đ đ đ
đ s s
s đ s
s s đ
Chú ý: Trong ngôn ngữ hàng ngày, mệnh đề P Q thường được phát biểu như
sau:
“P khi và chỉ khi Q”
“Điều kiện cần và đủ để có P là có Q”
“Có P thì có Q và ngược lại”
Những mệnh đề tương đương với mệnh đề tương đương
Định lí:
P Q (P Q) (Q P) (1)
(P Q) (P Q) (2)
2.2. Hàm mệnh đề
Từ các mệnh đề đơn giản, riêng lẽ P, Q, … nhờ các phép toán logic liên kết lại,
ta được một biểu thức của các mệnh đề. Biểu thức đó cũng có giá trị logic, ứng
với giá trị logic của mệnh đề logic tham gia vào biểu thức. Nếu gọi các mệnh đề
đơn giản tham gia vào biểu thức là biến mệnh đề thì biểu thức là một hàm mệnh
đề.
Cả biến mệnh đề và hàm mệnh đề đều chỉ lấy giá trị ttrong tập Boole
B = {đ, s} hay {1, 0}
Một hàm mệnh đề có thể cho bằng hai cách:
Cho bằng một biểu thức F(P, Q, …).
Cho bằng bảng giá trị chân lý (bảng chân trị) của nó.
- 22 -
Ví dụ: Cho 2 hàm bằng công thức
F1(P, Q) = P Q
Ta có bảng chân trị của 2 hàm:
P Q P F1 = P Q
đ đ s đ
đ s s s
s đ đ đ
s s đ đ
2 công thức mệnh đề F(P, Q, …) và E(P, Q, …) được gọi là tương đương nếu
chúng có cùng một bảng giá trị chân lí.
- 23 -
PP=P
PP=P
- Phần tử trung hòa:
P đ =P
P s = P
- Luật thống trị
Ps =s
P đ =đ
- Luật phần tử bù
P P =s
P P =đ
- Luật De Morgan
PQ =P Q
P Q = P Q
Bài toán thuận: Cho hàm bằng biểu thức. Tìm chân trị của hàm
Bài toán ngược: Cho bảng chân trị của hàm. Tìm biểu thức của hàm.
2.4.1. Hàm 1 biến
Đối với hàm 1 biến, bảng chân trị chỉ có thể là 4 trường hợp sau đây:
P F1 F2 F3 F4
đ đ s đ s
s s đ đ s
P = đ thì F1 = đ
P = s thì F1 = s F1(P) = P.
P = đ thì F2 = s
P = s thì F2 = đ F2(P) = P .
- 24 -
F3 là hằng đúng: F3(P) = P P
F4 là hằng sai.: F4(P) = P P .
1.4.2. Hàm 2 biến
Với mỗi biến mệnh đề chỉ có 2 giá trị logic: đ hoặc s. Với 1 cặp 2 biến mệnh đề
chỉ có 4 cặp giá trị:
P=đ P=đ P=s P=s
Q=đ Q=s Q=đ Q=s
Với hàm F của 2 biến mệnh đề P và Q: F(P, Q) thì có 16 trường hợp:
1 trường hợp để F là hằng sai.
4 trường hợp để F có 1 giá trị đúng, 3 giá trị sai
6 trường hợp để F có 2 giá trị đúng, 2 giá trị sai
4 trường hợp để F có 3 giá trị đúng, 1 giá trị sai
1 trường hợp để F là hằng đúng.
- Trường hợp F(P, Q) có 1 giá trị đúng, 3 giá trị sai
P Q F1 F2 F3 F4
đ đ đ s s s
đ s s đ s s
s đ s s đ s
s s s s s đ
Giá trị đ xảy ra ít, phép nhận ít gía trị đ: đ đ = đ
Ta có:
F1(P, Q) = P Q
F2(P,Q) = P Q
F3(P,Q) = P Q
F4(P, Q ) = P Q
- Trường hợp F(P, Q) có 2 giá trị đúng, 2 giá trị sai
a. Tìm F(P, Q) theo 2 giá trị đúng
Phép hội nhận giá trị đ ít, khi đ đ.
Với 2 biến P và Q có 4 hội cơ bản:
- 25 -
P Q; P Q ; P Q và P Q
Ta xem F = đ ứng với 2 hội nào, rồi tuyển 2 hội đó ta được biểu thức của F.
b. Tìm F(P, Q) theo 2 giá trị sai
Phép tuyển nhận giá trị s ít, khi s s.
Với 2 biến P và Q có 4 tuyển cơ bản:
P Q, P Q , P Q và P Q
Ta xem F = s ứng với 2 tuyển nào, rồi hội 2 tuyển đó ta được biểu thức của F.
Ví dụ 1: Tìm biểu thức của hàm 2 biến F(P, Q), biết rằng:
F(s, đ) = F(s, s) = đ (1)
F(đ, đ) = F(đ, s) = s (2)
Theo giả thiết (1):
F(s, đ) = đ. Ta có hội : P Q
F(s, s) = đ. Ta có hội: P Q
Vậy F(P, Q) = ( P Q) ( P Q )
Ví dụ 2: Tìm biểu thức của hàm 2 biến mệnh đề F(P, Q) biết rằng F = s khi và
chỉ khi P và Q cùng giá trị.
F(P, Q) = (P Q) ( P Q )
- 26 -
Chương 3: Đại số Boole
3.1. Hàm Boole
Mọi biến x lấy giá trị trong tập Boole B = {1, 0} được gọi là biến Boole.
Hàm của các biến Boole mà cũng lấy giá trị trong tập Boole được gọi là hàm boole.
Hàm của n biến boole: f(x1, x2, …, xn)
Có tập xác định: {(x1, x2, …, xn) | xi B} Bn (i = 1, 2, …, n) được gọi là
hàm boole n biến.
Chú ý: Các biến mệnh đề chính là các biến boole. Hàm mệnh đề chính là hàm
boole.
Có 2 xác định hàm boole:
+ Cho hàm bằng bảng chân trị
+ Cho hàm bằng công thức.
1 0
0 1
- 27 -
3.2.3. Phép tuyển
Tuyển của 2 hàm boole f(x1, x2, …, xn) và g(x1, x2, …, xn) là hàm boole.
Kí hiệu là: f g ( x1 , x 2 ,..., x n )
nhận giá trị như sau:
f(x1, x2, …, xn) g(x1, x2, …, xn) f(x1, x2, …, xn) g(x1, x2, …, xn)
1 1 1
1 0 1
0 1 1
0 0 0
Ví dụ 1: Tìm biểu thức của hàm 2 biến boole có bảng giá trị như sau:
1 khi x = 1, y = 0
F(x, y) = 0 trong các trường hợp còn lại
- 28 -
3.3. Định nghĩa đại số Boole
Một tập các biến boole x, y, z, … cùng với 3 phép toán: phủ định, hội, tuyển
thỏa các tính chất sau:
3.3.1.Tính giao hoán:
a. x y y x
b. x y y x
3.3.2. Tính kết hợp:
a. x ( y z ) ( x y ) z
b. x ( y z ) ( x y ) z
3.3.3. Tính phân phối:
a. x ( y z ) ( x y ) ( x z )
b. x ( y z ) ( x y ) ( x z )
3.3.4. x 1 x ; x x 0
x 0 x ; x x 1.
Như vậy, tập các mệnh đề logic, với 3 phép tính phủ định, hội, tuyển thỏa mãn 4
tính chất trên là một đại số boole.
x1
Các biến logic x1, x2, …, xn đưa vào thiết bị, được gọi là Input. Thiết bị
sẽ xử lí rồi đưa ra kết quả f(x1, x2, …, xn), kết quả được gọi là Output.
Một thiết bị như vậy được gọi là mạch logic. Có 3 mạch đơn giản nhất làm cơ
sở, thực hiện 3 phép toán: Phủ định, hội và tuyển, gọi là 3 cổng logic, sau đây:
x = 101101 x = 010010
- 29 -
3.4.2. Cỗng AND (và)
Thực hiện phép hội:
x x y
y
x = 1100101
y = 1010111 x y = 1000101
x Ta có F(x, y, z) = xyz xy z x yz
y F(x, y, z)
Z- 30 -
V
x
y
F
x
y
z
- 31 -
xy, x y, x y và x y .
Tuyển của 2 hội trong 4 hội đó, thì có 6 tuyển nhưng chỉ có 2 hội nào có:
-
Một biến chung
-
Biến kia ở hội này thì phủ định của nó ở hội kia – biến này gọi là
tục biến.
Thì mới rút gọn được còn một biến: biến chung.
Chẳng hạn:
xy x y x( y y ) x . Biến y là tục biến
Tuyển của 2 trong 8 hội này có 28 tuyển, nhưng chỉ 2 hội nào có:
-
2 biến chung
-
Còn biến thứ 3 ở hội này thì phủ định của nó ở hội kia – tục biến,
thì mới rút gọn được còn hội của 2 biến chung.
Chẳng hạn:
xyz xy z xy ( z z ) = xy: z là tục biến.
Đó chính là ý tưởng của Karnaugh trong việc tối thiểu hóa các hàm boole để cải
tiến mạch logic thực hiện các hàm logic.
Ví dụ: Cho hàm F(x, y) = x y xy x y
1. Thiết kế mạch ban đầu thực hiện F.
2. Cải tiến thiết kế đó.
x F
y
- 32 -
Đây là mạch ban đầu.
Cải tiến:
Rút gọn F.
Vì rằng x y ( x y ) ( x y ) nên
F = x y xy x y
= x y xy xy x y
= ( x y xy ) ( xy x y )
= ( x x) y x( y y )
= x y
Chỉ còn lại cổng OR: x
F=
y
- 33 -
Chương 4. Suy diễn và chứng minh
Dòng suy luận đó được xem đúng tức là hợp lý, đúng luật nếu
( P1 P2 ...Pn ) Q là hằng đúng
Ví dụ: Kiểm tra xem: dòng suy luận [(P Q) P] Q có đúng không?
Ta lập luận giá trị chân lý:
Dòng suy diễn là hằng đúng. Vậy suy diễn như trên là hợp lý, là đúng, là
đúng luật.
- 34 -
Ví dụ: Làm lại ví dụ trên bằng cách thứ 2.
[(P Q) P] Q [( P Q) P] Q
= [( P P) (Q P)] Q
= [s (P Q)] Q
= (P Q) Q
= PQ Q
= P Q Q
= P ( Q Q)
= P đ
= đ (hằng đúng)
Vậy dòng suy luận trên là hợp lí!
thuẫn (thể hiện bằng sự vô lí hoặc trái với giả thiết đã cho) Từ đó để tránh
mâu thuẫn thì P Q .
- 35 -
4.2.1. Chứng minh trực tiếp
Xuất phát từ giả thiết, dùng các luật suy diễn, các định lý đã có…..
đi dần đến kết luận.
Đây là cách chứng minh rất hay dùng vì cách tư duy của nó rất tự nhiên.
Chứng minh trực tiếp, nên chú ý đến các câu hỏi thường đặt ra:
1. Từ giả thiết đã có thì
-
Dùng luật suy diễn nào?
-
Dùng định lý nào là thích hợp?
-
Dùng kết quả đã có nào?
2. Dùng những cái đã có ấy có khẳ năng trực tiếp dẫn đến kết quả mong
muốn hay không?
3. ở một bước suy luận nào đó, có thể có nhiều cách giải quyết vấn đề. Thế
thì ta chọn cách giải quyết nào?
4. Nhưng nếu gặp bế tắc, thì tại sao?
-
Phải chăng bài tóan không có lời giải?
-
Hay là phải rẽ theo hướng khác?
-
Trình độ của ta còn bị hạn chế chăng?
-
…
Ví dụ: Các mệnh đề sau đây là đúng:
(1) P R
(2) R S
(3) T S
(4) T U
(5) U
Chứng minh rằng P sai!
Từ (1) và (2), theo tam đoạn luận thì P S (6)
Từ (3): T S = đ suy ra: S T S T : S T (7)
Từ (6) và (7) suy ra: P T (8)
Từ (4) T U = đ suy ra: T U (9)
- 36 -
Từ (8) và (9) suy ra: P U (10)
Theo qui tắc Modus Tollens thì:
[( P U ) U ] P
Ta xem điều cần khẳng định xảy ra trong tất cả các trường hợp rồi chứng minh
rằng trong trường hợp nào, khẳng định nêu ra cũng đúng.
Tức là:
(P1 Q) (P2 Q) … (Pn Q)] (P1 P2 … Pn) Q
Ví dụ: Chứng minh rằng n3 + 2n chia hết cho 3 với mọi n N.
Có vô số n N do đó có vô số trường hợp. Nhưng vì n 3 + 2n = n(n2 + 2) nên
chỉ cần chứng minh ít nhất một thừa số chia hết cho 3 là được.
n chia hết cho 3 xảy ra 1 trong 3 trường hợp:
- Nếu số dư r = 0 tức là n chia hết cho 3 thì n3 + 2n 3.
- Nếu số dư r = 1 thì n = 3k + 1 với k N. khi đó:
n3 + 2n = n(n2 + 2)
= (3k + 1) [(3k + 1)2 + 2]
= (3k +1) [9k2 + 6k +3]
= (3k+ 1).3.(3k2 + 2k + 1) chia hết cho 3
Vậy n3 + 2n 3 với "n N
- 37 -
m
để 2 (mệnh đề Q)
n
- 38 -
P R =đ mà R Q = đ Q sai.
Vậy: Dòng suy luận đã nêu là không đúng.
- 39 -
Bước 1: Kiểm chứng sự đúng đắn của điều khẳng định P(n) tại giá trị n 0
hoặc 1 số giá trị kế tiếp n0, n0 +1, …
Bước 2: Chứng minh sự đúng đắn của 1 mệnh đề kéo theo
Chứng minh sự đúng đắn của phương pháp này.
Phản chứng: Gọi A = { n > n0 P(n) sai}.
Giả sử A thì A có phần tử nhỏ nhất a.
Vì a A a > n0 . với a - 1 > n0 thì P(a-1) sai
a -1 A a < a -1. vô lí
mà a nhỏ nhất
Vậy A = tức là P(x) đúng với n n0.
Ví dụ 1:
Dãy {xn} được cho như sau:
x0 = 0
x1 = 1
….
xn = 3xn-1 - 2xn-2 với n 2
Chứng minh rằng: xn = 2n - 1 với mọi n
Bước 1: Kiểm chứng:
n = 0 x0 = 20 -1 công thức đúng với n = 0
0
n = 1 x1 = 21 - 1 công thức đúng với n = 1
1
Bước 2:
Giả sử công thức đúng với k: x k = 2k -1, ta chứng minh công thức cũng
đúng với k +1.
Quả vậy: xk+1 = 3xk - 2xk-1
= 3(2k - 1) - 2(xk-1 -1)
= 2.2k - 1
= 2k+1 -1
Vậy xn = 2n -1 với mọi n N*.
- 40 -
Ví dụ 2: Chứng minh rằng với mọi n N thì
1
12 + 22 + … + n2 = n(n+1)(2n+1)
6
r - r = 0 r = r
- 41 -
- Chứng minh có tồn tại bộ ( q, r).
Gọi P(a): “Tồn tại bộ (q, r) thỏa mãn (1) và (2)”.
Bước kiểm chứng:
a = 0 0 = b.0 + 0, bộ (0, 0) thỏa mãn (1) và (2)
P(a) đúng với a = 0.
a + 1 = b( q + 1) + r
- 42 -
PHẦN 2: LÝ THUYẾT ĐỒ THỊ
Chương 1: Đồ thị hữu hạn
1.1. Khái niệm
1.1.1. Định nghĩa
Đồ thị được xác định bằng 2 yếu tố:
Tập các đỉnh V không trống.
Tập các cạnh E nối các đỉnh với nhau.
Ký hiệu: G(V, E)
- Cạnh nối 2 đỉnh u và v của V được ký hiệu là (u, v) V x V hay uv.
Nếu có cạnh uv nối đỉnh u với v thì u và v gọi là 2 đỉnh kề nhau.
Đặc biệt, cạnh nối một đỉnh với chính nó gọi là khuyên.
- Cạnh uv nối 2 đỉnh u và v nhưng không phân biệt thứ tự, cạnh uv nối u với v
đồng thời cũng nối v với u, thể hiện mối quan hệ 2 chiều. Đồ thị với tập cạnh
như thế gọi là đồ thị vô hướng.
u v
uu
r
- Cạnh uv có kể đến thứ tự của đỉnh, nghĩa là nối u với v, có đường đi từ u đến
v, nhưng không nối v với u, không có đường đi ngược lại, thể hiện mối quan hệ
uu
r
một chiều. Khi đó, thay cạnh uv bằng cung uv . Đồ thị có tập cung như thế gọi
là đồ thị có hướng.
u v
Những cặp nối cùng một cặp đỉnh gọi là các cạnh song song.
u v
- 43 -
Đồ thị có khuyên hoặc là có cạnh song song gọi là đa đồ thị.
1.1.2. Biểu diễn đồ thị
a. Cách liệt kê.
Ta liệt kê tập đỉnh V và tập cạnh E.
b. Cách biểu diễn hình học:
-
Mỗi đỉnh biểu diễn bằng một điểm
-
Mỗi cạnh biểu diễn bằng một vạch (thẳng hay cong) nối 2
đỉnh.
Ví dụ 1: Biểu diễn hình học đồ thị cho theo cách liệt kê như sau:
V = {a, b, c, d, e}; E = {ab, ac, ad, ae, bd, cd, ce}
a a
c e
b e
b d
d c
Hai cách này và nhiều cách nữa cũng là biểu diễn hình học của G(V, E).
Ví dụ 2: Biểu diễn hình học đồ thị G(V, E) với
V = {x, y, u, v}; E = {xy, yy, ux, uv, vu}
c. Cách dùng
u ma trận: y v
u x
Một đồ thị G(V, E) được biểu diễn bằng ma trận: M=[ i j ] với
y
i j = 1 nếu có cạnh ui vj
Ví dụ: Lấy lại ví dụ 1 ở trên, đồ thị G được biểu diễn bằng ma trận sau:
- 44 -
a b c d e
a 0 1 1 1 1
b 1 0 0 1 0
c 1 0 0 1 1
d 1 1 1 0 0
e 1 0 1 0 0
Chú ý: Với đồ thị có hướng việc biễu diễn cũng tương tự.
1.1.3. Bậc của đỉnh
Đối với đồ thị vô hướng thì: bậc của một đỉnh là số cạnh đi qua đỉnh
đó
Đối với đồ thị có hướng thì: Cung uv đi ra từ đỉnh gốc u, đi vào đỉnh
ngọn v
Đỉnh u có n cung đi ra: u có bậc ra là n
có m cung đi vào: u có bậc vào là m
Bậc của một đỉnh trongđồ thị có hướng là tổng số bậc vào và
bậc ra.
Đỉnh có bậc 0 gọi là đỉnh cô lập
Ví dụ: Đỉnh Bậc
b
a 3
b 2
a c
c 2
d 1
F
d e e 0
a b
Đỉnh Bậc ra Bậc vào Bậc
ea 3 2 5
b 1 1 2
c
- 45 -
d
c 2 2 4
d 1 1 2
e 0 1 1
Định lý:
Đối với mọi đồ thị vô hướng thì tổng số bậc của các đỉnh là một số chẵn
(bằng hai lần số cạnh).
Đối với mọi đồ thị vô hướng thì số đỉnh bậc lẽ là một số chẵn.
1.1.4. Đồ thị đẳng cấu
Hai đồ thị G và G được gọi là đẳng cấu nếu có sự tương ứng 1-1 giữa
Hai tập đỉnh giữa G và G
Hai tập cạnh giữa G và G
Hai đồ thị đẳng cấu được xem là như nhau
Ví dụ: Xét hai đồ thị sau:
u
a
b z
v
c e
x G y
- 46 -
Có cùng số đỉnh: V V
Có cùng số cạnh: E E
Hai đỉnh tương ứng cùng bâc
Xét đồ thị G(V, E). Lấy tập con V V tập con E E . Ta được đồ thị
G (V , E ) gọi là đồ thị con của G(V, E).
Ví dụ: a d
F F
d a
a F
e
b
G F F
e
G1
b c
b c
d G2 a d
a a
b b c
b c c e
G5
G3 G4
1.1.6. Đường đi
Trong đồ thị G(V, E), một dãy cạnh liên tiếp nối đỉnh u với đỉnh v:
u u1 u2 ……… un v gọi là đường đi từ u đến v.
u gọi là đỉnh đầu của đường đi
v gọi là đỉnh cuối của đường đi.
Khi không cần chỉ ra các đỉnh trung gian, đường đi từ u đến v. Kí hiệu là uv .
Đường đi qua n cạnh: đường đi có độ dài n.
Đường đi không lặp lại cạnh nào gọi là đường đi đơn giản.
- 47 -
Đường đi không lặp lại đỉnh nào gọi là đường đi sơ cấp.
Một đường đi sơ cấp là đơn giản nhưng. Một đường đơn giản có thể không sơ
cấp. u1 u2 v
u
u3
Trên hình vẽ: u4
Đường đi u u1 u2 u3 u4 u2 v là đơn giản nhưng không sơ cấp, độ dài 6.
Đường đi u u1u2v là đường đi sơ cấp và là đường đi đơn giản, độ dài 3.
Đặc biệt: Đường đi mà:
Điểm cuối trùng lại điểm đầu.
Qua ít nhất 3 cạnh gọi là một chu trình.
Khuyên không phải là một chu trình.
Chu trình đơn giản không lặp lại cạnh nào.
Chu trình sơ cấp không lặp lại đỉnh nào.
Ví dụ: Xét đồ thị.
u z
v
y
b c e h
h
- Bộ phận liên thông chứa a là Ga(Va, Ea)
với Va = { a, b, c, d}
Ea = {ab, ac,bc, cd}
-
Bộ phận liên thông chứa e là Ge({e}, )
-
Bộ phận liên thông của g là Gg({g, h}, {gh}) = Gh({h, g},
{hg}).
Định lí: Một đồ thị là liên thông khi và chỉ khi nó chứa 1 bộ phận liên thông duy
nhất
- 49 -
1.1.8. Một số đồ thị đặc biệt
a. Đồ thị đều:
Đồ thị đều là đồ thị có mọi đỉnh đều cùng bậc.
Nếu mọi đỉnh đều có bậc k thì gọi là đồ thị k - đều.
Ví dụ:
F F
b. Đồ thị đầy đủ: Đồ thị đầy đủ là đồ thị có mọi đỉnh đều kề nhau.
Đồ thị đầy đủ có p đỉnh được kí hiệu là Kp.
p ( p 1)
Chú ý: Kp là đồ thị (k-1) - đều, có cạnh
2
Ví dụ:
K2 K3 K4
K5
c. Đồ thị 2 phe:
Đồ thị G(V, E) được gọi là đồ thị 2 phe nếu tách được tập đỉnh V thành 2 tập rời
nhau V1 và V2 sao cho mỗi cạnh của G đều nối 1 đỉnh của V1 với 1 đỉnh của V2
Ví dụ:
x V1
u y
V1
V1 V2
- 50 - V2 x
z v y z u v
đồ thị 2 phe, đẳng cấp
Đồ thị 2 phe đầy đủ là đồ thị 2 phe mà mỗi đỉnh của V 1 đều kề với mọi đỉnh của
V2 (khi đó, mỗi đỉnh của V2 đều kề với mọi đỉnh của V1)
Nếu V1 n
V2 m thì đồ thị 2 phe đầy đủ được kí hiệu là Kn x m
V1
V2
K2 x 3 (K3 )
x2
c c
b d b Fde
a
G – {e} e G – {ab}
c
c
b d b d
G – {a} G – {ed}
c
b d
G
f e
e
a a
c
c
b d b d
G+ G fc
ce
- 52 -
c. Đồ thị bù nhau:
Có 2 đồ thị G(V, E) và G (V , E ) . Nếu:
V = V
E E
G + E là đồ thị đầy đủ khi đó G + E cũng là đồ thị đầy đủ
thì : G và G là 2 đồ thị bù nhau.
2 đồ thị là bù nhau khi:
-
Chung nhau tập đỉnh
-
Cạnh nào có trong đồ thị này thì không có trong đồ thị
kia.
-
Thêm vào đồ thị này tập cạnh của đồ thị kia thì chúng trở
thành đầy đủ.
Ví dụ: b
a a
b
F c
d d c
G G
Bù nhau
G G
Bù nhau
- 53 -
Đặc biệt: Nếu đỉnh cuối v trùng với đỉnh đầu u thì đường đi Euler đó gọi là chu
trình Euler.
Đa đồ thị có chu trình Euler gọi là đa đồ thị Euler
Định lí 1: Một đa đồ thị gọi là đa đồ thị Euler khi và chỉ khi
Nó liên thông
Mọi đỉnh đều có bậc chẵn.
Chứng minh:
Cần: Đa đồ thị Euler có chu trình Euler.
-
Với đỉnh xuất phát u, chu trình ra đi từ u rồi lại khép kín ở
u, do đó bậc của u là chẵn.
-
Với các đỉnh khác chu trình đi đến rồi lại đi ra, do đó bậc
của chúng phải chẵn.
Đủ: Chứng minh có chu trình Euler bằng cách xây dựng chu trình Euler
Xuất phát từ U
Vạch chu trình đơn giản T1.
Nếu T1 qua hết mọi cạnh của đa đồ thị thì T 1 chính là chu trình
Euler cần tìm.
Nếu T1 chưa qua hết mọi cạnh của đa đồ thị thì ta đánh số 1 cho các
cạnh có trong T1 và còn lại các cạnh chưa được đánh số. Ta gọi G là
phần còn lại đó
Vì tính liên thông nếu G và T1 phải có ít nhất một đỉnh chung x1.
Xuất phát từ x1:
Trong G , vạch một chu trình đơn giản T .
Xét chu trình T2 như sau: Xuất phát từ u đi theo một phần của T 1
đến x1, đi hết T ta trở lại x1, đi phần còn lại của T1 trở về u.
Nếu T2 qua hết mọi cạnh của đa đồ thị thì T 2 chính là chu trình
Euler cần tìm.
Nếu T2 chưa qua hết mọi cạnh của đa đồ thị thì ta đánh số 2 cho các
cạnh của T và còn lại cạnh chưa được đánh số. Gọi G là phần còn
- 54 -
lại đó. Vì tính liên thông nên G và T2 phải có ít nhất một đỉnh
chung x2.
Xuất phát từ x2 lại làm như trên …
Cứ thế ta có T , T , … cho đến khi mọi cạnh của đa đồ thị được
đánh số. Từ đó vạch được chu trình Euler và kết thúc chứng minh
điều kiện đủ.
Thuật toán Euler:
Xuất phát từ đỉnh U, vạch các chu trình đơn giản T 1, T , T , … và
đánh số các cạnh của đa đồ thị đều đã được đánh số!
Vạch chu trình Euler theo qui tắc sau: Mỗi khi đi ra từ đỉnh nào thì
đi theo cạnh được đánh số lớn nhất trong số những cạnh chưa đi
cho đến khi trở lại đỉnh xuất phát.
Ví dụ: Cho đồ thị G như hình vẽ. Tìm chu trình Euler.
X4
y
u z
X5
X1
X3
X2
- Xuất phát từ U.
Vạch chu trình đơn giản T1 : u x1x2x3zx4yu. Chưa hết các cạnh của G. Ta
đánh số (1) cho các cạnh của T1. Còn các cạnh uy, zy, yx5, x5z, x5u, zx2: ta
gọi là G . Chọn y làm đỉnh chung của T1 với G .
- Xuất phát từ y:
Vạch trong G một chu trình đơn giản T : yx5zy. Vẫn chưa hết các cạnh
của G . Ta đánh số (2) cho các cạnh của T . Còn các cạnh x2z, zu, ux5, x2x5:
Ta gọi là G . Chọn z làm đỉnh chung của T2 và G .
- 55 -
3
X4
y 1
1
1 2
u 2
z
3 2
1 X5
3
X1
X3
1 1
X2
- Xuất phát từ z:
Vạch trong G chu trình đơn giản T : zux5x2z. Đánh số 3 cho
các cạnh của T . Mọi cạnh đã được đánh số.
Ta có một chu trình Euler là:
u x5x2yux1x2x3zyx5zx4yu.
Định lý 2: Trong đa đồ thị liên thông sẽ có đường đi Euler từ đỉnh u đến đỉnh v
khi và chỉ khi
u và v là đỉnh bậc l.
Mọi đỉnh còn lại đều bậc chẵn.
Chứng minh:
u và v bậc lẻ. Ta “chẳn hóa” bằng cách thêm vào cạnh uv để được một đa đồ
thị mới là đa đồ thị Euler, trong đó có chu trình Euler u x 1x2 … yu. Ta bỏ bớt
cạnh uv vừa thêm thì được chính đường đi Euler từ u đến v.
Ví dụ:
G3
G1
G2
- 56 -
Trong G1: Mọi đỉnh của G1 đều bậc chẵn, do đó có chu trình Euler. Vì vậy có
thể vẽ G1 bằng 1 nét.
Trong G2: có 2 đỉnh bậc lẻ, các đỉnh khác bặc chẵn. Do đó có đường đi Euler
Trong G3 có 4 đỉnh bậc lẻ do đó không có chu trình Euler, nên không thể vẽ
được bằng 1 nét.
Thuật toán Fleury:
Chu trình xuất phát từ đỉnh u bất kỳ, tuân theo 2 qui tắc sau đây:
Đi qua cạnh nào thì xóa cạnh đó đi. Nếu xuất hiện đỉnh cô lập thì
xóa luôn.
Chỉ qua cầu khi không còn đường nào khác.
Ví dụ: Dùng thuật toán Fleury, tìm chu trình Euler trong đồ thị sau:
A B C D
V
H G F E
Trước hết: mọi đỉnh đều có bậc chẵn, do đó có chu trình Euler.
Vạch chu trình chẳng hạn xuất phát từ A. Đi theo AB, BC, CF: đến F.
A B C D A B C D
H G F E H G F E
Từ F có 3 hướng đi FE, FD hoặc FG trong đó FG là Cầu mà đang còn 2 hướng
khác, ta đi theo 1 trong 2 hướng đó.
Chẳng hạn đi FD, DC, CE, EF: lại trở về F. (hoặc đi FE, EC, CD, DF)
B F F
A C D
F
E
- 57 - H G F
Từ F chỉ còn đường FG, dù là cầu cũng phải đi vì không còn đường nào nữa. Ta
đến G. Từ G có 3 hướng đi GB, GH, GA trong đó GA là cầu, không qua GA vì
đang còn 2 hướng khác, ta đi theo một trong 2 hướng này.
Chẳng hạn đi GB, BH, HG: Ta trở lại G (hoặc GH, HB, BG)
Từ G, chỉ còn cạnh GA, dù là cầu cũng đi, đi nốt, vì đồ thị hết cạnh rồi!
Chu trình cần tìm là:
DCE BH
ABCF FG GA
ECD HB
- 58 -
Hành trình của người đưa thư là một chu trình: xuất phát từ Sở rồi trở về Sở. Vì
vậy tối đa, người ấy phải đi qua mọi đường phố, nên hành trình ngắn nhất là mỗi
phố chỉ qua 1 lần.
Nếu mọi giao lộ đều là đỉnh bậc chẵn thì hành trình tối đa ngắn nhất chính là chu
trình Euler.
Nhưng thực tế không phải như thế, không hoàn toàn như thế:
Không phải mọi giao lộ đều là đỉnh bậc chẵn.
Túi thư mỗi ngày một khác do đó hành trình phát thư mỗi
ngày một khác, không nhất thiết phải qua mọi phố.
Giả sử có những giao lộ là những đỉnh bậc lẻ. Số đỉnh này là 1 số chẵn, thì
một hành trình qua đoạn phố nối 2 giao lộ bậc lẻ này 3 lần phải dài hơn hành
trình qua chỉ 1 lần.
Còn đoạn phố ấy phải qua 2 lần. Như vậy phải thêm vào đồ thị một cạnh song
song, đồng thời là đã “chẵn hóa” 2 đĩnh bậc lẻ tương ứng. Nhưng đoạn phố phải
thêm vào cạnh song song là đoạn phố trong hành trình phải đi qua 2 lần. “Chẵn
hóa” hết các giao lộ bậc lẻ bằng cách thêm vào những cạnh song song, tương
ứng là đoạn phố phải đi 2 lần, ta được một đồ thị mới: đó là một đa đồ thị Euler.
Bài toán trở thành: Tìm trong đa đồ thị Euler một chu trình qua ít cạnh nhất.
Lời giải: Định lý Goodman - Hedetniemi (1973): Trong đa đồ thị G có p cạnh
thì chu trình qua ít cạnh nhất có số cạnh là p + m(G). Trong đó m(G) là số cạnh
phải qua 2 lần.
Cách xác định m(G):
Gọi V0(G) là tập các đỉnh bậc lẻ của G. Số đỉnh bậc lẻ là 1 số chẵn.
V0 (G ) 2k
- 59 -
Với một cặp (a, b) có nhiều đường đi từ a đến b. Ta gọi d(a, b) là số cạnh ít nhất
để đi được từ a đến b.
D(Pi) là số cạnh ít nhất để đi hết k cặp trong phân hoạch Pi
Vậy m(G) = min d(Pi)
Sau khi xác định được m(G) qua phân hoạch P i nào thì từ Pi đó ta tìm được
hành trình qua ít cạnh nhất.
Ví dụ: Tìm hành trình qua ít nhất cạnh nhất trong đồ thị G sau:
t v
u z w
- 60 -
1.2.4. Bài toán người du lịch
Từ địa danh u đến địa danh y có thể có nhiều đường đi cho du khách chọn:
-
Chọn đường đi qua ít cạnh nhất
-
Chọn đường đi ngắn nhất (đường đi qua ít cạnh nhất chưa
chắc đã là ngắn nhất)
-
Chọn đường đi tốn ít thời gian nhất, tức là đi nhanh nhất.
(đường đi ngắn nhất mà hay bị ách tắc giao thông thì chắc
gì thời gian đi là ít nhất!)
-
Chọn đường đi mà phí tổn giao thông ít nhất. Có khi còn
phải chọn đường đi sao cho an toàn nhất.
Bài toán 1: Tìm đường đi từ u đến y qua ít cạnh nhất.
Thuật toán “đi lùi”
Bước 1: Đánh số cho các đỉnh
-
Đỉnh xuất phát u đánh số O.
-
Các đỉnh kề với u đánh số 1
-
Các đỉnh kề với đỉnh đánh số 1 thì đánh số 2
-
…
-
Đánh số được đỉnh cuối y thì dừng.
Giả sử y được đánh số n.
Vậy thì đường đi từ u đến y qua ít cạnh nhất là n cạnh. Mọi đường đi khác qua
hơn n cạnh.
Bước 2: y được đánh số n
-
Lùi lại đỉnh y-1 nào được đánh với số n - 1 . y-1 y
-
Lùi lại đỉnh y-2 nào được đánh số n - 2. y -2 y-1
y.
-
Cứ thế, lùi lại …cho đến khi gặp đỉnh được đánh số O :
Đó là u.
u …….. y-2 y-1 y
Lần ngược lại con đường lùi này ta được đường đi qua ít cạnh nhất.
- 61 -
Ví dụ: Tìm đường đi qua ít cạnh (cung) nhất từ u đến y trong đồ thị có hướng
sau:
a b c d
u k l y
e f g h
Đánh số đỉnh :
- Đánh số O cho u
- Đánh số 1 cho a, k, e
- Đánh số 2 cho b, l, f
- Đánh số 3 cho c, g, y. Dừng đánh số
Đi lùi: u k l y
Những đường đi qua ít cạnh nhất không đảm bảo rằng:
- Đó là đường đi ngắn nhất.
- Đó là đường đi nhanh nhất
- Đó là đường đi đỡ tốn kém nhất
Đồ thị có trọng số
Định nghĩa: Trong đồ thị G(V, E)
Với mỗi cạnh e E cho tương ứng với 1 số l(e) > 0, gọi là trọng số của
cạnh e.
Với mỗi đường đi e1e2 ...en có trong số là:
l ( ) l (e1 ) + l (e2 ) + ... + l (en )
Một đồ thị mà mỗi cạnh của nó đều có trọng số được gọi là đồ thị có trọng số.
Bài toán 2:
Trong đồ thị có trọng số, tìm đường đi từ đỉnh u đến đỉnh y có trọng số nhỏ nhất.
Lời giải:
Thuật toán Difkstra (1957).
Xuất phát từ đỉnh u. Tìm đỉnh nào kề với u mà trọng số của cạnh ux1 nhỏ nhất.
Tìm đỉnh x2 nào kề với u và x1 mà trọng số của cạnh ux2, hoặc x1x2 nhỏ nhất.
- 62 -
Tìm đỉnh x3 nào kề với u, x1, x2 mà trọng số của cạnh ux3, x1x3, x2x3 nhỏ nhất.
… Cứ như vậy cho đến khi tìm đến được y.
Ví dụ : Đồ thị G(V, E) có trọng số ghi trên các cạnh. Tìm đường đi có trọng số
nhỏ nhất từ đỉnh u đến đỉnh y.
5
4 b d 6
8
1 y
u 2
2
c e 3
10
Để có thể dùng máy tính giải được các bài toán về đồ thị phải tìm cách biểu diễn
đồ thị trên máy tính. Các bài toán khác nhau có những giải thuật khác nhau, các
- 63 -
giải thuật khác nhau sẽ phát huy tác dụng trên những cấu trúc dữ liệu tương ứng
khác nhau. Sau đây, chúng ta tìm hiểu một số cấu trúc dữ liệu cơ bản để biểu
diễn đồ thị trên máy tính, thể hiện qua các phương pháp sau:
2.1 Phương pháp ma trận kề
2.1.1 Định nghĩa ma trận kề
Với đồ thị vô hướng G(V, E).
Đánh số thứ tự cho các đỉnh: đỉnh thứ i, đỉnh thứ j, …
Nếu G có p đỉnh, tức là V p thì 1 i, j p
Dùng ma trận vuông cấp p : A = ( ij )
Với ij = 1 nếu đỉnh i kề với đỉnh j
0 nếu đỉnh i không kề với đỉnh j
Nói cách khác:
ij = 1 nếu có cạnh ij
0 nếu không có cạnh ij
Ma trận A = ( ij ) gọi là ma trận kề của đồ thị vô hướng G(V, E)
3 4
Ví dụ: Cho đồ thị trên hình vẽ.
1 6
2 5
Được biểu diễn bằng ma trận kề sau:
1 2 3 4 5 6
1 0 1 1 0 1 0
2 1 0 1 0 1 0
3 1 1 0 1 0 0
4 0 0 1 0 1 1
5 1 1 0 1 0 1
6 0 0 0 1 1 0
- 64 -
2.1.2 Tính chất
a. Ma trận kề của đồ thị vô hướng là ma trận đối xứng nghĩa là: 2 phần tử đối
xứng nhau qua đường chéo chính thì bằng nhau, vì vậy ij ji
b. Tổng các phần tử trên hàng i là bậc của phần tử i
Tổng các phần tử trên cột j là bậc của phần tử j
c. Tích ma trận kề:
AxAx…xA = Ap = ( ij )
p lần
Với ij là phần tử ở hàng i, cột j của A p bằng số đường đi từ đỉnh i đến đỉnh j
qua p - 2 đỉnh còn lại.
2.1.3 Chú ý
1/ Ma trận kề ở trên là biểu diễn đồ thị vô hướng. Còn đồ thị có hướng cũng
tương tự vậy, chú ý sau:
- Đồ thị vô hướng thì cạnh ab cũng là cạnh ba.
- Đồ thị có hướng thì có cung ab chưa chắc đã có cung ba
Ví dụ: Đồ thị có hướng cho trên hình vẽ có ma trận kề là:
2 5
1
3 6
- 65 -
2.2 Phương pháp ma trận liên thuộc đỉnh - cạnh
2.2.1 Định nghĩa
Với đồ thị có hướng G(V, E). Tập V có n đỉnh: V = { 1, 2, …, n}
Tập E có m cung: E = {e1, e2, …, em}
Ta dùng ma trận cấp nxm:
An x m = [ ij ]
1 nếu i là đỉnh gốc của cung ek
Với ij = - 1 nếu i là đỉnh ngọn của cung ek
0 nếu i không là đỉnh của cung ek
với k = 1, 2, …, m
An x m gọi là ma trận liên thuộc đỉnh - cạnh của đồ thị có hướng G.
Ví dụ: Biểu diễn đồ thị cho trên hình vẽ bằng ma trận liên thuộc đỉnh - cạnh.
2 4
1 6
3 5
Ma trận liên thuộc là:
1 1 1 0 0 0 0 0 0 0
2 -1 0 1 1 0 0 0 1 0
3 0 -1 -1 0 1 0 0 0 0
4 0 0 0 -1 0 1 1 0 0
5 0 0 0 0 -1 -1 0 1 1
6 0 0 0 0 0 0 -1 0 -1
2.2.2 Chú ý
Phương pháp ma trận liên thuộc đỉnh cạnh dùng cho đồ thị có hướng rất
hay gặp trong các bài toán xử lí các cung trong đồ thị.
2.3 Phương pháp danh sách cạnh
Trong trường hợp đồ thị thưa, tức là số cạnh ít, thì phương pháp ma trận
kề sẽ lãng phí, vì vậy ta dùng phương pháp danh sách cạnh như sau:
- 66 -
Sử dụng 2 biến:
Dau [cạnh] : Lưu trữ đỉnh đầu của cạnh
Cuoi [cạnh] : Lưu trữ đỉnh cuối của cạnh
Như vậy, một đồ thị có m cạnh thì dùng 2xm ô nhớ.
Nếu là đồ thị có trọng số thì dùng thêm m ô nhớ nữa để lưu trữ trọng số
của các cạnh.
3 4
Ví dụ: a/ Cho đồ thị vô hướng
6
1
2 5
Khi đó ta có:
Dau[cạnh] Cuoi[cạnh]
1 2
1 3
1 5
(2 1)
2 5
2 3
(3 1)
(3 2)
3 4
(4 3)
4 5
4 6
(5 1)
(5 2)
(5 4)
5 6
- 67 -
(6 4)
(6 5)
1
3 6
Khi đó ta có:
Dau[cạnh] Cuoi[cạnh]
1 2
1 3
3 2
3 4
5 4
5 6
6 5
Chú ý : Đồ thị vô hướng mỗi cạnh được tính 2 lần khi ta đổi Dau[cạnh] cho
Cuoi [cạnh]. Vì vậy máy tính đang xét đến đồ thị vô hướng thì những cạnh trong
dấu ( ) không cần phải lưu trữ nữa.
2.4 Phương pháp danh sách kề
Với mỗi đỉnh của đồ thị, lưu trữ một tập liệt kê danh sách các đỉnh kề với nó.
Ke [v] = {u E}
Trong ngôn ngữ Pascal sử dụng lệnh lặp: For i: = 1 to n do …vv
Với phương pháp danh sách kề, ta có: For x Ke [v] do …vv
“Biến đỉnh” x sẽ lần lượt duyệt qua các đỉnh kề với v trong danh sách liệt kê
của tập Ke [v].
- 68 -
Ví dụ:
2 5
3 4
4
6
1
1
3 6
2 5
- 69 -
Chương 3: Cây
Một lớp đồ thị đặc biệt, rất hay dùng trong nhiều lĩnh vực nhất là trong công
nghệ thông tin khi:
-
Xây dựng cấu trúc các thư mục
-
Tìm cách lưu trữ và truyền dữ liệu
-
Thực hiện thuật toán tìm kiếm thông tin
…. Đó chính là cây.
3.1 Các khái niệm
3.1.1 Định nghĩa
Cây là một đồ thị liên thông và không có chu trình
Ví dụ 1:
Không phải cây vì không liên thông Không phải câyvì có chu trình.
- 70 -
Đồ thị
Đường đi cho người đưa thư Đường đi Euler Đường đi cho du khách
Đường đi ngắn nhất Đường đi nhanh nhất Đường đi với chi phí thấp
nhất
B C
A
G H
E F I
- 71 -
Ta biểu diễn biểu thức số học trên dưới dạng cây như sau:
- 72 -
+
+ /
* u v
x
-
y
z t
d c k
R
h
e a
b g
Cây có gốc R
Cây không có
gốc
R
Tầng 0
c
Tầng 1 a R c
a Tầng 2 b
k
b Tầng 3 d
d g k
e g
h
e h
Nhận xét:
- 74 -
a. Với cây có gốc thì đỉnh x của cây ở tầng k khi và chỉ khi đường đi từ gốc
đến X có độ dài là k.
b. Với qui ước “cây mọc ngược” thì mọi cung đều hướng xuống dưới, và mũi
tên chỉ hướng không cần thiết nữa, ta bỏ mũi tên: được cây đối xứng của nó.
* Xét một cây có gốc v0.
- Đường đi từ gốc v0 đến đỉnh v: v0v1v2 … vi-1 vi vi +1 … v. Khi đó vi gọi là “cha”
của vi+1 và là “con” của vi-1
- Các đỉnh không có "con" gọi là lá hay đỉnh ngoài của cây. Các đỉnh không
phải là đỉnh ngoài gọi là đỉnh trong.
- Cây có gốc và các đỉnh của nó có nhiều nhất là m con được gọi là cây m
phân.
Đặc biệt m = 2, được gọi là Cây nhị phân.
3.2 Cây bao trùm
3.2.1 Định nghĩa
Xét đồ thị vô hướng G(V, E) với V > 1 (có nhiều hơn 1 đỉnh)
Giữ nguyên tập đỉnh V
Bỏ đi một số cạnh, chỉ còn một tập con F E sao cho T(V, F) là một
cây.
Ta gọi T(V, F) là cây bao trùm của G.
Ví dụ:
G
Cây bao trùm T1 Cây khung T2
Một đồ thị có thể có nhiều cây bao trùm.
3.2.2 Cây bao trùm ngắn nhất
Với đồ thị có trọng số G(V, E), mỗi cạnh e E có trọng số l(e).
Cây bao trùm Ti(V, Fi) với Fi E có tổng trọng số là:
l(Ti) = �l (e )
eÑ �Fi
i
Trong tất cả các cây bao trùm Ti của G, cây T* có l(T*) = min l(Ti) được
gọi là cây bao trùm ngắn nhất của G.
Vấn đề đặt ra là:
1/Với điều kiện nào thì đồ thị có cây bao trùm?
- 75 -
2/Nếu có thì lại có bao nhiêu cây bao trùm. Vậy làm thế nào tìm được cây bao
trùm ngắn nhất?
- Vấn đề thứ nhất được giải quyết bằng định lý sau: Một đồ thị có cây bao trùm
khi và chỉ khi đồ thị đó liên thông.
- Vấn đề thứ hai: Tìm cây bao trùm ngắn nhất, ở đây giới thiệu 2 thuật toán:
a. Thuật toán Kruskal (1956)
Thuật toán được thực hiện như sau:
- Tìm cạnh e1 có trọng số bé nhất trong E.
- Tìm cạnh e2 có trọng số bé nhất trong số cạnh còn lại: e2 E \ {e1}
- Tìm cạnh e3 có trọng số nhỏ nhất trong các cạnh còn lại: e 3 E \ {e1, e2}
và không tạo ra chu trình cùng e1, e2.
........................................
Cứ như vậy, tìm được en-1 (theo tính chất 2, 3 của cây).
Ví dụ: Chi phí nâng cấp các đoạn đường nối 5 địa danh A, B, C, D, E được ghi
trên đồ thị sau. Tìm phương án nâng cấp tạm thời với chi phí thấp nhất.
6 E 3
A D
4
1 4 6
B C
8
Các đoạn được nâng cấp theo phương án này chính là cây bao trùm ngắn nhất.Ta
làm như sau:
-
Chọn cạnh có chi phí nhỏ nhất. Đó là AB.
-
Chọn cạnh có chi phí nhỏ nhất còn lại (trừ AB). Đó là ED
-
Chọn cạnh có chi phí nhỏ nhất còn lại (trừ AB và ED). Có 2 cạnh: BE
hoặc BD, cả 2 cạnh đều có thể được chọn vì không tạo với AB và ED thành
chu trình.
-
Cuối cùng, chọn DC. Vậy có hai đáp án:
E 3 D E 3 D
A A
4 4
1 6 1 6
B B C
- 76 - C
b. Thuật toán Prim (1957).
Thuật toán được mô tả như sau:
-
Lấy 1 đỉnh bất kỳ v1 của đồ thị. Gọi T1 là cây chỉ có đỉnh v1.
-
Tìm cây T2 =T1 e1, Với e1 là cạnh có 1 đỉnh của T1 và trọng số nhỏ nhất.
-
Tìm cây T3 = T2 e2, Với e2 là cạnh có 1 đỉnh của T 2 và có trọng số nhỏ
nhất.
…..vv…
Đến khi tìm được cây Tn thì đó là cây bao trùm ngắn nhất.
Ví dụ: Lấy lại ví dụ bài toán nâng cấp đường ở trên.
* Nếu lấy đỉnh A thì:
T1 = A
T2 = T1 AB (không chọn AE vì trọng số AB nhỏ hơn)
T3 = T2 BE hoặc T3 T2 BD (vì BD và BE có trọng số bằng nhau)
T4 = T3 ED hoặc T4 T3 DE
Tầng
R 0
Tầng
a b 1
Tầng
c 2
d f
e
- 78 -
a
b c
e f
d g
Ta sẽ có:
a b c d e f g
* Với cây nhị phân không đầy đủ thì ta “đầy đủ hóa” bằng các đỉnh , rồi Lưu
trữ như trên. Đó là sự lãng phí phải chấp nhận.
Ví dụ: Hình a là chưa chuẩn hóa, hình b đã chuẩn hóa.
a a
b b
c c
Hỡnh a
Hỡnh b – Đầy đủ hóa của
hỡnh a
Vì vậy phải dùng đến 7 ô nhớ để lưu trữ chỉ có 3 đỉnh, gây lãng phí.
b. Lưu trữ móc nối
- 79 -
Cõy nhị phõn
Được lưu trữ múc nối như sau:
Ta cũng lưu trữ như cách nối tiếp trên, chỉ có khác là mỗi đỉnh lưu trữ trong
một vùng nhớ chia làm 3 phần theo qui cách sau:
+ L là mối nối bên trái, trỏ đến “con”
+ R là mối nối bên phải, trỏ đến “con” bên phải.
Lưu trữ móc nối phản ánh đúng dạng tự nhiên của cây và cho phép đỉnh “cha”
truy nhập được vào “con”, nhưng không có chiều ngược lại.
Mặt khác, khi có sự thêm, bớt đỉnh thì cách lưu trữ này là thuận tiện.
3.3.4 Phép duyệt cây nhị phân
Lưu trữ cây nhị phân trên máy tính bằng một dãy các ô nhớ, mỗi ô nhớ
lưu trữ đỉnh, tức là lưu trữ thông tin của đỉnh đó. Mỗi khi máy tính tìm đến ô
nhớ chứa đỉnh nào là để xử lí thông tin ở đỉnh đó rồi chuyển sang đỉnh khác.
Thứ tự tìm đến các đỉnh là rất quan trọng, vì tìm đến là để xử lí thông tin, nếu xử
lí được thì mới tìm sang đỉnh khác, mà như vậy thì đỉnh đó chỉ phải đếm 1 lần,
do đó tiết kiệm được thời gian chạy máy.
Duyệt một cây nhị phân là:
- 80 -
-
Tìm đến và xử lí thông tin ở mọi đỉnh của cây.
-
Mỗi đỉnh chỉ đến 1 lần.
Trong cây nhị phân, mỗi đỉnh chỉ có nhiều nhất là 2 con. Tùy theo thứ tự xử lí
với đỉnh “cha” mà có 3 thứ tự như sau:
Thứ tự trước: “cha” – “con” bên trái – “con” bên phải.
Thứ tự giữa: “con” bên trái – “cha” – “con” bên phải
Thứ tự sau: “con” bên trái – “con” bên phải – “cha”
Ví dụ:
a
b c
f
d e
- 81 -
trở lại với đỉnh, mà từ đó ta tìm đến w. Quá trình tìm kiếm lại tiếp tục từ đỉnh
quay lại này.
- 82 -
Ví dụ 1: Trên đồ thị sau, từ đỉnh v1, tìm theo chiều sâu tất cả mọi đỉnh.
V1
V2 V3
V4 V5
V6 V7
V8
Từ v1, tìm đến v2: kề v1 và chưa đến (hoặc v3) rồi đến v4, đến v8, đến v5. Các đỉnh
kề v5 là v2, v8 đã đến rồi, ta quay lùi về v8 (là đỉnh trước đây từ v8 tìm đến v5). Từ
v8 đi tiếp đến v6, rồi đến v3, rồi đến v7. Quá trình kết thúc.
Đường cần tìm đã đi là: v1 v2 v4 v8 v5 v6 v3 v7.
Ví dụ 2: Tìm trên đồ thị sau, đường đi từ đỉnh 1, theo chiều sâu đến mọi đỉmh.
3
2 7 5
6 8
1
4
12
11 9
10 13
Chẳng hạn: 1 – 2 – 4 – 6 – 5 – 8 – 9 …
Kề với đỉnh 9 là các đĩnh đã đến thì phải quay lui về 8, về 5, về 6. Từ 6 đi tiếp:
Chẳng hạn: … 6 – 7 – 3, quay lại 7, lại 6. Từ 6 đi tiếp: 6 – 13 … quay lại 6, …,
quay lại 1. Từ 1 đi tiếp:
Chẳng hạn: 1 – 12 – 10 … quay lại 12, đi tiếp 11. Kết thúc.
Đường đã đi là: 1 – 2 – 4 – 6 – 5 – 8 – 9 – 7 – 3 – 13 – 12 – 10 – 11.
b. Tìm kiếm theo chiều rộng
-
Tìm đến tất cả các đỉnh v1 kề với v0 mà chưa đến.
- 83 -
-
Với tất cả các v1 này lại làm như với v0, nghĩa là với mỗi
v1, tìm đến tất cả các v2 kề với v1 mà chưa đến. Cứ như vậy đến khi tìm
được v cần tìm (hay là tìm hết mọi đỉnh).
Ví dụ: Lấy lại ví dụ 1 ở trên: v1 – (v2 – v3) – (v4 – v5 – v6 – v7) – v8.
Lấy lại ví dụ 2 ở trên:
1 – (2 – 4 – 12) – (7 – 6 – 10 – 11) – (3 – 13 – 5) – (8 – 9)
- 84 -