You are on page 1of 84

TT NỘI DUNG GHI CHÚ

1 Chương 1: Phương pháp đếm


1.1. Tập hợp
1.2. Quan hệ hai ngôi
2 1.3. Các nguyên lý cơ bản
1.4. Đại số tổ hợp
3 Ôn tập và kiểm tra 1 tiết

4 Chương 2: Logic mệnh đề


2.1. Logic mệnh đề và các phép toán
2.2. Hàm mệnh đề
5 2.3. Các luật
2.4. Bài toán ngược
6 Chương 3: Đại số Boole
3.1. Hàm Boole
3.2. Các phép toán trên hàm Boole
3.3. Định nghĩa đại số Boole
3.4. Các mạch logic
3.5. Tối hiểu hóa hàm Boole
7 Chương 4: Suy diễn và chứng minh

8 Tổng kết đọc điểm và ôn tập


1 Chương 1: Đồ thị hữu hạn
1.1. Khái niệm
2 Chương 1: Đồ thị hữu hạn
1.2. Các bài toán về đường đi
3 Kiểm tra 1 tiết
4 Chương 2: Biểu diễn đồ thị trên máy tính
2.1 Đỉnh cạnh
2.2 Danh sách cạnh
2.3 Danh sách kề
5 Chương 3: Cây
3.1. Khái niệm
3.2. Cây bao trùm
6 Chương 3: Cây
-1-
3.3. Cây nhị phân
7 Ôn tập và kiểm tra

-2-
Bài giảng

Toán rời rạc

-3-
Phần 1: toán rời rạc 1

Chương 1: Phương pháp đếm


1.1. Tập hợp
1.1.1. Khái niệm
 Quy ước :
 Dùng các chữ cái lớn A, B, X, Y, … để chỉ các tập
 Dùng các chữ cái nhỏ a, b, x, y, … để chỉ các phần tử.
 Quan hệ giữa phần tử với tập và giữa các tập với nhau
 Nếu phần tử x là một phần tử của tập A viết: x  A
 Nếu phần tử y không phải là phần tử của tập X thì viết: y  X
 Nếu mọi phần tử của tập A đều là phần tử của tập B thì A là tập con
của B.
- viết A  B và đọc “A bao hàm trong B”
- hoặc B  A và đọc “ B bao hàm A”
 Nếu A là tập con của B và B là tập con của A thì: A = B
1.1.2. Xác định tập
Ví dụ:
A = { x | X thuộc N, x2 < 16}

-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

Tổng quát: Hợp của n tập A1, A2, …, An, kí hiệu:


n

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

là tập các phần tử chung thuộc tất cả n tập Ai (i =1, 2, …, n)

 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

 Phép hiệu đối xứng

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

1.1.4. Tính chất của các phép toán về tập


 Tính chất giao hoán
 A B =B  A
 A B =B  A
 Tính chất kết hợp
-6-
 A  (B  C) = (A  B)  C
 A  (B  C) = (A  B)  C
 Tính chất phân phối
 A  (B  C) = (A  B)  (A  C)
 A  (B  C) = (A  B)  (A  C)
 Luật đối ngẫu De Morgan
 A \ (B  C) = (A \ B)  (A\C)
 A \ (B  C) = (A \ B)  (A\C)
 A �B  A �B
 A �B  A �B
 Luật “nuốt”: Nếu A  B thì
 A B =B
 A B = A

1.2. Quan hệ hai ngôi

Với 2 tập không rỗng A và B. Tích đề các của A và B, ký hiệu là A x B, là tập,


mà phần tử của nó là một cặp 2 phần tử: 1phần tử của A và 1phần tử của B, có
thứ tự dạng (a, b) với a  A, b  B
A x B = {(a, b) / a  A, b  B}
1.2.1. Định nghĩa
Cho 2 tập A, B khác rỗng. Một tập con R của A x B được gọi là một quan
hệ 2 ngôi R từ A vào B.
 a có quan hệ R với b khi và chỉ khi (a, b)  R, ký hiệu : aRb
 a không có quan hệ R với b khi và chỉ khi (a, b)  R, ký hiệu: aRb
Xác định quan hệ 2 ngôi
 Liệt kê ra tất cả các cặp phần tử có quan hệ R
 Chỉ rỏ tính chất đặc trưng của các cặp phần tử có quan hệ R
Ví dụ: Cho A = {0, 1, 2, 3, 4}; B = {0, 1, 2, 3, 4, 9}
Xét quan hệ R từ A vào B như sau: aRb khi và chỉ khi b = a2, a  A, b B
- Viết dưới dạng liệt kê:

-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}

1.2.2. Tính chất của quan hệ 2 ngôi

R là quan hệ 2 ngôi từ X vào chính nó


R = {(x, y) / x, y  X}  X2
- Tính phản xạ:
Quan hệ R có tính phản xạ nếu " x �X ta có xRx, hay (x, x)  R
-Tính đối xứng:
Quan hệ R đó có tính đối xứng nếu " x, y �X mà xRy thì yRx, hay (x, y)  R
thì (y, x)  R
-Tính phản đối xứng:
Quan hệ R có tính phản đối xứng nếu " x, y �X mà xRy và yRx thì x = y
-Tính bắc cầu:
Quan hệ R có tính bắc cầu nếu " x, y , z �X mà xRy và yRz thì xRz
Ví dụ:
- Quan hệ “  “ giữa các số thực có các tính chất phản xạ, đối xứng, bắc cầu.
- Quan hệ “đồng dạng” giữa các tam giác, giống như quan hệ “cùng tuổi”: có
các tính chất phản xạ, đối xứng, bắc cầu.

1.2.3. Biểu diễn quan hệ 2 ngôi


a. Cách dùng định nghĩa:
Liệt kê các cặp phần tử của tập R.
b. Cách dùng ma trận
c. Cách dùng đồ thị
Ví dụ: Cho A = {1,2,3,4,5,6}.
Tập R ̴̴ A A được định nghĩa: aRb khi và chỉ khi a - b là một số
chẵn, a �A, b �B
- Biểu diễn quan hệ R bằng cách dùng định nghĩa:

-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:

 Một quan hệ có tính phản xạ thì


 Trong ma trận biểu diễn các phần tử trên đường chéo
chính đều bằng 1.
 Trong đồ thị biểu diễn tại đỉnh nào cũng có khuyên.

 Một quan hệ có tính đối xứng thì


 Trong ma trận biểu diễn các phần tử đối xứng nhau qua
đường chéo chính thì bằng nhau.
 Toán học gọi ma trận có tính chất đó là ma trận đối xứng.

1.2.4. Hai quan hệ đặc biệt


1.2.4.1. Quan hệ tương đương
Giả sử R là quan hệ 2 ngôi từ tập A vào tập A. Quan hệ R gọi là quan hệ
tương đương trên A nếu R thoả mãn 3 tính chất: Phản xạ, đối xứng và bắc
cầu.
-9-
Ví dụ 1: Với sinh viên cùng một lớp, ta xét quan hệ “ngồi cùng bàn”.
 Mọi sinh viên trong lớp đều “ngồi cùng bàn” với chính
mình. Như vậy quan hệ này có tính phản xạ.
 Sinh viên a ngồi cùng bàn với sinh viên b thì sinh viên b
cũng ngồi cùng bàn với sinh viên a. Như vậy quan hệ này
có tính đối xứng.
 Sinh viên a ngồi cùng bàn với sinh viên b và sinh viên b
ngồi cùng bàn với sinh viên c thì sinh viên a cũng ngồi
cùng bàn với sinh viên c. Như vậy quan hệ này có tính
bắc cầu.
Vậy quan hệ “ngồi cùng bàn” là quan hệ tương đương
Ví dụ 2: Trong tập số nguyên, xét quan hệ R xác định như sau aRb khi và chỉ
khi a - b  3
 Với mọi số nguyên a thì a - a = 0 3. Vậy R có tính phản xạ.
 Với mọi số nguyên a ,b: aRb thì a - b  3, suy ra b - a = - (a-b)  3, do đó
bRa. Vậy R có tính đối xứng.
 Với mọi số nguyên a ,b,c: aRb thì a - b  3
bRa thì b - a  3
a - c = (a-b) + (b-c)  3, suy ra aRc. Vậy R có tính bắc cầu.
Vậy quan hệ R là quan hệ tương đương.

1.2.4.2. Quan hệ thứ tự


Giả sử R là quan hệ 2 ngôi từ tập A vào tập A. Quan hệ R được gọi là
quan hệ thứ tự trên A nếu R thoả mãn 3 tính chất: Phản xạ, phản đối xứng
và bắc cầu.
Ví dụ: Trong tập số tự nhiên N, tập số nguyên Z, tập số hửu tỉ Q, tập số
thực R. Quan hệ “nhỏ hơn hoặc bằng” là quan hệ thứ tự.
Thật vậy:
 với mọi số x thì x  x: quan hệ có tính phản xạ.
 x  y, y  x thì x = y: quan hệ có tính phản đối xứng.
 x  y, y  z thì x  z: quan hệ có tính bắc cầu.

- 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)

Để dễ nhớ, ta nhân và chia cho


(n-k)! = (n-k)(n-k-1) ….3.2.1
Ta có:

- 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).

Số hoán vị của n phần tử khác nhau là:


Pn = n! = 1.2…n
Ví dụ1: 6 người dàn hàng ngang để chụp ảnh. Tối đa có thể chụp được bao
nhiêu kiểu?
Cứ 1 cách sắp xếp 6 người thành 1 hàng ngang thì chụp được 1 kiểu ảnh. Do
đó số kiểu tối đa chụp ảnh 6 người thành hàng ngang là số hoán vị của 6 người.
P6 = 6! = 6.5.4.3.2.1 = 720 kiểu
Ví dụ 2: Có bao nhiêu cách chạy n chương trình trên 1 máy tính?
Trên máy tính, mỗi lúc chỉ chạy được 1 chương trình.
Một cách chạy n chương trình trên máy tính là 1 cách sắp xếp n chương
trình đó theo thứ tự thời gian.
Vậy số cách chạy n chương trình trên 1 máy tính là:
Pn = n! cách.
Chú ý:
Khi sắp xếp thứ tự cho n phần tử mà trong đó có những phần tử giống hệt
nhau thì hoán vị lặp, , do đó có hoán vị được tính nhiều lần (tính lặp, đếm lặp).
Ta có định lí sau:
Định lí: Số hoán vị lặp thật sự khác nhau của n phần tử, trong đó có:
n1 phần tử loại 1 giống hệt nhau,
n2 phần tử loại 2 giống hệt nhau,
….
- 15 -
nk phần tử loại k giống hệt nhau
Với n1 + n2 + … + nk = n là
n!
Pn 
n1!n2 ...n k !

Ví dụ: Có bao nhiêu cách viết chữ PEPPER ? (hạt tiêu).


Có 6 chữ cái, trong đó có 3 chữ P, 2 chữ E và 1 chữ R, do đó số cách viết chữ
PEPPER là số hoán vị lặp của 6 chữ cái.
6!
A6   60 cách viết (giống hệt nhau).
3!2!1!

1.5.3. Tổ hợp

Bài toán: Có n phần tử khác nhau.


 Chọn ra k phần tử với 0 �k �n
 Không kể đến thứ tự sắp xếp.
Ta được 1 tổ hợp chập k của n phần tử. Có bao nhiêu tổ hợp chập k của n phần
tử?
Lời giải:
Chia việc tính số chỉnh hợp chập k của n phần tử khác nhau Ank thành 2 giai
đoạn:
Giai đoạn 1: Chọn k phần tử từ n phần tử. Mỗi cách chọn ta được 1 tổ hợp chập
k của n phần tử? Nếu gọi C nk là số tổ hợp chập k của n phần tử thì giai đoạn 1 có
C nk cách chọn k phần tử từ n phần tử?

Giai đoạn 2: Sắp xếp k phần tử đã chọn. Có Pk cách sắp xếp.


Theo nguyên lí nhân, ta có:
C nk .Pk = Ank

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+n11 `
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 đề

2.1. Mệnh đề logic và các phép tóan logic

2.1.1. Khái niệm

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

2.1.2. Các phép toán logic


2.1.2.1. Phép phủ định
Phép phủ định mệnh đề P, cho ta mệnh đề P đọc là “không P” hoặc “không
phải P”, có giá trị chân lý như sau:
P P

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 chỉ đúng khi P và Q cùng đúng. đ ^ đ = đ


Ví dụ: P: “2 là số nguyên tố”
Q: “2 là số chẵn”
Thì P ^ Q là:
 “2 là số nguyên tố, đồng thời là số chẵn”
 “2 vừa là số nguyên tố, vừa là số chẵn”
 “2 là số nguyên tố và là số chẵn”
2.1.2.3. Phép tuyển
Cho 2 mệnh đề P và Q
Phép tuyển của P và Q cho ta mệnh đề P  Q, đọc là “P tuyển Q”, hay “P hoặc
Q”, là mệnh đề có giá trị chân lý như sau:

P Q P  Q

đ đ đ
đ s đ
s đ đ
s s s

P  Q chỉ sai khi P và Q cùng sai s  s = s


Ví dụ: P: “x < 7”
Q: “x = 7” thì P  Q : “x  7”

- 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

Cho 2 mệnh đề logic P và Q.

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 đ đ

Biểu thức hằng đúng, biểu thức hằng sai


 Có những biểu thức, những hàm luôn luôn đúng, mọi trường hợp
đều đúng. Ta gọi là hằng đúng.
 Ngược lại, có những biểu thức, những hàm luôn luôn sai, mọi
trường hợp đều sai. Ta gọi là hằng sai.
Ví dụ: P  P luôn luôn đúng. Ta viết, P  P = đ.
P  P luôn luôn sai. Ta viết, P  P = s.

Công thức tương đương

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í.

Khi đó ta viết F(P, Q, …)  E(P, Q, …).


Để đơn giản, thường thay dấu  bằng dấu =
2.3. Các luật logic
- Luật giao hoán:
PQ=QP
P Q=QP
- Luật kết hợp:
P  (Q  R) = (P  Q)  R
P  (Q  R) = (P  Q)  R
- Luật phân phối:
P  (Q  R) = (P  Q)  (P  R)
P  (Q  R) = (P  Q)  (P  R)
- Luật luỹ đẳng

- 23 -
PP=P
PP=P
- Phần tử trung hòa:
P đ =P
P s = P
- Luật thống trị
Ps =s
P đ =đ
- Luật phần tử bù
P P =s
P P =đ
- Luật De Morgan
PQ =P  Q

P  Q = P Q

- Phủ định kép


P =P

2.4. Bài toán ngược

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.

3.2. Các phép toán trên hàm boole

3.2.1. Phép phủ định


Phủ định của hàm boole f(x1, x2, …, xn). Ký hiệu là f (x1, x2, …, xn) là
hàm boole có giá trị như sau:
f(x1, x2, …, xn) f (x1, x2, …, xn)

1 0
0 1

3.2.2. Phép hội


Hội 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 0
0 1 0
0 0 0

f  g ( x1 , x 2 ,..., x n ) = f(x1, x2, …, xn)  g(x1, x2, …, xn)

- 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

f  g ( x1 , x 2 ,..., x n ) = f(x1, x2, …, xn)  g(x1, x2, …, xn)

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

Trường hợp F(x,y) = 1 khi x = 1, y = 0.


F(x, y) = x  y
Ví dụ 2: Tìm các hàm F1, F2 cho ở bảng sau:
X Y z P1 P2
1 1 1 0 0
1 1 0 0 1
1 0 1 1 0
1 0 0 0 0
0 1 1 0 0
0 1 0 0 1
0 0 1 0 0
0 0 0 0 0

Giá trị 1 xảy ra trong ít trường hợp.


F1(x, y, z) = x yz
F2(x, y, z) = xy z  x y z

- 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.

3.4. Mạch Logic


Xem một thiết bị điện tử như sau:

x1

……………. f(x1, x2, …, xn)


xn C

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:

3.4.1. Cổng NOT


Thực hiện phép phủ định.
x x

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

3.4.3. Cổng OR (hoặc) : Thực hiện phép tuyển


x x y
y
x = 1100101
y = 1010111 x  y = 1110111
Một tổ hợp 3 cổng cơ sở này sẽ cho một mạch logic thực hiện một hàm logic
tương ứng. Các tổ hợp khác nhau sẽ cho các mạch logic khác nhau để thực hiện
các hàm logic khác nhau.
Ví dụ 1: Mạch sau đây cho kết quả là hàm nào?
x
y ?
z

Kết quả là hàm F(x, y, z) = x �y �z


Ví dụ 2: Thiết kế mạch logic thực hiện hàm F cho theo bảng sau:
x Y z P Các hội tương ứng
1 1 1 1 Xyz
1 1 0 1 xy
1 0 1 0
1 0 0 0
0 1 1 0
0 1 0 0
0 0 1 1 z
0 0 0 0

x Ta có F(x, y, z) = xyz  xy z  x yz

y F(x, y, z)

Z- 30 -
V

Ví dụ 3: Cải tiến mạch logic thiết kế ở vị dụ 2.


Mạch sẽ đơn giản nếu biểu thức của hàm được rút gọn. Vì vậy, muốn cải tiến
mạch, trước tiên, ta tìm cách rút gọn hàm. người ta gọi là “tối thiểu hóa” hàm.
F = xyz  xy z  x yz
= (xyz  xy z )  x yz
= xy(z  z )  x yz
= xy  x yz
Mạch thực hiện là:

x
y
F

x
y
z

3.5. Tối thiểu hóa hàm Boole


Tối thiểu hóa hàm Boole là rút gọn biểu thức của hàm. Nhờ đó ta cải tiến
được mạch logic thực hiện nó.
Muốn rút gọn một hàm logic, ta nhóm các hạng thức thích hợp lại thành
từng nhóm rồi rút gọn từng nhóm đó. Không phải 2 hạng thức nào cũng rút gọn
được mà phải là 2 hạng thức thích hợp với phép toán giữa chúng.
Karraugh đưa ra nhận xét như sau:
Với 2 biến logic x và y thì có 4 hội cơ bản là:

- 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

x y  x y  x( y  y )  x . Biến x là biến chung

Với 3 biến logic x, y, z có 8 hội cơ bản là:


xyz, xy z , x yz , x y z , x yz, x y z, x y z, x y z

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.

xyz  x y z  x( y  y ) z = xz: x, z là 2 biến chung.

Đó 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

4.1. Qui tắc suy diễn

4.1.1. Khái niệm


Dòng suy diễn bắt nguồn từ các giả thiết ban đầu tiến hành lập luận từng
bước, từng bước kế tiếp nhau, mỗi bước rút ra những kết luận trung gian, rồi dần
dần đi tới kết luận cuối cùng: đó là điều cần khẳng định.
Nếu kí hiệu P1, P2, …, Pn là các giả thiết ban đầu (cũng kể cả những kết luận
trung gian). Còn kết luận cuối cùng, cần khẳng định là Q thì dòng suy diễn tiến
hành như sau:
( P1  P2  ...Pn )  Q

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ý:

P Q PQ (P  Q)  P Dòng suy diễn


Đ đ đ đ đ
Đ s s s đ
S đ đ s đ
S s đ s đ

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.

4.1.2. Cách kiểm tra một dòng suy luận


1. Lập bảng giá trị chân lý cho công thức biểu diễn dòng suy luận đó,
xem có là hằng đúng hay không?
2. Dùng các công thức logic tương đương đã biết, biến đổi đưa công thức
biểu diễn dòng suy luận về kết quả: có là hằng đúng hay không?

- 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
= PQ  Q
= P  Q  Q
= P  ( Q  Q)
= P  đ
= đ (hằng đúng)
Vậy dòng suy luận trên là hợp lí!

4.1.3. Các quy tắc suy diễn hay dùng


1. Qui tắc Modus Ponens: [(P  Q)  P]  Q
2. Qui tắc Modus Tollens: [(P  Q)  Q ]  P
3. Qui tắc tam đoạn luận: [(P  Q)  (Q  R)]  (P  R)
4. Qui tắc chứng minh theo trường hợp:
[(P1  Q)  (P2  Q)  …  (Pn  Q)]  (P1  P2  …  Pn)  Q
5. Qui tắc phản chứng: ( P ޺�Q )�s (P Q)
Chú ý: Ta đã biết cách chứng minh phản chứng: Muốn chứng minh rằng
P  Q ; ta giả thiết ngược lại: Thay Q bằng Q , tức là P  Q rồi dẫn mâu

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 .

4.2. Các phương pháp chứng minh


Nhiều khi cần phải thuyết phục cho một khẳng định nào đó hoặc là được
đồng ý, hoặc là được công nhận, hoặc là không thể phản bác
Khi đó phải lập luận, phải suy diễn, … để làm rõ khẳng định là đúng. Đó là
sự chứng minh.

- 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

Mà theo (10): P  U = đ do đó P = đ tức là P sai.


Theo (5): U = đ

4.2.2. Chứng minh theo các trường hợ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

4.2.3. Chứng minh phản chứng


Ta giả sử ngược lại: điều cần khẳng định là sai. Từ đây lập luận, suy diễn để
dẫn đến mâu thuẫn:
-
Hoặc là vô lí.
-
Hoặc là trái giả thiết.
Mâu thuẫn là do giả sử điều khẳng định là sai. Để tránh mâu thuẫn thì điều
khẳng định là đúng. Đó là điều phải chứng minh.
Ví dụ: Chứng minh rằng: Không tồn tại 2 số tự nhiên m và n

- 37 -
m
để  2 (mệnh đề Q)
n

Giả sử ngược lại: Tồn tại … (mệnh đề Q ).


m
Luôn luôn có thể xem là phân số tối giản, tức là m và n không có ước số
n
chung > 2
Từ giả sử ngược, suy ra m2 = 2n2
Suy ra m2 là số chẳn m = 2k
Suy ra m phải là số chẳn.
Suy ra (2k) = 2n2, do đó n2 = 2k2
Suy ra n cũng là số chẳn
Suy ra m và n có ước số chung là 2 (>1).
m
Vô lí. Vậy không tồn tại 2 số tự nhiên m và n mà  2.
n

4.2.4. Chứng minh bằng phản ví dụ


Muốn chứng minh một khẳng định nào đó là sai, ta dẫn ra 1 trường hợp
mà trong trường hợp đó điều khẳng định sai.
Chứng minh bằng phản ví dụ có 2 cách thể hiện.
1. Muốn chứng minh rằng “Với mọi x  A thì P = đ” là sai
ta chỉ ra:
“Tồn tại một x  A thì P = s”.
Muốn chứng minh rằng
(P1  P2  …  Pn)  Q là sai
Ta chỉ ra rằng: Biểu thức đó không phải là hằng đúng – nghĩa là có ít nhất 1
trường hợp sai.
Ví dụ: Kiểm tra dòng suy luận sau: ( P  R)  P  ( R  Q)  Q
Ta chứng minh bằng phản ví dụ bằng cách: tìm trường hợp mà các giả thiết
đều đúng nhưng kết luận thì sai. tức là ( P  Q) = đ
P = đ mà Q = s !
( R  Q) = đ

Vì P=đ R = đ  R = s  có trường hợp

- 38 -
P R =đ mà R  Q = đ Q sai.
Vậy: Dòng suy luận đã nêu là không đúng.

4.2.5. Chứng minh qui nạp


Trong tập số tự nhiên N với phép cộng (+) và phép nhân (x), các số tự
nhiên có quan hệ thứ tự  . Với quan hệ thứ tự, trong tập số tự nhiên có thêm
khái niệm “phần tử bé nhất”.
Chính phần tử bé nhất này là cơ sở để kiểm chứng sự đúng đắn của khẳng
định sễ được chứng minh tiếp bằng qui nạp.
Vấn đề được đặt ra như sau:
P(n) là một khẳng định mà giá trị chân lí của nó phụ thuộc vào số tự nhiên
n.
Ta phải chứng minh rằng P(n) đúng với mọi n
Mẫu chứng minh hay gặp là:
 Xác định một số n0 nào đó (thường là số tự nhiên bé nhất: n 0 = 1
hoặc n0 = 0) mà P(n0) là đúng.
 Chứng minh rằng P(n) cũng đúng với n > n0.
Có 2 phương pháp chứng minh qui nạp:

1. Phương pháp qui nạp yếu


Bước 1: Xác định số n0 và kiểm chứng sự đúng đắn của P(n0).
Bước 2: Chứng minh rằng với mọi k  n0 mà P(k) đúng thì P(k+1) cũng
đúng.
Kí hiệu là "k  n0 . P(k)  P(k+1).

2. Phương pháp qui nạp mạnh


Bước 1: Xác định số n0 và kiểm chứng sự đúng đắn của P(n 0), P(n0 +1), …,
P(k)
Bước 2: Chứng minh rằng P(k+1) cũng đúng.
kí hiệu: Với k > n0: P(n0)  P(n0+1)  …  P(k)  P(k+1).
Như vậy là phương trình chứng minh qui nạp phải gồm 2 bước:

- 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

Bước 1: Kiểm chứng:


1
n = 1  12 = .1.(1+1).(2.1+1): công thức đúng.
6
Bước 2: qui nạp
Giả sử công thức đúng với n, ta chứng minh cũng đúng với n +1.
1
12 + 22 + … + n2 + (n +1)2 = n(n+1)(2n+1) + (n+1)2
6
1
= (n+1)[n(2n+1) + 6(n+1)]
6
1
= (n+1)[2n2 + 7n + 6]
6
1
= (n+1)[(n+1) +1] [2(n+1) +1]
6
Công thức đúng với n +1. Vậy công thức đúng với mọi n
Ví dụ 3: Thuật chia Euclide.
Với 2 số nguyên a và b mà b  0
Tồn tại, duy nhất một số nguyên (q, r) sao cho:
a = bq + r (1)
0  r <b (2)
Chứng minh:
- Chứng minh tính duy nhất của bộ (q, r).
Giả sử, ngoài bộ (q, r) thỏa mãn (1) và (2), còn bộ nữa ( q  , r  ) mà:
a = b q + r  ( 1 )
0  r  b ( 2 )
Lấy ( 1 ) trừ đi (1), ta có:
b ( q  - q) + ( r  - r) = 0
mà b  0 nên q - q = 0  q = q

r - r = 0 r = r

Thế là bộ ( q  , r  ) cũng là bộ (q, r). vậy thì bộ (q, r) là duy nhất.

- 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.

Bước qui nạp (mạnh)


Giả sử P(0), P(1), …, P(a) đều đúng. Ta chứng minh P(a+1) cũng đúng.
Với a+1 chỉ xảy ra 1 trong 2 trường hợp:
 Nếu a +1 < b thì
a + 1 = b.0 + (a +1)  tồn tại bộ (0, a +1) thỏa mãn (1) và (2).
Vậy P(a+1) đúng.
 Nếu a +1  b thì:
đặt a  = a +1 - b  a   a  P(a ) đúng
do đó a  = b. q  + r 
 a + 1 - b = b q + r 

 a + 1 = b( q  + 1) + r 

Tồn tại bộ ( q  +1, r  ) thỏa mãn (1) và (2)  P(a + 1) đúng.


Định lí đã được chứng minh

- 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

0 nếu không 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

G Số đỉnh bằng nhau.


d
Số cạnh bằng nhau
Sự tương ứng 1-1 ở đây là:
a–x ab – xu
b–u bc – uz
c–z cd – zv
d–v de – vy
e–y be – uy
bd – uv
Một trong những điều kiện sau đây là điều kiện cần để 2 đồ thị là đẳng cấu:

- 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

1.1.5. Đồ thị con

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

G1, G2, G3, G4 là đồ thị con của G


G2 và G4 là đồ thị con bao trùm của G
G5 không phải là đồ thị con của G vì G không có cạnh ad.

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

- uvyz là đường đi sơ cấp từ u đến z, độ dài 3 (qua 3 cạnh)


- uyxvyz là đường đi không sơ cấp từ u đến z độ dài 5.
- yvxyv là đường đi không đơn giản từ y đến v, độ dài 4.
- vyxv là chu trình xuất phát từ v, độ dài 3.
- uvu không là chu trình xuất phát từ u vì độ dài 2 (<3).
- uu là một khuyên - là đường đi đặc biệt, có độ dài 0.

1.1.7. Tính liên thông


Trong đồ thị G(V, E).
 Nếu có đường đi từ đỉnh u đến đỉnh v thì ta nói: u và v là hai
đỉnh liên thông.
- 48 -
 Nếu mọi cặp đỉnh của G đều liên thông thì G gọi là đồ thị
liên thông.
Ví dụ:

đồ thị liên thông đồ thị không liên thông


Trong đồ thị G(V, E). Đỉnh v  V
Gọi Vv là tập các đỉnh t lien thông với v
Vv = { t V t liên thông với v}

E v = { các cạnh nối 2 đỉnh của Vv }

Thì G (Vv, Ev ) gọi là bộ phận liên thông chứa v.


Như vậy:
,- Nếu u và v là 2 đỉnh liên thông thì bộ phận liên thông chứa u cũng là bộ phận
liên thông chứa v; 2 đỉnh liên thông cùng thuộc 1 bộ phận liên thông.
- 2 đỉnh không liên thông thuộc 2 bộ phận liên thông rời nhau.
Ví dụ: Trong đồ thị G(V, E) sau đây:
a d g

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

0 - đều 1 - đều 2 - đều 2 - đều

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

1.1.9. Một số phép biến đổi đồ thị

Cho đồ thị G(V, E)


 Bớt:
G - {v} là đồ thị có được từ G bằng cách:
 Bỏ đỉnh v.
 Bỏ các cạnh nối với v
G - {uv} là đồ thị có được từ G bằng cách:
 Giữ lại 2 đỉnh u, v (và các đỉnh khác)
 Chỉ bỏ cạnh uv.
Chú ý:
 Nếu G liên thông mà G - {v} mất liên thông thì đỉnh v gọi là
khớp.
- 51 -
 Nếu G liên thông G - {uv} mất liên thông thì cạnh uv gọi là
cầu.
Ví dụ:
a G có: 2 khớp c và d
e
2 cầu dc và de
c
b d
a
a e

c c
b d b Fde
a
G – {e} e G – {ab}
c
c
b d b d
G – {a} G – {ed}

G - {ab} vẫn liên thông  ab không phải cầu


 Thêm:
 G có 2 đỉnh u và v không kề nhau. Thêm cạnh uv cho u, v kề
nhau, ta đựơc G + uv
 G có đỉnh v. Thêm đỉnh u và cạnh uv, ta được G  uv
Ví dụ: a e

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

1.2. Các bài toán về đường đi

1.2.1. Đồ thị Euler.


Với một đa đồ thị liên thông.
Một đường đi từ đỉnh u đến đỉnh v qua tất cả mọi cạnh của đa đồ thị mỗi
cạnh chỉ qua 1 lần được gọi là đường đi Euler.

- 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

1.2.2. Đồ thị Hamilton


Với một đồ thị liên thông.
Một đường đi từ đỉnh u đến đỉnh v qua tất cả các đỉnh của đa đồ thị mỗi
đỉnh chỉ qua 1 lần được gọi là đường đi Hamilton.
Đặc biệt: Nếu đỉnh cuối v trùng với đỉnh đầu u thì đường đi Hamilton đó gọi là
chu trình Hamilton.
Đa đồ thị có chu trình Hamilton gọi là đa đồ thị Hamilton
Định lý: Đơn đồ thị vô hướng G(V,E) với n >2 đỉnh, mỗi đỉnh có bậc không nhỏ
hơn n/2 là đồ thị Hamilton
1.2.3. Bài toán: Người đưa thư Trung hoa.
Một nhân viên bưu điện nhận túi thư ở Sở, đi qua các phố để phát hết túi thư
rồi trở về Sở. Người ấy chọn:
 Đi qua những phố nào?
 Đi theo trình tự nào?
để đường đi qua ít phố nhất.
Xem cả hệ thống giao thông thành phố là một đồ thị liên thông với:
 Các giao lộ là các đỉnh
 Đoạn đường nối 2 giao lộ là cạnh.

- 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

Cứ 2 đỉnh trong V0(G) ta ghép lại thành 1 cặp, do đó có k cặp.


Với mỗi cách ghép cặp ta được 1 phân hoạch V0(G)
Ví dụ: V0 = {x, y, u, v, z, t} thì
P1 = {(x, y), (u, v), (z, t)} là 1 phân hoạch
P2 = {(x, t), (y, z), (u, v)} là 1 phân hoạch khác.

- 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

Tập các đỉnh bậc lẻ là: V0(G) = {u, v, x, y}


Có 3 phân hoạch Vr0 là: P1 =s{(u, v), (x,xy)} y
P2 = {(u, x), (v, y)}
P3 = {(u, y), (v, x)}
Nếu thêm các cạnh song song như đường đứt nét trên hình vẽ, thì
d(P1) = d(u, v) + d(x, y) = 2 + 1 = 3
d(P2) = d(u, x) + d(v, y) = 2 + 2 = 4
d(P3) = d(u, y) + d(v, x) = 3 + 1 = 4
Vậy m(G) = d(P1)
Căn cứ vào P1 ta vạch ra hành trình là: utsrusxvcxzyxywzvtu: 18 đoạn
p + m(G) = 15 + 3 = 18.
Định lí 2*: Trong đa đồ thị có hướng liên thông, sẽ có đường đi Euler từ đỉnh u
đến đỉnh v khi và chỉ khi.
 Đỉnh u có bậc ra = bậc vào + 1
 Đỉnh y có bậc vào = bậc ra + 1
 Mọi đỉnh khác có bậc vào = bậc ra.

- 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

Xuất phát từ u. b: l(u, b) = 4


Kề với u có c: l(u, c) = 2 nhỏ nhất: chọn c
b: l(u, b) = 4
Kề với u và c có d: l(c, b) = 1 nhỏ nhất: chọn b
e: l(c, d) = 8
l(c, e) = 10
d: l(b, d) = 5 nhỏ nhất: chọn d
Kề với u, c, b có l(c, d) = 8
e: l(c, e) = 10
e: l(d, e) = 2 nhỏ nhất: chọn e
Kề với u, c, b, d có l(c, e) = 10
y: l(d, y) = 6
Kề với u, c, b, d, e chỉ còn y
Đường đi có trọng số nhỏ nhất từ u đến y là: ucbdey
Trọng số = 2 + 1 + 5 + 2 + 3 = 13

CHƯƠNG 2: BIỂU ĐIỄN ĐỒ THỊ TRÊN MÁY TÍNH

Để 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

2/ Ma trận kề của đồ thị có hướng là không đối xứng.


3/ Với đa đồ thị, ma trận kề cũng xây dụng như trên, chỉ khác là:
 ij = k nếu đỉnh i có cạnh song song đến j
0 nếu đỉnh i không kề đỉnh j.
4/ Với đồ thị có trọng số thì thay ma trận kề bằng ma trận có trọng số như sau:
 ij = l(i, j) là trọng số của cạnh ij
 nếu i không kề j
trong đó, giá trị của  tùy thuộc vào tình huống của bài toán.
Chẳng hạn, ta cho  = 0 nếu j trùng với i, tức là tại đỉnh i có khuyên, hoặc  =
+  nếu không có cung ji: chú ý không được đi ngược chiều!

- 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,2) (1,3) (2,3) (2,4) (3,5) (4,5) (4,6) (5,2) (5,6)

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)

b/ Với đồ thị có hướng


2 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

Ke [1] = {2, 3, 5} Ke [1] = {2, 3}


Ke [2] = {1, 3, 5} Ke [2] = 
Ke [3] = {1, 2, 4} Ke [3] = {2, 4}
Ke [4] = {3, 5, 6} Ke [4] = 
Ke [5] = {1, 2, 4, 6} Ke [5] = {4, 6}
Ke [6] = {4, 5} Ke [6] = {5}
Phương pháp danh sách kề đặc biệt hay dùng trong các bài toán liên quan
đến đường đi trong đồ thị.

- 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:

Cây có 1 đỉnh Cây có 2 đỉnh


Không có cạnh 1 cạnh Cây có 12 đỉnh - 11 cạnh
F

Không phải cây vì không liên thông Không phải câyvì có chu trình.

Ví dụ 2: Nhiều đối tượng nghiên cứu có cấu trúc cây, như:


- Mục lục của một cuốn sách hay cấu trúc của 1 chương
- Phả hệ của 1 dòng họ
- Trường độ của 1 nốt nhạc, …
Hình vẽ biểu thị cấu trúc của chương đồ thị

- 70 -
Đồ thị

Các khái niệm Bài toán về đường đi

Đườ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

Ví dụ 3: Tập X có 3 tập con A, B, C; Tập A có 2 tập con E, F; Tập C có 3 tập


con G, H, I; Tập H có 2 tập con J, K. Thông tin đã đầy đủ, nhưng khó quản lí
những thông tin đó một cách rành mạch. Vì vậy ta dùng cấu tạo cây như sau:

B C
A

G H
E F I

Ví dụ 4: Một biểu thức số học đơn giản: K


J
u
x + y(z – t) +
v

- 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

Qua sơ đồ này thấy quá trình tính toán rất rõ ràng.


3.1.2 Rừng
Nhiều cây ghép lại nhưng không tạo ra chu trình được gọi là rừng.
Rừng là 1 bộ phận liên thông của rừng. Rừng liên thông là rừng chỉ có 1 cây.
3.1.3 Tính chất của cây
Các tính chất sau đây là tương đương nhau
Cho đồ thị T có n đỉnh: n  2
1. T liên thông và không có chu trình (tức là T là 1 cây)
2. T liên thông và có n - 1 cạnh
3. T không có chu trình và có n - 1 cạnh.
4. T liên thông, nhưng nếu bỏ đi 1 cạnh bất kỳ thì mất liên thông.
5. Giữa 2 đỉnh bất kỳ của T chỉ có 1 đường đi sơ cấp duy nhất.
6. T không có chu trình, nhưng nếu thêm 1 cạnh thì xuất hiện 1 chu
trình sơ cấp, duy nhất.
3.1.4 Cây có hướng
Cây có hướng là một đồ thị có hướng liên thông và không có chu trình.
Nói cách khác cây có hướng là một đồ thị có hướng mà đồ thị đối xứng của nó
(thay cung bằng cạnh) là một cây.
- 73 -
Chú ý:
1/ Trong một cây, nếu có một đỉnh đặc biệt: từ đó đi được đến mọi đỉnh khác
của cây, thì đỉnh đặc biệt đó gọi là gốc của cây và cây đó gọi là cây có gốc.

d c k

R
h
e a
b g
Cây có gốc R

Cây không có
gốc

2/ Trong cây có gốc thì:


Gốc có bậc vào bằng 0. Các đỉnh khác có bậc vào bằng 1.
3/ Quy ước:
Cây có gốc được vẽ ngược:
-
Gốc ở tầng 0
-
Các đỉnh kề gốc ở tầng 1, dưới tầng 0
-
Các đỉnh kề với các đỉnh ở tầng 1 thì ở tầng 2: dưới tầng 1.
Với quy ước đó, cây có gốc mọc ngược như sau:

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

T5 = T4  DC hoặc T5  T4  DC


Kết quả thu được cũng giống như làm bằng thuật toán Kruskal.
* Nếu lấy đỉnh C thì:
T1 = C
T2 = T1  CD
T3 = T2  DE
T4 = T3  EB
T5 = T4  BA
Kết quả cũng giống như lấy từ đỉnh A.
Ghi chú: Với đồ thị có n đỉnh, người ta tính ra rằng:
-
Thuật toán Kruskal có độ phức tạp cỡ n2
-
Thuật toán Prim có độ phức tạp cỡ n3.
Vậy thuật toán Kruskal khả thi hơn.
3.3 Cây nhị phân
3.3.1 Định nghĩa
- Cây có gốc, mà các đỉnh của nó có nhiều nhất 2 con được gọi là cây nhị
phân. Chiều cao của cây là chiều dài của đường đi dài nhất trong cây. Chiều cao
của cây có số đo bằng số thứ tự của tầng cao nhất.
- 77 -
- Cây nhị phân mà các đỉnh trong đều có đủ 2 con, các đỉnh ngoài đều ở
tầng cao nhất được gọi là cây nhị phân đầy đủ.

Tầng
R 0

Tầng
a b 1

Tầng
c 2
d f
e

3.3.2 Tính chất của cây nhị phân đầy đủ


a. ở tầng thứ i, cây có 2i đỉnh.
b. Cây có chiều cao h thì có 2 h+1 -1 đỉnh. Cây có n đỉnh thì có (log 2(n+1) – 1)
tầng.
c. Số đỉnh ngoài nhiều hơn số đỉnh trong 1 đỉnh.
3.3.3 Lưu trữ cây nhị phân trên máy tính
Cây nhị phân là một đồ thị mà ta đã biết các cách lưu trữ đồ thị trên máy tính.
Chú ý:
a. Lưu trữ nối tiếp
Cây nhị phân được lưu trữ như một vectơ (mảng một chiều), mỗi đỉnh lưu
trữ ở một thành phần của vectơ.
* Với cây nhị phân đầy đủ: Ta đánh số thứ tự các đỉnh theo trình tự: Tầng 0, rồi
tầng 1, ở mỗi tầng thì đánh số từ trái qua phải. Đỉnh được số i lưu trữ ở thành
phần thứ i của vectơ.
Ưu điểm: Biết được địa chỉ của đỉnh “cha” thì tìm ra địa chỉ của đỉnh “con” và
ngược lại. “cha” ở địa chỉ i thì “con” bên trái ở địa chỉ 2i. “con” bên phải ở
địa chỉ 2i + 1
Đỉnh thứ i lưu trữ ở V[i].

Ví dụ: Lưu trữ trên máy tính như vectơ: V (a, b, c, d, e, f, g)

- 78 -
a

b c

e f
d g

Ta sẽ có:

a b c d e f g

V[1] V[2] V[3] V[4] V[5] V[6] V[7]

* 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

+ Theo thứ tự trước: abdcegfhk g h k

+ Theo thứ tự giữa: dbaegchfk


+ Theo thứ tự sau: dbgehkfca
Để xử lý thông tin ở một đỉnh đó, tức là tìm đường đi đến đỉnh đó khi xuất phát
từ một đỉnh chọn trước.
Người ta có 2 cách tìm kiếm sau đây:
a. Tìm kiếm theo chiều sâu:
Trong đồ thị vô hướng G(V, E), xuất phát từ đỉnh v 0, tìm đường đi đến đỉnh
cần tìm v.
Thuật toán tìm kiếm theo chiều sâu được mô tả như sau:
-
Tìm đỉnh v1 nào đó kề với v0 và chưa tìm đến
-
Được v1 rồi lại làm như với v2: Tìm đỉnh v2 nào đó kề với v1 và chưa tìm
đến.
Cứ như vậy, cho đến khi tìm thấy v.
Quá trình này sẽ gặp các trường hợp sau đây:
Tìm đến đỉnh w mà các đỉnh kề với nó thì đã tìm đến rồi, nhưng vẫn chưa
đến đỉnh cần tìm v (nghĩa là đồ thị vẫn còn những đỉnh chưa tìm đến). Khi đó,

- 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 -

You might also like