Professional Documents
Culture Documents
Toán 2
Bộ môn Toán - ĐẠI HỌC THĂNG LONG
i
Mục lục
2.4.2 Giải hệ thức truy hồi tuyến tính thuần nhất hệ số hằng . 81
2.5 Hệ thức truy hồi tuyến tính không thuần nhất hệ số hằng . . . . 89
2.6 Độ phức tạp của thuật toán . . . . . . . . . . . . . . . . . . . . 92
2.6.1 Khái niệm cơ bản . . . . . . . . . . . . . . . . . . . . . 92
2.6.2 Thứ bậc trong tập các hàm số . . . . . . . . . . . . . . 98
2.6.3 Định lí cơ bản cho phân tích thuật toán . . . . . . . . . 99
M ục đích chính của chúng ta ở chương này là tìm hiểu khái niệm thuật
toán theo nghĩa trực giác và một số đặc trưng. Sau đó, chúng ta sẽ lần
lượt xem xét một số thuật toán trên nền những khái niệm cơ bản như số nguyên,
phép chia, số học đồng dư, trường hữu hạn, đa thức, . . . .
Khái niệm 1.1.1 Thuật toán là một hệ thống chặt chẽ và rõ ràng những qui
tắc nhằm xác định một dãy thao tác trên những đối tượng, sao cho sau một số
hữu hạn bước thực hiện dãy thao tác đó, ta đạt được mục tiêu định trước.
Nhận xét 1.1.2 Từ khái niệm thuật toán ở trên, ta chú ý rằng nếu cho trước một
thuật toán thì hệ thống những qui tắc của nó, mang cho bất cứ đối tượng nào
(người / máy) thực hiện, trong cùng một điều kiện cho trước, ta cũng phải thu
được kết quả như nhau dù cho đối tượng thực hiện thuật toán có thể không hiểu
gì về bản chất cũng như ý nghĩa của vấn đề.
Ví dụ 1.1.3 Mô tả thuật toán tìm phần tử lớn nhất trong một dãy hữu hạn
a1 , a2 , . . . , an cho trước.
Khi gặp bài toán này, cách giải quyết thông thường nhất mà chúng ta hay làm
với n cụ thể là duyệt lần lượt n số trong dãy đã cho, so sánh để chỉ ra số lớn
nhất. Nhưng khi cần chỉ ra các bước thực hiện về mặt nguyên tắc để giải quyết
bài toán này, chúng ta cần hình thức hóa chúng dưới dạng ngôn ngữ thông
Chương 1. Thuật toán, Số nguyên, Trường hữu hạn, Đa thức
thường sao cho các bước của chúng ta đã chỉ ra có thể áp dụng cho mọi dãy n
số a1 , a2 , . . . , an bất kì.
Các bước thực hiện được mô tả như sau:
B1 Giá trị cực đại tạm thời sẽ nhận giá trị đầu tiên (a1 ) của dãy. Phần tử đang
duyệt cũng chính là a1 . Ta hiểu rằng giá trị cực đại tạm thời là giá trị lớn
nhất trong những giá trị kể từ đầu dãy đến phần tử đang xét.
B2 Xét phần tử có thứ tự kế tiếp thứ tự của phần tử đang xét ở bước trước (nếu
bước trước đang xét phần tử ak thì ta sẽ xét phần tử ak 1 ). So sánh phần
tử này với giá trị cực đại tạm thời. Giá trị cực đại tạm thời sẽ giữ nguyên
giá trị nếu nó không nhỏ thua phần tử đang xét. Trái lại, nó sẽ nhận giá trị
của phần tử đang xét.
B3 Lặp lại bước B2 chừng nào phần tử đang xét không phải phần tử cuối cùng
trong dãy.
B4 Kết thúc và ta có giá trị lớn nhất cần tìm chính là giá trị cực đại tạm thời
cuối cùng.
Sử dụng ngôn ngữ thông thường để mô tả thuật toán như trên rất thuận tiện
trong việc suy nghĩ, trao đổi thuật toán giữa người với người. Cách thức này đã
tồn tại hàng ngàn năm cùng với những thuật toán cổ xưa nhất của loài người.
Nhưng cùng với sự ra đời của máy tính điện tử, nội dung của các thuật toán dần
được thể hiện thông qua giả mã một dạng ngôn ngữ hình thức hơn (có thể rắc
rối khó hiểu hơn với con người, nhưng thuận tiện hơn khi làm việc với máy tính
điện tử).
Dưới đây là mô tả giả mã của thuật toán trên:
Thuật toán 1 Thuật toán tìm phần tử lớn nhất trong một dãy hữu hạn a1 , a2 , . . . , an.
Đầu vào: Dãy hữu hạn a1 , a2 , . . . , an.
Đầu ra: Giá trị lớn nhất M maxta1 , a2 , . . . , anu.
1: max : a1 .
2: Duyệt tất cả k sao cho 2 ¤ k ¤ n Thực hiện
3: Nếu max ak thì
4: max : ak.
5: Kết thúc Nếu
6: Kết thúc Duyệt
7: M : max.
Trong dạng giả mã trên, ở dòng đánh số 1, ta thấy kí hiệu “:=”. Đây là kí
hiệu để chỉ giá trị đứng sau nó được gán cho “biến” đứng trước nó. Dòng số 2
và dòng số 6 để chỉ phép duyệt hay một vòng lặp, duyệt các phần tử trong dãy:
ak với k nhận các giá trị từ 2 đến n. Mỗi bước duyệt sẽ thực hiện công việc
được chỉ ra từ dòng số 3 đến dòng số 5. Công việc này là một phép thử điều
kiện: nếu biểu thức logic thỏa mãn thì công việc ở dòng số 4 sẽ được thực hiện,
trái lại thì thôi.
Trong thực tiễn, hay gặp một vài thuật ngữ khá gần với thuật ngữ “thuật
toán”, như: kịch bản, cách dùng, quá trình, tiến trình, chương trình hành động,
luật lệ, phương pháp, thủ tục,. . . . Ta cần đưa ra những tính chất đặc trưng của
khái niệm “thuật toán” để phân biệt khái niệm đó với những khái niệm khác.
Thuật toán có sáu đặc trưng cơ bản: tính dừng sau hữu hạn bước, tính xác định,
tính phổ dụng, đầu vào, đầu ra, tính đúng đắn hay tính hiệu quả. Sẽ rất hữu ích
khi mô tả các thuật toán nếu ta ghi nhớ các tính chất đó trong đầu.
Thuật toán bao giờ cũng phải dừng sau một số hữu hạn bước thực hiện. Khi
nói đến tính kết thúc của thuật toán, chúng ta cần chú ý rằng mô tả các bước
trông có vẻ là hữu hạn nhưng chưa chắc đã dừng sau hữu hạn bước.
Ví dụ 1.1.4 Đoạn qui tắc sau không dừng sau hữu hạn bước mặc dù mô tả của
nó dường như chỉ có ba bước nên nó không phải là thuật toán:
B1 Xóa bảng.
B2 Viết số 1 lên bảng.
B3 Thực hiện B1.
Khi xây dựng thuật toán, phải chứng minh tính kết thúc cho nó. Cụ thể là nêu
bật được ý sau: với những dữ liệu tùy ý nằm trong miền thao tác của thuật toán
thì thuật toán sẽ dừng sau hữu hạn bước. Ngoài ra ta thường sẽ cố gắng chỉ rõ
thuật toán dừng ở đâu, bước nào, lập công thức đánh giá tổng số bước thực hiện.
Tính dừng của thuật toán thường được chứng minh bằng cách dựa trên tiến độ
của thuật toán, xây dựng một dãy số nguyên đơn điệu và bị chặn. Khi đó hai
tính chất đơn điệu và bị chặn của dãy số nguyên sẽ đảm bảo cho tính kết thúc
của thuật toán.
Ở mỗi bước, các thao tác phải hết sức rõ ràng, không được phép gây nên
sự nhập nhằng, lẫn lộn, tùy tiện. Trong cùng một điều kiện, hai “bộ xử lý”
(người hoặc máy) thực hiện cùng một bước của thuật toán thì phải cho cùng
một kết quả. Chẳng hạn thuật toán 1 tìm số lớn nhất, dù cho máy tính hay bất
cứ người nào thực hiện, kết quả trả về vẫn đảm bảo là số lớn nhất trong dãy
a1 , a2 , . . . , an .
Thuật toán phải có tính năng có thể giải bất kì bài toán nào trong một lớp
bài toán. Cụ thể là thuật toán có thể làm việc với các dữ liệu khác nhau trong
một miền xác định và luôn luôn dẫn đến kết quả mong muốn. Trong ví dụ thuật
toán 1 tìm số lớn nhất ở trên, ta sẽ luôn có số lớn nhất của dãy a1 , a2 , . . . , an
cho dù n và bản thân các giá trị a1 , a2 , . . . , an có thay đổi.
Một thuật toán có thể có nhiều đại lượng vào mà chúng ta gọi là dữ liệu đầu
vào. Sau khi dừng thuật toán, tùy theo chức năng mà thuật toán đảm nhiệm,
chúng ta có thể thu được một số đại lượng ra xác định. Tuy nhiên vẫn có những
thuật toán không có dữ liệu vào và cũng có thể không có dữ liệu ra.
Yêu cầu quan trọng nhất của thuật toán ngoài tính dừng sau hữu hạn bước
là tính đúng đắn, cụ thể là: với dữ liệu vào cho trước, sau một số hữu hạn bước
thuật toán phải dừng và cho kết quả mong muốn. Ta chú ý rằng bằng phép chạy
thử thuật toán với một số bộ dữ liệu nào đó chỉ có thể phát hiện tính sai của thuật
toán chứ không khẳng định được tính đúng đắn của thật toán. Muốn khẳng định
tính đúng đắn của thuật toán thì ta phải tiến hành chứng minh. Có thể và nên
chứng minh tính đúng đắn của thuật toán bằng cách dựa trên chính văn bản của
thuật toán. Ta sẽ xem xét cách chứng minh tính đúng đắn của một số thuật toán
ở những phần nội dung tiếp theo của cuốn sách này.
Những bài toán xác định vị trí của một phần tử nào đó trong một bảng liệt
kê tuyến tính là những bài toán thường gặp trong nhiều trường hợp khác nhau.
Những bài toán như vậy được gọi là những bài toán tìm kiếm. Trong phần này
ta sẽ xem xét một số thuật toán tìm kiếm.
Bài toán tìm kiếm tổng quát được mô tả như sau: xác định vị trí của phần
tử x trong một bảng liệt kê các phần tử phân biệt a1 , a2 , . . . , an hoặc chỉ ra
rằng nó không có mặt trong bảng liệt kê đó. Lời giải của bài toán trên là vị trí i
của số hạng ai trong bảng liệt kê nếu ai x, và là 0 nếu x không có mặt trong
bảng liệt kê.
Thuật toán để giải bài toán trên rất đơn giản. Nó có tên là thuật toán tìm
kiếm tuyến tính hay tìm kiếm tuần tự. Đầu tiên ta so sánh x với a1 . Nếu
x a1 thì kết quả trả về là vị trí 1. Khi x a1 thì ta so sánh x với a2 . Nếu
x a2 thì kết quả trả về là vị trí 2. Khi x a2 thì ta so sánh x với a3 . Tiếp
tục quá trình này bằng cách so sánh x với từng số hạng ai của bảng liệt kê cho
tới khi x xuất hiện tại một vị trí nào đó ta gặp hoặc tất cả các phần tử của bảng
đã được so sánh mà vẫn không gặp x. Giả mã của thuật toán này được trình bày
như trong thuật toán 2.
Thuật toán trên hoàn toàn có thể được áp dụng cho mọi dãy gồm n số phân
biệt a1 , a2 , . . . , an . Nhưng nhược điểm của nó là ứng với mọi dãy cụ thể,
trong trường hợp xấu nhất, số phép so sánh đúng bằng độ lớn n của dãy số dữ
liệu đầu vào. Bây giờ ta xem xét một thuật toán tìm kiếm khác, có số phép so
sánh trong trường hợp xấu nhất ít hơn, nhưng chỉ áp dụng cho các dãy gồm n số
phân biệt được sắp tăng dần hoặc giảm dần. Thuật toán thứ hai này được gọi là
thuật toán tìm kiếm nhị phân. Đầu tiên ta so sánh x với phần tử nằm ở “điểm
giữa” (phần tử ở vị trí t u) của bảng liệt kê. Nếu x bằng phần tử này thì
1 n
2
vị trí của x trong bảng đã được xác định. Nếu không, do bảng đã được sắp tăng
dần hoặc giảm dần nên x chỉ có thể rơi vào một trong hai nửa của bảng (bảng
con). Miền tìm kiếm đã được hạn chế chỉ còn một nửa. Tiếp tục so sánh x với
phần tử ở giữa và cứ như vậy, ta sẽ có được vị trí của x hoặc biết được x không
nằm trong bảng đã cho.
Lời giải:
l
Giả mã của thuật toán tìm kiếm nhị phân được trình bày trong thuật toán 3.
m : t
i j
3: u.
2
4: Nếu x ¡ am thì
5: i : m 1.
6: không thì
7: j : m.
8: Kết thúc Nếu
9: Kết thúc Trong khi
10: Nếu x ai thì
11: vitri : i.
12: không thì
13: vitri : 0.
14: Kết thúc Nếu
15: Kết quả trả về là vitri.
Như chúng ta đã biết, trong quá trình giải bài toán đếm, thông thường chúng
ta sẽ sử dụng một số công cụ để đếm các “cấu hình tổ hợp” (hoán vị, chỉnh hợp,
tổ hợp, . . . ) thỏa mãn yêu cầu đầu bài. Thế nhưng có nhiều loại bài toán mà để
giải nó, chỉ áp dụng các công cụ đếm thôi chưa đủ. Chúng ta còn cần phải có
khả năng liệt kê các cấu hình tổ hợp theo thứ tự mà chúng ta mong muốn để rồi
qua đó, ta xây dựng được lời giải của bài toán đặt ra. Trong phần này, chúng
ta sẽ tìm hiểu một số thuật toán liệt kê cấu hình tổ hợp theo thứ tự mong muốn
dựa trên phương pháp sinh.
Phương pháp sinh có thể áp dụng để giải bài toán liệt kê cấu hình tổ hợp nếu
như hai điều kiện sau được thực hiện:
a) Có thể xác định được một thứ tự trên tập các cấu hình tổ hợp cần liệt kê. Từ
đó có thể xác định được cấu hình đầu tiên và cấu hình cuối cùng trong thứ
tự đã xác định.
b) Xây dựng được thuật toán từ cấu hình chưa phải là cuối cùng đang có, đưa
ra cấu hình kế tiếp nó.
Ta sẽ gọi thuật toán nói trong điều kiện b) là thuật toán sinh kế tiếp. Rõ ràng là
thứ tự trong điều kiện a) cần được lựa chọn sao cho có thể xây dựng được thuật
toán sinh kế tiếp. Giả thiết rằng hai điều kiện nêu trên đã được thực hiện, khi đó
thuật toán sinh để giải bài toán liệt kê cấu hình tổ hợp đặt ra được mô tả bằng
thuật toán 4 (trong đó Sinh kế tiếp là thuật toán con sinh cấu hình kế tiếp).
Trong nội dung tiếp ngay đây, ta sẽ xem xét một số ví dụ sinh cấu hình tổ
hợp. Tất cả đều có cùng dạng thuật toán chính như thuật toán 4. Ta sẽ chỉ tìm
và nêu ra những thuật toán sinh kế tiếp tương ứng.
Ví dụ 1.1.7 Liệt kê tất cả các hoán vị của tập t1, 2, 3, . . . , nu theo thứ tự từ
điển.
Lời giải: Ta đi xây dựng thuật toán sinh hoán vị kế tiếp theo thứ tự từ điển.
Hoán vị đầu tiên của ta là 1, 2, . . . , n. Hoán vị cuối cùng là n, pn 1q, . . . , 1.
Giả sử ta đã có hoán vị cho trước a1 , a2 , . . . , an (không phải là hoán vị cuối
cùng). Ta tìm từ phải qua trái (của hoán vị đang có) chỉ số j đầu tiên thỏa mãn
aj aj 1 . Ví dụ nếu ta đang có hoán vị 3, 6, 2, 5, 4, 1 thì do 4 ¡ 1, 5 ¡ 4,
2 5 nên chỉ số j 3. Sau khi có chỉ số j, ta tìm tiếp ak là số nhỏ nhất
còn lớn hơn aj trong các số ở bên phải aj . Trong ví dụ minh họa với hoán vị
3, 6, 2, 5, 4, 1 thì ak 4 với k 5. Ta có khẳng định:
Vậy hoán vị được sinh kế tiếp là hoán vị nhỏ nhất trong các hoán vị có dạng
a1 , a2 , . . . , aj 1 , ak , bj 1 , . . . , bn (trong đó bj 1 , . . . , bn là hoán vị nào
đó của aj , aj 1 , . . . , ak1 , ak 1 , . . . , an ). Ta có aj 1 ¡ aj 2 ¡ . . . ¡
ak1 ¡ aj do aj 1 ¡ aj 2 ¡ . . . ¡ ak1 ¡ ak ¡ aj . Ta cũng có
aj ¡ ak 1 ¡ . . . ¡ an vì ak ¡ ak 1 ¡ . . . ¡ an và ak là số nhỏ nhất lớn
hơn aj . Vậy
an an1 . . . ak 1 aj ak1 . . . aj 1.
a1 , a2 , . . . , aj 1 , ak , an , an1 , . . . , ak 1 , aj , ak1 , . . . , aj 1
B1 Tìm từ phải qua trái (của hoán vị đang có a1 , a2 , . . . , an ) chỉ số j đầu tiên
sao cho aj aj 1 .
B2 Tìm ak là số nhỏ nhất còn lớn hơn aj trong số các số ở bên phải aj .
B3 Đổi chỗ aj với ak .
B4 Lật ngược đoạn từ aj 1 đến an .
Các qui tắc trên được thể hiện thông qua thuật toán 5 dưới dạng giả mã.
Ví dụ 1.1.8 Liệt kê tất cả các xâu nhị phân độ dài n theo thứ tự từ điển.
looomooon
Lời giải: Xâu nhị phân đầu tiên là 00 . . . 0. Xâu nhị phân cuối cùng sẽ là
n bit
looomooon
11 . . . 1. Giả sử b1 , b2 , . . . , bn là xâu nhị phân hiện tại (không phải xâu nhị
n bit
phân cuối cùng). Qui tắc sau sẽ cho ta xâu nhị phân kế tiếp:
B1 Tìm chỉ số i đầu tiên từ phải qua trái (i n, pn 1q, . . . , 1) thỏa mãn
bi 0.
B2 Gán lại bi 1 và bj 0 với tất cả j ¡ i.
Việc chứng minh tính đúng đắn của qui tắc trên dành cho các bạn đọc như một
bài tập đơn giản.
Chẳng hạn với xâu 1101011111 ta có i 5 và xâu nhị phân kế tiếp sẽ là
1101100000.
Bài toán liệt kê tất cả các xâu nhị phân độ dài n theo thứ tự từ điển chính là
bài toán liệt kê tất cả các tập con có thể của tập có n phần tử ta1 , a2 , . . . , an u.
Phần tử ai sẽ có mặt trong tập con đang xét nếu và chỉ nếu bit thứ i (các bit
được tính từ 1 từ trái qua phải) nhận giá trị 1. l
Thuật toán 6 là biểu diễn dạng giả mã của qui tắc sinh xâu nhị phân kế tiếp theo
thứ tự từ điển.
Ví dụ 1.1.9 Liệt kê tất cả các tập con m phần tử của tập n phần tử (tổ hợp
chập m của n phần tử).
Lời giải: Ta có thể coi như tập n phần tử đã cho là tập A t1, 2, . . . , nu.
Mỗi tập con m phần tử của A có thể biểu diễn bởi một dãy có thứ tự các phần tử
a1 , a2 , . . . , am (ai P A) thỏa mãn 1 ¤ a1 a2 . . . am ¤ n. Ta chọn
thứ tự từ điển là thứ tự để sinh tập con kế tiếp của tập con ta1 , a2 , . . . , am u
biểu diễn bởi dãy a1 , a2 , . . . , am (ai P A) thỏa mãn 1 ¤ a1 a2
. . . am ¤ n. Tập con đầu tiên là t1, 2, . . . , mu và tập con cuối cùng là
tn m 1, n m 2, . . . , nu. Tính đúng đắn của thuật toán sinh kế tiếp
sau được đề nghị như một bài tập dành cho các bạn:
B1 Tìm phần tử đầu tiên từ phải qua trái ai của dãy a1 , a2 , . . . , am thỏa mãn
ai n m i.
Chẳng hạn tập con 4 phần tử của tập t1, 2, 3, 4, 5, 6u đang xét là tập
t1, 2, 5, 6u. Lùi từ phải qua trái ta thấy a4 6 64 4, a3 5 64 3,
a2 2 6 4 2. Vậy i 2. Ta thay a2 bởi 2 1 3, a3 bởi
2 3 2 1 4 và a4 bởi 2 4 2 1 5. Vậy tập con kế tiếp là
t1, 3, 4, 5u. l
Thuật toán 7 là biểu diễn dạng giả mã của qui tắc sinh tập con kế tiếp theo thứ
tự từ điển.
Mặc dù thuật toán sinh cụ thể nào cũng có tính chất phổ dụng (áp dụng được
cho mọi bộ dữ liệu ứng với bài toán cho trước) nhưng phương pháp sinh nói
chung không có tính chất phổ dụng. Không phải cấu hình kế tiếp nào cũng được
sinh một cách đơn giản từ cấu hình hiện tại. Mặt khác, cấu hình ban đầu không
phải dễ tìm vì ngay cả sự tồn tại của một cấu hình nhiều khi vẫn còn là nghi vấn.
Vì vậy, thông thường thuật toán sinh chỉ có thể xây dựng được đối với những
Thuật toán 7 Sinh tập con m phần tử của tập t1, 2, . . . , nu kế tiếp theo thứ tự từ điển.
Đầu vào: Tập con hiện tại ta1 , a2 . . . amu tn m 1, n m 2, . . . nu thỏa mãn
1 ¤ a1 a2 . . . am ¤ n.
Đầu ra: Tập con gồm m phần tử liền sau theo thứ tự từ điển.
1: i : m.
2: Trong khi ai n m i Thực hiện
3: i : i 1.
4: Kết thúc Trong khi
5: ai : ai 1.
6: Duyệt tất cả j sao cho i 1 ¤ j ¤ m Thực hiện
7: aj : ai j i.
8: Kết thúc Duyệt
9: Tập con m phần tử mới sinh liền sau tập con m phần tử đã cho theo thứ tự từ điển là
ta1, a2, . . . , amu.
bài toán liệt kê tổ hợp đơn giản. Để giải những bài toán liệt kê phức tạp, người
ta thường dùng thuật toán có tính phổ dụng cao hơn. Đó là thuật toán quay lui.
Mệnh đề 1.1.10 Mọi số nguyên không âm nhỏ hơn n! đều có thể biểu diễn duy
nhất dưới dạng:
Ta không quan tâm đến chứng minh của mệnh đề trên mặc dù nó rất đơn giản.
Chúng ta sẽ chỉ xem xét các khía cạnh ứng dụng của khai triển Cantor và các số
Cantor của một số nguyên nhỏ hơn n! cho trước.
Cho hoán vị p1 , p2 , . . . , pn của tập t1, 2, . . . , nu. Đặt ai (với i
1, n 1) là số các số nguyên nhỏ hơn i 1 mà đứng sau i 1 trong hoán vị
đã cho. Ta có ai ¤ i với mọi i 1, n 1. Vậy mỗi hoán vị p1 , p2 , . . . , pn
của tập t1, 2, . . . , nu tương ứng với duy nhất bộ số a1 , a2 , . . . , an1 hay số
nguyên 0 ¤ a1 .1! a2 .2! . . . an1 .pn 1q! ¤ n! 1.
Ngược lại, cho trước số nguyên không âm nhỏ hơn n!. Ta có thuật toán
xây dựng một hoán vị của tập t1, 2, . . . , nu tương ứng với số đã cho. Trước
tiên ta khai triển Cantor số nguyên không âm nhỏ hơn n! đã cho, được bộ số
a1 , a2 , . . . , an1 . Đặt n vào vị trí còn trống thứ n an1 trong hoán vị (các
vị trí còn trống được đánh số từ 1 trở đi). Rõ ràng là khi đó, sau vị trí của n
còn có an1 vị trí trống. Điều đó có nghĩa là an1 là số các số nguyên nhỏ hơn
n và đứng sau n trong hoán vị. Đánh số lại các vị trí còn trống theo thứ tự từ
trái qua phải theo thứ tự 1, 2, . . . , n 1. Đặt n 1 vào vị trí còn trống thứ
pn 1q an2. Ta cứ tiếp tục quá trình này cho tới khi 1 được đặt vào vị trí
trống cuối cùng.
Nhận xét 1.1.12 Hai hoán vị khác nhau của cùng tập t1, 2, . . . , nu sẽ được
tương ứng với hai con số nguyên không âm nhỏ hơn n! khác nhau. Hoán vị nhỏ
hơn (đi trước) theo thứ tự từ điển sẽ tương ứng với số nguyên nhỏ hơn.
Thuật toán nói trên được gọi là thuật toán sinh hoán vị Cantor. Dạng giả mã
của nó được trình bày trong thuật toán 8.
Tập hợp số nguyên Z t0, 1, 2, . . .u bao gồm tất cả các số tự nhiên
và đối của tất cả các số tự nhiên. Khác với tập số tự nhiên N (nguyên lí sắp
tốt), tập hợp số nguyên không có số nhỏ nhất. Trong tập hợp số nguyên, các
phép toán cộng, trừ, nhân luôn luôn thực hiện được. Tuy nhiên, phép chia một
số nguyên cho một số nguyên khác 0 không phải bao giờ cũng thực hiện được.
Chính vì lí do phép chia cho một số nguyên khác 0 không phải bao giờ cũng
thực hiện được, nên những ý tưởng mà chúng ta phát triển trong phần này đều
dựa trên khái niệm về tính chia hết. Tính chia hết dẫn dắt chúng ta tới khái
niệm số nguyên tố và định lí cơ bản của số học (khẳng định rằng mọi số nguyên
dương khác 1 đều có thể biểu diễn một cách duy nhất dưới dạng tích của những
số nguyên tố). Việc xác định một số có nguyên tố hay không và phân tích một
số nguyên dương khác 1 thành tích của những số nguyên tố có một vai trò quan
trọng trong ngành mật mã. Khi phép chia cho một số nguyên khác 0 không thực
hiện được, ta sẽ có thương số và số dư. Thao tác tính toán trên các số dư sẽ dẫn
tới số học đồng dư, có một vai trò không nhỏ trong tin học.
Định nghĩa 1.2.1 Cho hai số nguyên a và b, b 0. Ta nói a chia hết cho b,
hay b chia hết a nếu như có số nguyên q sao cho a bq. Khi ấy, người ta còn
nói a là bội của b hay b là ước của a và kí hiệu a .. b hay b a. Nếu a không
.
.
a.
chia hết cho b ta kí hiệu là a /.. b hay b
Chú ý: Nếu b a mà a 0 thì từ a bq ta có q 0 cho nên
|a| |b|.|q| ¥ |b| do |q| ¥ 1.
Tính chất 1.2.3 (Tính chất chia hết) Trên tập số nguyên Z :
Nếu a, b là những số nguyên bất kì (b 0) thì không phải lúc nào a cũng luôn
chia hết cho b. Một cách tổng quát, ta có định lí sau:
Định lý 1.2.1 (Thuật toán chia) Cho hai số nguyên a và b (b 0). Khi ấy có
duy nhất cặp số nguyên q, r thỏa mãn các hệ thức
a bq r và 0 ¤ r |b|.
14 Bộ môn Toán - ĐẠI HỌC THĂNG LONG
1.2. Số nguyên và phép chia
Chứng minh:
bq ¤ a bq |b|
hay
¤ a bq |b|.
0
Đặt r a bq ta có r P Z , a bq r, 0 ¤ r |b|.
Mệnh đề 1.2.6 Số nguyên a chia hết cho số nguyên b pb 0q khi và chỉ khi số
dư của phép chia a cho b bằng không.
Phân tích kể trên được gọi là dạng phân tích tiêu chuẩn của số a.
Mệnh đề 1.2.13 Ước nhỏ nhất lớn hơn 1 của một hợp số a không vượt quá
?a.
Chứng minh: Gọi p là ước nhỏ nhất lớn hơn 1 của a (do a là hợp số nên
a pq và q ¡ 1). Theo giả thiết p là ước nhỏ nhất lớn hơn 1 (tất nhiên p là
?
số nguyên tố) nên 1 p ¤ q. Vậy p2 ¤ pq a hay p ¤ a là điều cần
phải chứng minh. l
Từ mệnh đề trên ta có hệ quả sau:
Hệ quả 1.2.14 Nếu số tự nhiên a ¡ 1 không có một ước nguyên tố nào trong
?
khoảng từ 1 đến t au thì a là số nguyên tố.
Thuật toán 9 Thuật toán xây dựng bảng những số nguyên tố không vượt quá A.
Đầu vào: Số tự nhiên A ¡ 1.
Đầu ra: Tất cả những số nguyên tố không vượt quá A.
1: Duyệt tất cả k sao cho 0 ¤ k ¤ A Thực hiện
2: bk : k.
3: Kết thúc Duyệt
4: Xóa b0 , b1 .
5: m : 0, p1 : 2. ?
6: Trong khi pm 1 ¤ t Au Thực hiện
7: Đánh dấu pm 1 trong bảng bk (0 ¤ k ¤ A).
8: Xóa tất cả bội của pm 1 (trừ pm 1 ) trong bảng bk (0 ¤ k ¤ A).
9: m : m 1.
10: pm 1 :Số đầu tiên trong bảng chưa bị xóa cũng như chưa bị đánh dấu.
11: Kết thúc Trong khi
12: Tất cả những số nguyên tố không vượt quá A chính là những số còn lại không bị xóa trong
bảng bk (0 ¤ k ¤ A).
?
Tính đúng đắn của thuật toán 9 được chứng ? minh như sau: mọi hợp số
a ¤ A đều có một ước nguyên tố p ¤ a ¤ A cho nên ? p phải là một trong
các số nguyên tố bị đánh dấu p1 , p2 , . . . , pn với pn ¤ A pn 1 và do đó
a bị xóa với tư cách là bội của p. Vậy những số còn lại trong bảng chính là
những số nguyên tố không vượt quá A.
Ta cũng có thuật toán ngắn gọn kiểm tra xem một số n cho trước có phải là
số nguyên tố hay không dựa vào nhận xét: nếu n là số nguyên tố lớn hơn 5 thì
phần dư của phép chia n cho 6 chỉ là 1 hoặc 5. Nhận xét này cho phép ta chỉ
kiểm tra tính chia hết của n cho các số nguyên dương lớn hơn 1 và không vượt
quá căn bậc hai của n theo bước tăng 2, 4, 2, 4, . . ..
Chứng minh tính đúng đắn của thuật toán 10 rất đơn giản coi như bài tập
dành cho các bạn.
Và cuối cùng, để tìm dạng phân tích tiêu chuẩn của một số tự nhiên n cho
trước, ta có thuật toán 11.
Định nghĩa 1.2.16 Một số nguyên được gọi là ước chung của những số nguyên
a1 , a2 , . . . , an nếu nó là ước đồng thời của mỗi số đó.
Định nghĩa 1.2.17 Số lớn nhất d trong tất cả các ước chung của a1 , a2 , . . . , an
(không đồng thời bằng không) được gọi là ước chung lớn nhất của
a1 , a2 , . . . , an . Kí hiệu d UCLNpa1 , a2 , . . . , an q.
Định nghĩa 1.2.18 Nếu 1 là ước chung lớn nhất của a1 , a2 , . . . , an thì ta nói
a1 , a2 , . . . , an là nguyên tố cùng nhau. Còn nếu 1 là ước chung lớn nhất
của mọi cặp ai , aj với i j, i, j 1, 2, . . . , n thì ta nói a1 , a2 , . . . , an là
nguyên tố với nhau từng đôi một.
Ví dụ 1.2.19 UCLNp36, 64, 40q 4, UCLNp32, 56q 8.
Nhận xét 1.2.20 • Ta đã biết 1 luôn là ước chung của mọi số nguyên nên
a1 , a2 , . . . , an bao giờ cũng có ước chung ít nhất là số 1.
• Số 0 là bội của mọi số nguyên khác không nên nếu những số a1 , a2 , . . . , an
đều bằng 0 thì tất cả các số nguyên khác không đều là ước chung của chúng
và khi đó khái niệm ước chung lớn nhất là không có nghĩa. Do đó ta phải
có giả thiết các số đang xét a1 , a2 , . . . , an không đồng thời bằng 0. Hơn
nữa, tập hợp tất cả các ước chung của các số đang xét không thay đổi nếu
ta thêm vào hoặc bớt đi từ a1 , a2 , . . . , an những số 0. Do đó ta có thể
giả thiết ai 0 với i 1, 2, . . . , n.
Định lý 1.2.3 Giả sử c là một ước chung của a1 , a2 , . . . , an . Khi đó
c chia hết UCLNpa1 , a2 , . . . , an q. Ngược lại, nếu c là ước của
UCLNpa1 , a2 , . . . , an q thì c là ước chung của a1 , a2 , . . . , an .
Chứng minh: Xét tập hợp
M ta1x1 a2 x2 ... an xn | xi P Z , @i 1, 2, . . . , nu.
Bộ môn Toán - ĐẠI HỌC THĂNG LONG 19
Chương 1. Thuật toán, Số nguyên, Trường hữu hạn, Đa thức
Thuật toán 11 Thuật toán tìm dạng phân tích tiêu chuẩn của n.
Đầu vào: Số n P N , bảng p1 , p2 , . . . , pk tất cả những số nguyên tố không vượt quá
?n.
Đầu ra: Dạng phân tích tiêu chuẩn của n.
1: i : 1, αi : 0.
2: Trong khi n ¡ 1 Thực hiện
3: Trong khi n mod pi 0 Thực hiện
4: n : n div pi, αi : αi 1.
5: Kết thúc Trong khi
6: i : i 1, αi : 0.
7: Kết thúc Trong khi ¹ α
8: Dạng phân tích tiêu chuẩn n pi i .
¡
αi 0
d a1u1 a2 u2 ... P Z , i 1, 2, . . . , n và
an un , ui
d ¤ x, @x P M, x ¡ 0.
UCLNp
a1 a2
, ,...,
c c
an
c
q UCLNpa1,ca2, . . . , anq .
Hệ quả 1.2.25 Cần và đủ để một ước chung dương d của a1 , a2 , . . . , an là
UCLNpa1 , a2 , . . . , an q là , , . . . ,
a1 a2 an
nguyên tố cùng nhau.
d d d
Chứng minh: Ta sẽ chứng minh tập các ước chung của ac và b trùng với tập
các ước chung của b và c.
Thật vậy, giả sử x P Z và x ac, x b. Khi đó x ac và x bc hay
x UCLNpac, bcq c. UCLNpa, bq c. Vậy ta có x b và x c.
Ngược lại, giả sử x P Z , x b và x c thì hiển nhiên ta có x b và
x ac. l
Tính chất 1.2.28 Nếu UCLNpa, bq 1 và UCLNpa, cq 1 thì
UCLNpa, bcq 1.
Chứng minh: Thật vậy, mọi ước chung của a và b đều là ước của c a bq
nên cũng là ước chung của b và c. Ngược lại, mọi ước chung của b và c
cũng đều là ước của a bq c nên cũng đều là ước của a và b. Vậy
UCLNpa, bq UCLNpb, cq. l
Trước tiên ta xét bài toán tìm ước chung lớn nhất của hai số nguyên a và b
với giả thiết rằng a ¥ b ¡ 0.
a) Trường hợp b chia hết a: Trong trường hợp này dễ dàng nhận thấy
UCLNpa, bq b.
b) Trường hợp b không chia hết a: Theo định lí thuật toán chia, ta có
a bq0 r1 0 r1 b;
b r1q1 r2 0 r2 r1;
r1 r2q2 r3 0 r3 r2;
...
rn2 rn1 qn1 rn 0 rn rn1;
rn1 rn qn .
Chú ý rằng số các dòng trên (các phép chia) là hữu hạn và kết thúc bằng
số dư không (dòng cuối cùng) vì dãy b, r1 , r2 , . . . là dãy những số tự nhiên
giảm thực sự nên ta có không quá b phép chia. Theo tính chất 1.2.29 ta có
UCLNpa, bq UCLNpb, r1 q . . . UCLNprn1 , rn q. Vì rn1
rn qn nên UCLNpa, bq UCLNprn1 , rn q rn . Cách tìm ước chung lớn
nhất của hai số a và b nói trên được gọi là thuật toán Euclid.
Lời giải: Thực hiện phép chia trên hai số đã cho ta được:
Thuật toán 12 Thuật toán Euclid tìm ước chung lớn nhất của hai số nguyên không âm.
Đầu vào: Hai số nguyên không âm a và b.
Đầu ra: UCLNpa, bq.
1: Trong khi b 0 Thực hiện
2: r : a mod b.
3: a : b.
4: b : r.
5: Kết thúc Trong khi
6: Kết quả trả về chính là giá trị a tại thời điểm này.
Ví dụ 1.2.31 Hãy áp dụng thuật toán Euclid mở rộng cho a 63, b 24.
Lời giải:
B1 Đầu tiên ta có pa
63, x 1, y 0q và pb 24, u 0, v 1q.
B2 Kiểm tra b 24 0, tính q 63 div 24 2, bộ ba pr 15, s
1, t 2q và do đó ta có hai bộ ba pa 24, x 0, y 1q và
pb 15, u 1, v 2q.
B3 Kiểm tra b 15 0, tính q 24 div 15 1, bộ ba pr 9, s
1, t 3q và do đó ta có hai bộ ba pa 15, x 1, y 2q và
pb 9, u 1, v 3q.
Bộ môn Toán - ĐẠI HỌC THĂNG LONG 23
Chương 1. Thuật toán, Số nguyên, Trường hữu hạn, Đa thức
Nếu ta biết dạng phân tích tiêu chuẩn của những số a1 , a2 , . . . , an thì ta
cũng có qui tắc để tính ước chung lớn nhất của a1 , a2 , . . . , an như sau:
Chứng minh: Gọi p1 , p2 , . . . , pk là các ước nguyên tố phân biệt của ít nhất
một trong những số a1 , a2 , . . . , an . Tức là ta có thể viết:
Định nghĩa 1.2.34 Ta gọi bội chung của những số nguyên a1 , a2 , . . . , an một
số nguyên là bội đồng thời của mỗi số đó.
Định nghĩa 1.2.35 Số m nhỏ nhất trong tập hợp các bội chung dương của
những số nguyên a1 , a2 , . . . , an được gọi là bội chung nhỏ nhất của
a1 , a2 , . . . , an . Kí hiệu m BCNNpa1 , a2 , . . . , an q.
Nhận xét 1.2.36 Khi ta nói đến bội chung của những số a1 , a2 , . . . , an thì
đương nhiên ta đã giả thiết các số đó đã khác không.
Tính chất 1.2.37 Điều kiện cần và đủ để một bội chung dương m của những số
m m m
a1 , a2 , . . . , an là bội chung nhỏ nhất của chúng là , ,..., nguyên
a1 a2 an
tố cùng nhau.
Chứng minh:
a) Điều kiện cần: Nếu m BCNNpa1 , a2 , . . . , an q ta sẽ chứng minh
m m m
những số , , . . . , nguyên tố cùng nhau. Thật vậy, nếu không như
a1 a2 an
có một ước chung d 1 nào đó. Khi đó
m m m m
vậy thì , , . . . , là
a1 a2 an d
bội chung của a1 , a2 , . . . , an và 0 | | m trái với giả thiết m là
m
d
bội chung nhỏ nhất của các số a1 , a2 , . . . , an đã cho.
m m m
b) Điều kiện đủ: Nếu , ,..., nguyên tố cùng nhau, ta sẽ chứng
a1 a2 an
minh m BCNNpa1 , a2 , . . . , an q. Thật vậy, nếu không như thế, ta
gọi m1 BCNNpa1 , a2 , . . . , an q và theo định lí 1.2.5, sẽ có số nguyên
d ¡ 1 để m dm1 . Từ đó ta có:
dm1 dm1 dm1
UCLNp , , . . . , q UCLNp a , a , . . . , a q
m m m
a1 a2 an 1 2 n
1 1 1
d UCLNp m ,
a1 a2
m
,...,
m
an
q.
Vậy d là ước của UCLNp , , . . . , q
m m m m m m
nghĩa là , , . . . , có
a1 a2 an a1 a2 an
ít nhất một ước chung d ¡ 1 trái với giả thiết các số này là nguyên tố cùng
nhau.
l
Tính chất 1.2.38 Với k là một số nguyên dương, ta có:
BCNNpka1 , ka2 , . . . , kan q k BCNNpa1, a2, . . . , anq.
26 Bộ môn Toán - ĐẠI HỌC THĂNG LONG
1.2. Số nguyên và phép chia
Chứng minh: Ta dễ thấy k lần bội chung của a1 , a2 , . . . , an luôn chia hết
cho kai với mọi i 1, n. Vậy k lần bội chung của a1 , a2 , . . . , an luôn
là bội chung của ka1 , ka2 , . . . , kan . Ngược lại, nếu α là bội chung của
ka1 , ka2 , . . . , kan thì sẽ là bội của ai với mọi i 1, n nên là bội chung
α α
k k
của a1 , a2 , . . . , an và do đó α bằng k lần bội chung nào đó của a1 , a2 , . . . , an .
Tóm lại ta có hai tập hợp Mk các bội chung của ka1 , ka2 , . . . , kan và kM
các k lần bội chung của a1 , a2 , . . . , an bằng nhau. Tất nhiên, số dương nhỏ
nhất trong hai tập tương ứng bằng nhau hay ta có
BCNNp
a1 a2
, ,...,
δ δ
an
δ
q BCNNpa1,δa2, . . . , anq .
Chứng minh: Áp dụng tính chất 1.2.38, với δ là ước chung dương của
a1 , a2 , . . . , an ta có:
Vậy ta có BCNNp
a1 a2
, ,...,
δ δ
an
δ
q BCNNpa1,δa2, . . . , anq . l
Trước hết ta xét bài toán tìm bội chung nhỏ nhất của hai số. Cho hai số
nguyên a và b với giả thiết rằng a ¡ 0 và b ¡ 0. Khi đó ta có:
BCNNpa, bq UCLN
a.b
pa, bq .
Thật vậy, ta đặt m UCLN
a.b
pa, bq . Bằng cách viết
m a. UCLNb pa, bq b. UCLNa pa, bq ,
Bộ môn Toán - ĐẠI HỌC THĂNG LONG 27
Chương 1. Thuật toán, Số nguyên, Trường hữu hạn, Đa thức
a b
do , là những số nguyên nên m là bội của a và
UCLNpa, bq UCLNpa, bq
bội của b. Hơn nữa, nếu µ là một bội chung tùy ý của a và b thì
UCLNpa, bq
µ
m
µ.
a.b
µ.
a.x b.y
a.b
với x, y là những số nguyên sao cho UCLNpa, bq a.x b.y. Từ đó
µ
m
µ
b
.x
µ
a
.y PZ
µ µ
vì , nguyên. Nói cách khác µ là bội của m. Vậy
b a
BCNNpa, bq m UCLN
a.b
pa, bq .
Lời giải: Ta có
BCNNp84, 90, 165q BCNNpBCNNp84, 90q, 165q
BCNNp1260, 165q
1260.165
15
13860.
l
Hệ quả 1.2.42 Nếu a1 , a2 , . . . , an nguyên tố cùng nhau từng đôi một thì bội
chung nhỏ nhất của chúng bằng tích a1 .a2 . . . an của chúng.
Số học đồng dư
Đồng dư thức
Định nghĩa 1.2.45 Cho m là một số tự nhiên khác không. Ta nói hai số nguyên
a và b là đồng dư với nhau theo modulo m nếu trong phép chia a và b cho
m ta được cùng một số dư. Khi a và b đồng dư với nhau theo modulo m thì
ta viết: a b pmod mq, trái lại ta viết a b pmod mq. Biểu thức như trên
được gọi là đồng dư thức.
Tính chất 1.2.47 Ta có thể cộng hoặc trừ từng vế một của nhiều đồng dư thức
theo cùng một modulo. Cụ thể là nếu có ai bi pmod mq, i 1, k thì ta có
a1 a2 . . . ak b1 b2 . . . bk pmod mq.
Tính chất 1.2.48 Ta có thể nhân từng vế một với nhau của nhiều đồng dư thức
theo cùng một modulo. Cụ thể là nếu có ai bi pmod mq, i 1, k thì ta có
Chứng minh của hai tính chất 1.2.47 và 1.2.48 đơn giản được xem như những
bài tập dành cho các bạn. Từ hai tính chất này, ta có một số hệ quả sau:
Hệ quả 1.2.49 Ta có thể thêm vào hay bớt đi cùng một số vào hai vế của một
đồng dư thức nghĩa là nếu ta có a b pmod mq thì ta cũng có a c
b c pmod mq với c là một số nguyên tùy ý.
Hệ quả 1.2.50 Ta có thể chuyển vế các số hạng của một đồng dư thức nhưng
phải đổi dấu của số hạng đó, nghĩa là nếu ta có a c b pmod mq thì ta
cũng có a b c pmod mq.
Hệ quả 1.2.51 Ta có thể thêm vào hay bớt đi ở một vế của một đồng dư thức
một bội của modulo, nghĩa là nếu ta có a b pmod mq thì ta cũng có
a km b pmod mq với mọi k P Z .
Hệ quả 1.2.52 Ta có thể nhân hai vế của một đồng dư thức với cùng một số
nguyên tùy ý, nghĩa là nếu ta có a b pmod mq thì ta cũng có a.c
b.c pmod mq với mọi c P Z .
Hệ quả 1.2.53 Ta có thể nâng lên lũy thừa bậc nguyên dương tùy ý hai vế
của một đồng dư thức, nghĩa là nếu ta có a b pmod mq thì ta cũng có
an bn pmod mq với mọi n P Z .
Tính chất 1.2.54 Ta có thể chia hai vế của một đồng dư thức cho một ước
chung của hai vế, nguyên tố cùng nhau với modulo, nghĩa là nếu ta có a.c
b.c pmod mq và UCLNpc, mq 1 thì ta cũng có a b pmod mq.
Chứng minh: Theo giả thiết a.c b.c pmod mq nên m a.c b.c hay m
cpa bq. Do UCLNpc, mq 1 nên m a b nghĩa là a b pmod mq.
l
Tính chất 1.2.55 Ta có thể nhân hai vế và modulo của một đồng dư thức với
cùng một số nguyên dương. Cụ thể là nếu ta có a b pmod mq thì với mọi
c P Z ta cũng có a.c b.c pmod m.cq.
Chứng minh: Theo giả thiết a b pmod mq nên có số nguyên t sao cho a
b mt. Nhân hai vế với cùng một số nguyên dương c, ta có ac bc mct,
nghĩa là a.c b.c pmod m.cq. l
Tính chất 1.2.56 Ta có thể chia hai vế và modulo của một đồng dư thức cho
một ước chung dương của chúng. Cụ thể nếu ta có a b pmod mq và
Tính chất 1.2.57 Nếu hai số a và b đồng dư với nhau theo nhiều modulo thì
chúng cũng đồng dư với nhau theo modulo là bội chung nhỏ nhất của các
modulo nói trên. Cụ thể là nếu a b pmod mi q, @i 1, k, thì ta cũng có
a b pmod BCNNpm1 , m2 , . . . , mk qq.
Chứng minh: Thật vậy, theo giả thiết a b là bội chung của m1 , m2 , . . . , mk
nên a b cũng là bội của BCNNpm1 , m2 , . . . , mk q nghĩa là a
b pmod BCNNpm1 , m2 , . . . , mk qq. l
Tính chất 1.2.58 Nếu a và b đồng dư với nhau theo modulo m thì chúng cũng
đồng dư với nhau theo modulo là ước của m. Cụ thể là nếu a b pmod mq
và δ m, δ ¡ 0 thì ta cũng có a b pmod δ q.
Chứng minh:
Ví dụ 1.2.61 Phép cộng và nhân trong Z 7 được cho trong bảng sau:
` 0 1 2 3 4 5 6 d 0 1 2 3 4 5 6
0 0 1 2 3 4 5 6 0 0 0 0 0 0 0 0
1 1 2 3 4 5 6 0 1 0 1 2 3 4 5 6
2 2 3 4 5 6 0 1 2 0 2 4 6 1 3 5
3 3 4 5 6 0 1 2 3 0 3 6 2 5 1 4
4 4 5 6 0 1 2 3 4 0 4 1 5 2 6 3
5 5 6 0 1 2 3 4 5 0 5 3 1 6 4 2
6 6 0 1 2 3 4 5 6 0 6 5 4 3 2 1
Bình thường, nếu không có gì gây nên sự hiểu nhầm thì ta có thể sử dụng kí
hiệu “ ” thay cho “`” và “.” thay cho “d”.
Nếu x là một phần tử trong Z m và UCLNpx, mq 1 thì tồn tại các số
nguyên u, v sao cho u.x v.m 1, tức là u.x 1 pmod mq. Khi đó ta
nói rằng x có nghịch đảo theo modulo m (phần tử nghịch đảo trong Z m ) là u
và ta kí hiệu phần tử nghịch đảo này là x1 . Phần tử nghịch đảo theo modulo
m của x được tìm bằng cách sử dụng thuật toán Euclid mở rộng. Tập các phần
tử trong Z m mà có nghịch đảo theo modulo m ta kí hiệu là Z m .
Định nghĩa 1.2.63 Cho số tự nhiên n khác không, ta gọi φpnq là số các số tự
nhiên nhỏ hơn n và nguyên tố cùng nhau với n. Hàm φ được gọi là phi - hàm
Euler.
Chứng minh: Thật vậy, giả sử rx là số dư của phép chia a.x y cho b. Số
a.x y nguyên tố cùng nhau với b khi và chỉ khi rx nguyên tố cùng nhau với
b.
Chứng minh: Nếu trong hai số a và b có một số bằng 1 thì hiển nhiên φpa.bq
φpaq.φpbq vì φp1q 1.
Giả sử a ¡ 1 và b ¡ 1, ta lập bảng những số tự nhiên từ 0 cho đến a.b 1
như sau:
0 1 ... pa 1q
a a 1 ... a pa 1q
M
2a 2a 1 ... 2a pa 1q
... ... ... ...
pb 1qa pb 1qa 1 ... pb 1qa pa 1q
Dễ thấy là một số trong bảng M nguyên tố cùng nhau với tích a.b khi và chỉ
khi số đó nguyên tố cùng nhau với cả a và b. Do đó để tìm những số nguyên tố
cùng nhau với tích ab trong bảng M , trước hết ta tìm những số nguyên tố cùng
nhau với a rồi trong các số đó, ta tìm những số nguyên tố cùng nhau với b.
Các số trong bảng M có dạng a.x y với x 0, b 1 và y 0, a 1.
Vì UCLNpa.x y, aq UCLNpy, aq nên các số trong bảng M nguyên
tố cùng nhau với a khi và chỉ khi nó nằm ở cột tương ứng với những giá trị y
nguyên tố cùng nhau với a. Có tất cả φpaq cột như vậy. Trong mỗi cột đó, với
giá trị y cụ thể cố định, ta có b số có dạng a.x y, x 0, b 1. Theo bổ đề
1.2.67, cột đó có φpbq số nguyên tố cùng nhau với b. Vậy trong bảng M có tất
cả φpaq.φpbq số nguyên tố cùng nhau với tích ab. Vậy ta có điều phải chứng
minh. l
Hệ quả 1.2.68 Giả sử n pα1 pα2
1 2
. . . pα
k là dạng phân tích tiêu chuẩn của
k
số tự nhiên n ¡ 1. Khi đó ta có
φpnq np1 p1 qp1 p1 q . . . p1 p1 q.
1 2 k
Chứng minh: Do các số p1 , p2 , . . . , pk nguyên tố với nhau từng đôi một nên
các lũy thừa của chúng cũng nguyên tố với nhau từng đôi một. Áp dụng định lí
1.2.8 k lần, ta có φpnq φppα1 qφpp2 q . . . φppk q. Áp dụng hệ quả 1.2.66
1 α2 αk
Định lí Euler được chúng ta công nhận không chứng minh dưới đây là công cụ
quan trọng để xét các đồng dư modulo của một số nguyên dương bất kì.
Từ định lí Euler, ta có định lí Fermat nhỏ ứng với trường hợp riêng modulo là
số nguyên tố.
Tất nhiên, từ định lí Euler, nếu UCLNpa, mq 1 thì nghịch đảo theo modulo
m của a là aφpmq1 . Và vì chỉ những a nguyên tố cùng nhau với m mới có
nghịch đảo theo modulo m nên số phần tử của Z m bằng φpmq.
Thực tế, ta có thể sử dụng một số nguyên dương bất kì lớn hơn 1 làm cơ số để
biểu diễn các số tự nhiên. Điều này được phát biểu (không chứng minh) trong
định lí sau:
Định lý 1.2.10 (Định lí khai triển theo hệ cơ số) Cho b là một số nguyên
dương lớn hơn 1. Khi đó nếu n là một số nguyên dương, thì nó có thể được
biểu diễn một cách duy nhất dưới dạng:
Biểu diễn của n được cho trong định lí 1.2.10 được gọi là khai triển cơ số
b của n, nó được kí hiệu là ak ak1 . . . a1 a0 b .
Nếu chọn 2 làm cơ số ta có khai triển nhị phân. Khai triển theo hệ cơ số
8 còn được gọi là khai triển bát phân và khai triển theo hệ cơ số 16 còn được
gọi là khai triển thập lục phân. Trong hệ kí hiệu cơ số b ta phải cần đến đúng
b kí hiệu. Chẳng hạn hệ cơ số 2 ta sẽ sử dụng các kí hiệu 0 và 1. Hệ cơ số 8 ta
sử dụng tám kí hiệu 0, 1, 2, 3, 4, 5, 6, 7. Riêng hệ cơ số 16 ta sử dụng 16 kí
hiệu 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A (biểu diễn số 10), B (số 11), C (số 12), D
(số 13), E (số 14), F (số 15).
n bq0 a0 , với 0 ¤ a0 b.
Số dư a0 chính là chữ số tận cùng bên phải trong khai triển cơ số b của n. Tiếp
theo chia q0 cho b, ta được:
q0 bq1 a1 , với 0 ¤ a1 b.
Bộ môn Toán - ĐẠI HỌC THĂNG LONG 37
Chương 1. Thuật toán, Số nguyên, Trường hữu hạn, Đa thức
Ta thấy a1 chính là chữ số thứ hai tính từ phải qua trái trong khai triển cơ số b
của n. Tiếp tục quá trình này, bằng cách chia liên tiếp các thương cho b, ta sẽ
được các chữ số tiếp theo trong khai triển cơ số b của n là các số dư tương ứng.
Quá trình này sẽ kết thúc khi ta nhận được một thương bằng 0.
12345 8.1543 1.
1543 8.192 7,
192 8.24 0,
24 8.3 0,
3 8.0 3.
Vậy ta có 1234510 300718. l
Thuật toán nói trên được biểu diễn dưới dạng giả mã qua thuật toán 14.
Nói riêng, trong trường hợp cần biểu diễn số tự nhiên từ khai triển nhị phân
về khai triển theo hệ cơ số 4, hệ cơ số 8 hoặc hệ cơ số 16 hoặc ngược lại, do đặc
thù 4, 8, 16 là các lũy thừa của 2 nên ta có thể khai triển nhanh hơn. Cụ thể,
một chữ số trong hệ cơ số 16 tương ứng với 4 chữ số trong hệ nhị phân. Tương
tự, một chữ số trong hệ cơ số 8 (hệ cơ số 4) tương ứng với 3 (2) chữ số trong
hệ nhị phân.
Lí thuyết số có ứng dụng trong rất nhiều lĩnh vực. Áp dụng những kiến thức
chúng ta đã tìm hiểu từ đầu chương đến thời điểm này, chúng ta sẽ xem xét một
số ứng dụng của số học đồng dư.
Vấn đề 1.2.76 (Hàm băm) Chúng ta đã tìm hiểu hai thuật toán tìm kiếm là tìm
kiếm tuyến tính và tìm kiếm nhị phân. Thuật toán tìm kiếm tuyến tính sẽ mất
rất nhiều thời gian nếu dữ liệu được lưu trữ nhiều. Còn thuật toán tìm kiếm nhị
phân thì không phải dữ liệu lúc nào cũng được sắp xếp để có thể áp dụng. Nếu
chọn giải pháp sắp xếp ngay từ lúc mới nhập dữ liệu vào thì việc chuyển dữ liệu
cũng mất khá nhiều thời gian.
Giải pháp được đưa ra trong trường hợp dữ liệu được lưu trữ nhiều là dùng một
hàm băm được lựa chọn thích hợp. Dữ liệu được nhận dạng bằng cách dùng
chìa khóa là một số nguyên tương ứng một - một với một dữ liệu. Hàm băm
hpkq gán ô nhớ hpkq cho dữ liệu có chìa khóa là k. Thực tế, ta có thể dùng
nhiều hàm băm khác nhau. Một trong số các hàm băm thường dùng nhất là hàm:
hpkq k mod m
trong đó m là số ô nhớ có thể được sử dụng.
Các hàm băm cần phải được tính toán dễ dàng để dữ liệu được truy cập
nhanh. Hơn nữa hàm băm cần phải là toàn ánh để cho tất cả các ô nhớ đều được
sử dụng. Hàm băm hpkq k mod m thỏa mãn cả hai điều này.
Vì hàm băm không phải là đơn ánh nên có thể xảy ra trường hợp có từ hai
dữ liệu trở lên được gán cho cùng một ô nhớ. Khi xảy ra điều này, người ta nói
có sự xung đột hay đụng độ. Một cách để giải quyết đụng độ là gán cho ô nhớ
còn tự do đầu tiên ở phía sau ô nhớ đã được gán trước bởi hàm băm.
Ví dụ 1.2.77 Khi m 111, dữ liệu ứng với chìa khóa 064212848 sẽ được
gán cho ô nhớ ở vị trí 14 vì hp064212848q 064212848 mod 111 14.
Còn dữ liệu ứng với chìa khóa 037149212, một cách tương tự, sẽ được gán
cho ô nhớ ở vị trí 65. Dữ liệu ứng với chìa khóa 107405723 đáng nhẽ được
đặt vào ô nhớ hp107405723q 14 nhưng ô nhớ này đã bị chiếm bởi dữ liệu
có chìa khóa là 064212848. Vậy ô nhớ 15 còn trống kế tiếp sau sẽ là ô nhớ
dành cho nó.
Có rất nhiều giải pháp phức tạp hơn để giải quyết đụng độ một cách có hiệu
quả hơn phương pháp vừa nêu trên. Các bạn có thể tìm hiểu kĩ hơn qua các tài
liệu về cấu trúc dữ liệu.
Vấn đề 1.2.78 (Số giả ngẫu nhiên) Trong thực tế, trong các mô phỏng trên
máy tính, nhiều khi ta rất cần đến những số được chọn một cách ngẫu nhiên. Có
nhiều phương pháp để tạo ra các số có những tính chất của các số được chọn
ngẫu nhiên nhưng không có cách nào để tạo ra các số ngẫu nhiên thực sự từ
máy tính. Vì các số được sinh ra bởi các phương pháp có hệ thống không thực
sự là ngẫu nhiên nên chúng được gọi là các số giả ngẫu nhiên. Chúng không
thực sự ngẫu nhiên nhưng về mặt ý nghĩa, chúng có ích gần như các số ngẫu
nhiên.
Mặc dù từ ngẫu nhiên chỉ sự tùy ý, nhưng để chính xác về mặt toán học, chúng
ta phải giới hạn các số được dùng vào một phạm vi nhất định. Không thể có
một số ngẫu nhiên, chỉ có một số ngẫu nhiên trong một miền xác định nào đó.
Thông thường, trong hầu hết các trường hợp không chỉ cần một số ngẫu nhiên,
mà cần đến dãy số ngẫu nhiên.
Phương pháp đồng dư tuyến tính là phương pháp nổi tiếng nhất để tạo số giả
ngẫu nhiên, được sử dụng gần như độc chiếm kể từ khi D. Lehner đưa ra vào
năm 1951. Phương pháp này sẽ cho ta dãy số giả ngẫu nhiên tuân theo phân bố
đều. Đối với những dãy số phân bố không đều (một số giá trị có thể nhiều hơn
một số khác), ta thường sử dụng phối hợp một số dãy phân bố đều tạo thành.
Theo phương pháp đồng dư tuyến tính, ta chọn ra bốn số nguyên. Đó
là modulo m, nhân tử a, số gia c và số hạt giống x0 , với 2 ¤ a ¤ m,
0 ¤ c m và 0 ¤ x0 m. Chúng ta sẽ tạo ra dãy các số giả ngẫu nhiên
txnu với 0 ¤ xn m với mọi n bằng cách dùng liên tiếp phép đồng dư:
xn 1 paxn cq mod m.
Để tạo ra các số giả ngẫu nhiên nằm trong khoảng p0, 1q, ta chia các số được
tạo ra bằng phương pháp đồng dư tuyến tính cho modulo m.
Thường phương pháp đồng dư tuyến tính được sử dụng với số gia c 0
hoặc c 1. Modulo m nên lớn và thường liên quan đến lũy thừa của 10 hoặc
2. Nhân tử a không nên quá lớn hoặc quá nhỏ: một lựa chọn an toàn là dùng
số có ít hơn m một chữ số và không theo một mẫu riêng nào cả. Tốt nhất khi
c 1 thì nên chọn a có dạng . . . x2110 trong đó x là chữ số chẵn là yêu cầu
được thừa nhận bởi nó tránh được vài sự cố có thể xảy ra mà các phân tích toán
học còn để hở. Các qui luật này được phát triển bởi D.E. Knuth. Knuth chứng
minh rằng các sự lựa chọn này làm cho phương pháp đồng dư tuyến tính tạo ra
các số giả ngẫu nhiên tốt hơn, thỏa mãn được nhiều kiểm tra thống kê phức tạp.
Ví dụ 1.2.79 Khi chọn m 9, a 7, c 4, x0 3 ta có dãy số giả ngẫu
nhiên sau:
3, 7, 8, 6, 1, 2, 0, 4, 5, 3, 7, 8, 6, 1, 2, 0, 4, 5, 3, . . .
Dãy số trên chứa 9 phần tử khác nhau trước khi lặp lại.
Vấn đề nghiêm trọng nhất là tạo ra một chu kì nhỏ so với miền xác định của
nó. Ví dụ như khi a 19, m 381, x0 0, c 1 sẽ tạo ra chuỗi
0, 1, 20, 0, 1, 20, . . . một chuỗi không ngẫu nhiên trong khoảng từ 0 đến 380.
Bộ giá trị với c 0, m 231 1, a 75 16807 thường được dùng rất
rộng rãi. Với các giá trị này, người ta đã chứng minh được rằng sẽ có 231 2
số được phát ra trước khi bắt đầu lặp lại.
Để giải phương trình đồng dư tuyến tính, ta xét các trường hợp sau:
p ad qx db pmod m
d
q.
Khi đó UCLNp , q 1 và phương trình mới nhận được này thuộc
a m
d d
dạng ta đã xét ở trên. Nếu d b thì phương trình đã cho vô nghiệm vì hiệu
của hai số chia hết cho d thì không thể là một số không chia hết cho d.
Để biểu diễn quá trình mã hóa của Caesar một cách toán học, trước hết ta thay
mỗi chữ cái (trong bảng chữ cái tiếng Anh và chú ý rằng ta không phân biệt chữ
hoa và chữ thường) bằng một số nguyên từ 0 đến 25, dựa vào vị trí mà nó xuất
hiện trong bảng chữ cái:
A B C D E F G H I J K L M N O P Q R
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
S T U V W X Y Z
18 19 20 21 22 23 24 25
Phương pháp mã hóa của Caesar có thể biểu diễn bởi hàm f là song ánh từ tập
t0, 1, 2, . . . , 25u sang chính tập t0, 1, 2, . . . , 25u. Trong trường hợp này, ta
có f ppq pp 3q mod 26. Như vậy, trong phiên bản mã hóa của bức thư,
chữ cái được biểu diễn bởi p sẽ được thay bằng chữ cái được biểu diễn bởi
pp 3q mod 26.
Để phục hồi lại bức thư gốc đã được mã hóa theo hệ mã mật Caesar, ta cần
phải dùng hàm ngược f 1 của hàm f . Ta có f 1 ppq pp 3q mod 26. Nói
cách khác, để tìm lại bức thư gốc, mỗi một chữ cái lùi lại ba chữ trong bảng chữ
cái, ba chữ cái đầu tiên chuyển thành ba chữ cái cuối cùng tương ứng của bảng
chữ cái.
Ta có thể tổng quát hóa hệ mã mật của Caesar bằng cách sử dụng hàm lập
mã f ppq pap bq mod 26. Điều kiện của hàm f là nó phải là một song
ánh từ t0, 1, 2, . . . , 25u vào chính t0, 1, 2, . . . , 25u. Để thỏa mãn điều kiện
đó thì ta phải có UCLNpa, 26q 1. Khi đó sẽ tồn tại a1 theo modulo 26 và
f 1 ppq pp bqa1 mod 26.
Ví dụ 1.2.83 Khi sử dụng hàm f ppq p7p 3q mod 26, chữ N được thay
bằng chữ cái nào? chữ A được thay bằng chữ cái nào? chữ T được thay bằng
chữ cái nào?
Lời giải: Chữ N được chuyển thành số 13, cho qua hàm f ta có f p13q
p7.13 3q mod 26 16. Vậy chữ cái N được thay bằng chữ Q. Chữ A được
chuyển thành số 0, cho qua hàm f ta có f p0q p7.0 3q mod 26 3.
Vậy chữ cái A được mã hóa thành chữ D. Chữ T được chuyển thành số 19,
f p19q p7.19 3q mod 26 6. Vậy chữ T được mã thành chữ G.
Ngược lại, nghịch đảo của 7 theo modulo 26 là 15. Chữ Q, số tương
ứng là 16 được giải mã qua f 1 ppq pp 3q.15 mod 26 là chữ N vì
f 1 p16q p16 3q.15 mod 26 13. Chữ D, số tương ứng là 3 được giải
mã thành chữ A vì f 1 p3q 0. Cuối cùng, chữ G, số tương ứng là 6 được giải
mã thành chữ T vì f 1 p6q p6 3q.15 mod 26 19. l
42 Bộ môn Toán - ĐẠI HỌC THĂNG LONG
1.2. Số nguyên và phép chia
Phương pháp mã hóa Caesar dễ bị khám phá bằng cách dựa vào tần suất xuất
hiện của các chữ cái trong bức thư. Vì vậy ngày nay, người ta cũng ít sử dụng
hệ mã mật theo phương pháp này. Nhưng có nhiều phương pháp khác tinh vi
hơn được sử dụng thông dụng hiện nay cũng dựa trên cơ sở lí thuyết của số học
đồng dư.
Vấn đề 1.2.84 (Bài toán Hàn Tín điểm binh) Tương truyền rằng để kiểm tra
quân số, Hàn Tín thường ra lệnh cho quân sĩ xếp thành hàng ba, hàng năm và
hàng bảy rồi thông báo lại số quân dư thừa ứng với mỗi trường hợp. Khi biết
các số dư và đã sẵn có thông tin gần đúng về số quân của mình, Hàn Tín có thể
biết được số quân chính xác.
Vậy cách làm của Hàn Tín là như thế nào? Chứng minh của định lí Trung Hoa
về phần dư dưới đây sẽ là câu trả lời cho các bạn.
a) Tính tồn tại: Trước hết ta xây dựng một nghiệm của hệ. Giả sử Mk
M
mk
m1m2 . . . mk1mk 1 . . . mr . Ta luôn có UCLNpMk , mk q
1 vì những số mi nguyên tố cùng nhau từng đôi một. Vậy ta có thể tìm được
nghịch đảo yk của Mk theo modulo mk , tức là Mk yk 1 pmod mk q.
Đặt
x pa1M1y1 a2 M2 y2 ... ar Mr yr q mod M.
Ta thấy rằng với mọi 1 ¤ k ¤ r thì x ak pmod mk q vì mk Mj với
mọi j k và mk M . Vậy x chính là một nghiệm của hệ đồng dư đang
xét.
b) Tính duy nhất: Giả sử x0 và x1 là hai nghiệm của hệ. Khi đó, với mỗi k,
x0 x1 ak pmod mk q cho nên mk px0 x1 q với mọi 1 ¤ k ¤ r.
Vì mk nguyên tố cùng nhau từng đôi một nên M px0 x1 q. Vậy
x0 x1 .
l
Ví dụ 1.2.85 Hãy tìm x thỏa mãn x 2 pmod 3q, x 3 pmod 5q, x
9 pmod 11q.
Lời giải: Nghịch đảo của 5.11 theo modulo 3 là 1, nghịch đảo của 3.11 theo
modulo 5 là 2, nghịch đảo của 3.5 theo modulo 11 là 3. Vậy ta có
Định nghĩa 1.3.1 Cho tập hợp K có ít nhất hai phần tử. Trên K có hai phép
toán là phép cộng (kí hiệu là ) và phép nhân (kí hiệu là . hoặc ). K cùng
với hai phép toán đó được gọi là một trường nếu thỏa mãn 9 tính chất sau:
Các tính chất trên còn được gọi là các tiên đề của trường.
Ví dụ 1.3.2 Xét tập hợp số N , Z , Q , R cùng hai phép toán cộng và nhân thông
thường:
• Tập hợp số hữu tỷ Q với những phép toán cộng và nhân thông thường là
một trường (trường số hữu tỉ) vì nó thỏa mãn cả 9 tiên đề của trường. Số
0 chính là phần tử trung lập của phép cộng, số 1 chính là phần tử đơn vị
của trường Q . Nếu a P Q thì đối của a là a, nghịch đảo của a 0 là
1
.
a
• Tương tự, tập hợp các số thực R với phép toán cộng và nhân thông thường
là một trường và được gọi là trường số thực.
l
Tính chất 1.3.4 (Qui tắc chuyển vế) Định nghĩa a b a pbq. Khi đó
nếu a b c p2q thì a c b.
pa bq pbq c pbq.
Suy ra a rb pbqs c pbq (theo tiên đề T.1).
Từ đó a 0 c pbq (theo tiên đề T.3).
Do đó a c pbq (theo tiên đề T.2).
Nghĩa là acb (theo định nghĩa).
l
Tính chất 1.3.5
0.a 0.
a.0
Chứng minh: Ta có: a.0 a.p0 0q a.0 a.0. Mặt khác: a.0 a.0 0.
Do đó: a.0 a.0 a.0 0. Giản ước cho a.0 ta được a.0 0. Tương tự
ta được: 0.a 0. l
Tính chất 1.3.6 Nếu a.b 0 thì a 0 hoặc b 0.
Chứng minh: Giả sử a.b 0 p3q và a 0. Ta sẽ chứng minh b 0. Thật
vậy, từ a 0, theo tiên đề T.6, có a1 sao cho a1 .a 1. Nhân hai vế của
p3q với a1, ta được:
a1 .pa.bq a1 .0.
Suy ra pa1.aq.b a1.0 (theo tiên đề T.5).
Do đó 1.b a1 .0 (theo tiên đề T.7).
Vậy b a1 .0 (theo tiên đề T.6).
Từ đó b0 (theo tính chất 1.3.5).
l
Tính chất 1.3.7
a.pbq
paq.b pa.bq.
Chứng minh: Ta có: a.pbq a.b a.rpbq bs a.0 0 và paq.b
a.b rpaq as.b 0.b 0. Do đó a.pbq paq.b pa.bq. l
Tính chất 1.3.8
apb cq ab ac.
46 Bộ môn Toán - ĐẠI HỌC THĂNG LONG
1.3. Đa thức và Trường hữu hạn
Ví dụ 1.3.10 Phép cộng và nhân trong Z 7 được cho trong bảng sau:
` 0 1 2 3 4 5 6 d 0 1 2 3 4 5 6
0 0 1 2 3 4 5 6 0 0 0 0 0 0 0 0
1 1 2 3 4 5 6 0 1 0 1 2 3 4 5 6
2 2 3 4 5 6 0 1 2 0 2 4 6 1 3 5
3 3 4 5 6 0 1 2 3 0 3 6 2 5 1 4
4 4 5 6 0 1 2 3 4 0 4 1 5 2 6 3
5 5 6 0 1 2 3 4 5 0 5 3 1 6 4 2
6 6 0 1 2 3 4 5 6 0 6 5 4 3 2 1
Như chúng ta đã đề cập, nếu không sợ nhầm lẫn và để thuận tiện trong cách
viết, phép toán “`” có thể được kí hiệu là “ ”, phép toán “d” có thể được kí
hiệu bởi “.” hoặc “”.
Ta dễ dàng có thể kiểm tra mệnh đề sau:
Phần tử trung lập của phép cộng là 0 và phần tử đơn vị của phép nhân là 1.
Đối của 0 là 0. Nếu 0 a m thì đối của a là a m a. Nếu
0 a m thì nghịch đảo của a chính là phần tử nghịch đảo theo modulo m
của a: a1 pmod mq.
Trong nhiều vấn đề lí thuyết cũng như ứng dụng, ta thường làm việc với các
trường chỉ có hữu hạn phần tử, đặc biệt là các trường Z p với p là số nguyên tố.
Mệnh đề 1.3.13 Trong trường hữu hạn F , luôn tồn tại số nguyên dương p thỏa
1 1 . . . 1 0 trong đó 1 là phần tử đơn vị của trường F .
mãn p.1 looooooooomooooooooon
p số
Chứng minh: Thật vậy, do trường F chỉ có hữu hạn phần tử nên dãy
1, 2.1, 3.1, . . . , k.1, . . . (là các phần tử của trường F ) sẽ phải lặp lại. Chẳng
hạn n.1 m.1 với n m. Khi đó pm nq.1 0. l
Định nghĩa 1.3.14 Cho trường hữu hạn F với phần tử đơn vị 1. Số nguyên
dương nhỏ nhất p thỏa mãn p.1 0 được gọi là đặc số của trường F .
Từ định nghĩa ta có nhận xét: nếu p là đặc số của trường hữu hạn F thì p.a 0
với mọi phần tử a P F .
Mệnh đề 1.3.15 Đặc số p của trường hữu hạn F là một số nguyên tố.
Định nghĩa 1.3.21 K là một trường, x là một kí hiệu. Với mỗi bộ hữu hạn
những phần tử thuộc K : an , an1 , . . . , a1 , a0 , ta lập biểu thức hình thức:
Khi đó f được gọi là một đa thức của ẩn x (hay biến x) với hệ số trên trường
K . Kí hiệu K rxs là tập hợp tất cả các đa thức ẩn x với hệ số trên K .
Phép cộng hai đa thức, nhân hai đa thức và phép nhân một phần tử của K với
một đa thức tương tự như trường hợp đa thức hệ số thực (trường R ) mà ta coi
như đã biết. Nói riêng, đa thức f 0 và đa thức g 0 kéo theo f g 0.
Định lý 1.3.2 Giả sử g là một đa thức khác không trên trường K . Khi đó với
mỗi đa thức f P K rxs, tồn tại duy nhất một cặp đa thức q và r trên trường K
sao cho:
f qg r, deg r deg g.
Các đa thức q và r được gọi tương ứng là thương và phần dư trong phép chia
f cho g. Đôi khi ta cũng kí hiệu q f div g và r f mod g.
thì ta đặt q 0, r f .
Giả sử rằng định lí đã được chứng minh cho mọi đa thức có bậc nhỏ hơn n,
trong đó n ¡ 0.
Ta đi chứng minh định lí đúng với đa thức có bậc là n (n ¡ 0): Nếu m ¡ n
thì ta chọn q 0, r f . Nếu m ¤ n, đặt h f pan b m qx
1 nm
.g. Khi
đó h là một đa thức có bậc deg h n. Theo giả thiết qui nạp, có các đa thức
s và r sao cho:
h sg r, deg r deg g.
f qg r, deg r deg g.
Để chứng minh tính duy nhất của cặp q, r, ta giả sử q 1 và r 1 cũng là các đa
thức sao cho:
f q 1 g r 1 , deg r 1 deg g.
Khi đó r r 1 pq1 qq.g. Nếu q q1 thì
degpr r 1 q degpq q 1 q deg g ¥ deg g.
Điều này mâu thuẫn với giả thiết deg r deg g và deg r 1 deg g. Vậy
q q 1 và do đó r r 1 . l
Định nghĩa 1.3.23 Đa thức f P K rxs được gọi là chia hết cho đa thức
g P K rxs khác không hoặc g chia hết f nếu có đa thức q P K rxs sao cho
f qg. Khi đó ta cũng nói g là ước của f hoặc f là bội của g và kí hiệu
g f hoặc f .. g. Một đa thức khác đa thức hằng số (phần tử của trường K )
.
và không chia hết cho đa thức nào bậc nhỏ hơn khác hằng số được gọi là đa
thức bất khả qui.
Từ định nghĩa, ta có ngay mọi đa thức bậc nhất cũng là đa thức bất khả qui. Đa
thức hằng số không phải là đa thức bất khả qui.
Ta công nhận định lí sau:
Định lý 1.3.3 Mọi đa thức có bậc không nhỏ hơn 1 trên trường K luôn phân
tích được thành tích của những đa thức bất khả qui. Phân tích này là duy nhất
nếu đòi hỏi các đa thức trong khai triển không phải đa thức hằng đều có hệ số
cao nhất là 1.
Như vậy, ta thấy dường như có một sự “tương tự” giữa các số nguyên và các
đa thức trên trường K . Các phép toán cộng, trừ, nhân, chia tương tự như nhau.
Thuật toán chia tương tự nhau. So sánh số nguyên tương tự với so sánh bậc của
đa thức. Số nguyên tố tương tự đa thức bất khả qui.
Định nghĩa 1.3.24 Cho hai đa thức f và g trên trường K . Đa thức h được
gọi là ước chung của hai đa thức f và g nếu h là ước của cả f và g. Ước
chung h của f và g được gọi là ước chung lớn nhất của f và g (kí hiệu
h UCLNpf, g q) nếu h có hệ số cao nhất là phần tử đơn vị của K và h có
bậc lớn nhất trong tất cả các ước chung của f và g. Nếu UCLNpf, g q 1
thì ta cũng nói f và g là hai đa thức nguyên tố cùng nhau.
Tương tự như đối với khái niệm ước chung lớn nhất của hai số nguyên, ta
có khẳng định quan trọng sau:
Định lý 1.3.4 Nếu f và g là hai đa thức có ước chung lớn nhất là d thì có hai
đa thức u và v sao cho d f.u g.v.
Để tìm ước chung lớn nhất của hai đa thức f và g ta cũng có thuật toán
Euclid:
f gq0 r1 , deg r1 deg g;
g r1q1 r2 , deg r2 deg r1;
r1 r2q2 r3 , deg r3 deg r2;
...
rn2 rn1 qn1 rn , deg rn deg rn1;
rn1 rn qn .
Đa thức dư cuối cùng khác đa thức không rn chính là ước chung lớn nhất của
hai đa thức f và g đã cho. Cũng vậy, để tìm cả ước chung lớn nhất d (của f và
g) lẫn hai đa thức u, v tương ứng sao cho d f.u g.v ta sử dụng thuật toán
Euclid mở rộng tương tự với thuật toán Euclid mở rộng dành cho số nguyên. Đề
nghị các bạn tự xây dựng thuật toán này và phần giả mã của cả hai thuật toán
Euclid mở rộng và Euclid cho đa thức.
Định lí 1.3.4 cung cấp cho ta cơ sở xây dựng các trường hữu hạn gồm q pr
phần tử. Trước tiên, ta nhận thấy các phép toán cộng và nhân các đa thức trên
trường Z p (p là số nguyên tố) thỏa mãn tất cả các tiên đề của định nghĩa trường
trừ ra tiên đề T.7 về tính khả nghịch của đa thức khác đa thức không. Để tiên đề
T.7 thỏa mãn, ta sẽ đưa vào hai phép toán cộng ` và nhân d mới dựa trên phép
cộng và nhân đa thức như sau: nếu f là một đa thức bất khả qui bậc r trong
Z p rxs, thì
g`h pg hq mod f, @g, h P Z prxs,
gdh pg.hq mod f, @g, h P Z prxs.
Rõ ràng là tuy ta xét hai phép toán ` và d trên tập Z p rxs nhưng thực ra ta chỉ
xét trên tập các đa thức trên trường Z p có bậc nhỏ hơn r. Dễ dàng kiểm chứng
trên tập này, hai phép toán mới định nghĩa cũng thỏa mãn các tiên đề T.1, T.2,
T.3, T.4, T.5, T.6, T.8, T.9.
Ta sẽ xem xét tiên đề T.7. Vì f là đa thức bất khả qui nên UCLNpf, g q 1
với g là đa thức khác đa thức không trên trường Z p có bậc nhỏ hơn r. Theo
định lí 1.3.4, có hai đa thức u và v sao cho 1 f.u g.v. Chia hai vế cho
đa thức f lấy phần dư, ta sẽ có g d v 1. Vậy nếu g là đa thức khác đa thức
không trên trường Z p có bậc nhỏ hơn r thì luôn có đa thức v trên trường Z p có
bậc nhỏ hơn r (nếu không nhỏ hơn r thì ta lấy v mod f ) sao cho g d v 1.
Vậy tiên đề T.7 cũng được thỏa mãn. Tức là nếu f là đa thức bất khả qui bậc
r thì ta có tập các đa thức trên trường Z p có bậc nhỏ hơn r với hai phép toán
cộng ` và nhân d định nghĩa ở trên lập thành một trường. Theo qui tắc nhân,
ta có thể đếm được trường này có đúng q pr phần tử.
Bài tập I
I.1. Xây dựng thuật toán tính tổng tất cả các số nguyên trong một bảng. Hãy
chứng minh tính đúng đắn, tính dừng của thuật toán vừa xây dựng. Chỉ ra các
đặc trưng còn lại của thuật toán.
I.2. Xây dựng thuật toán tính xn với x P R và n P Z . Hãy chứng minh tính
đúng đắn, tính dừng của thuật toán vừa xây dựng. Chỉ ra các đặc trưng còn lại
của thuật toán.
I.3. Xây dựng thuật toán tráo đổi giá trị của các biến x và y bằng cách chỉ dùng
phép gán. Số tối thiểu các phép gán để làm việc đó là bao nhiêu?
I.4. Xây dựng thuật toán tráo đổi giá trị của các biến x và y mà không sử dụng
biến trung gian. Hãy chứng minh tính đúng đắn của thuật toán vừa xây dựng.
I.5. Liệt kê các bước cần tiến hành để tìm số 9 trong dãy 1, 3, 4, 5, 6, 8, 9, 11
khi dùng:
I.6. Xây dựng thuật toán kiểm tra tính toàn ánh, đơn ánh của một hàm số từ tập
hữu hạn phần tử này đến tập hữu hạn phần tử khác.
I.7. Mode của một bảng liệt kê các số nguyên là phần tử ít xuất hiện nhất ở
trong bảng. Xây dựng thuật toán tìm mode của dãy số nguyên không giảm.
I.8. Xây dựng thuật toán tìm trong dãy các số nguyên tất cả các số hạng lớn
hơn tổng tất cả các số hạng đứng trước nó trong dãy.
I.9. Tìm hoán vị theo thứ tự từ điển liền trước và liền sau của các hoán vị sau:
a) 1, 4, 3, 2. c) 1, 2, 4, 5, 3. e) 6, 7, 1, 4, 2, 3, 5.
b) 5, 4, 1, 2, 3. d) 4, 5, 2, 3, 1. f) 3, 1, 5, 2, 8, 7, 6, 4.
2, 3, 4, 5, 6, 1; 1, 5, 6, 4, 2, 3; 2, 3, 1, 4, 6, 5; 6, 5, 4, 3, 2, 1;
2, 3, 1, 4, 5, 6; 5, 4, 3, 2, 1, 6; 3, 1, 4, 5, 6, 2; 6, 5, 4, 3, 1, 2;
1, 6, 5, 4, 3, 2; 5, 4, 1, 2, 3, 6; 4, 3, 2, 5, 6, 1; 4, 3, 5, 6, 1, 2.
I.11. Dùng thuật toán sinh hoán vị kế tiếp hãy tạo ra 24 hoán vị của 4 số nguyên
dương đầu tiên theo thứ tự từ điển.
I.12. Dùng thuật toán sinh xâu nhị phân hãy liệt kê tất cả các tập con của tập
t1, 2, 3, 4u.
I.13. Dùng thuật toán sinh tập con m phần tử của tập có n phần tử, hãy liệt kê
tất cả các tổ hợp chập 3 của tập ta, b, c, d, eu.
I.14. Hãy xây dựng thuật toán sinh chỉnh hợp chập m phần tử của tập có n
phần tử. Áp dụng thuật toán vừa xây dựng, hãy liệt kê tất cả các chỉnh hợp chập
3 của tập ta, b, c, d, eu.
I.15. Hãy xây dựng thuật toán sinh chỉnh hợp lặp chập m phần tử của tập có n
phần tử.
I.16. Hãy xây dựng thuật toán sinh tổ hợp lặp chập m phần tử của tập có n
phần tử.
I.17. Hãy xây dựng thuật toán tìm dãy con tăng dài nhất và dãy con giảm dài
nhất của một dãy hữu hạn số nguyên dương cho trước.
I.19. Tìm các số nguyên tương ứng với các hoán vị sau:
a) 1, 4, 3, 2. c) 1, 2, 4, 5, 3. e) 6, 7, 1, 4, 2, 3, 5.
b) 5, 4, 1, 2, 3. d) 4, 5, 2, 3, 1. f) 3, 1, 5, 2, 8, 7, 6, 4.
I.20. Tìm các hoán vị của t1, 2, 3, 4, 5u tương ứng với các số nguyên sau đây
thông qua khai triển Cantor:
a) 3. c) 11. e) 35.
b) 89. d) 111. f) 58.
a) 76. c) 494.
b) 220. d) 1063.
I.22. Hãy xác định thương và số dư của những phép chia sau:
I.23. Chứng minh rằng trong năm số nguyên tùy ý tồn tại ba số có tổng chia
hết cho 3.
a) 1110 1 .. 100.
. .
b) 22225555 55552222 .. 7.
I.26. Tìm tất cả những số tự nhiên n để 2n 1 chia hết cho 7. Chứng minh
rằng với mọi số tự nhiên n ta có 2n 1 không chia hết cho 7.
I.27. Kiểm tra xem số nguyên nào sau đây là số nguyên tố:
I.29. Chứng minh rằng lũy thừa của số nguyên tố p khi phân tích n! ra thừa số
nguyên tố bằng
t np u t pn2 u . . . t pnk u,
Bộ môn Toán - ĐẠI HỌC THĂNG LONG 55
Chương 1. Thuật toán, Số nguyên, Trường hữu hạn, Đa thức
I.32. Cho a là một số nguyên dương. Chứng minh rằng với số tự nhiên n ¡ 1:
a) Nếu an 1 là số nguyên tố thì a 2.
b) Nếu 2n 1 là là số nguyên tố thì n là số nguyên tố.
I.33. Hãy chỉ ra những số nguyên tố trong những số cho dưới đây:
a) 29 1. c) 213 1. e) 515 1.
b) 211 1. d) 37 1. f) 97 1.
I.34. Chứng minh rằng số dư trong phép chia một số nguyên tố cho 30 chỉ có
thể là 1 hoặc là số nguyên tố. Hãy xét xem khi chia số nguyên tố cho 60 thì có
kết quả như trên không?
I.35. Xác định số nguyên tố p sao cho 2p 1 là lập phương của một số tự
nhiên.
I.36. Tìm tất cả những số nguyên tố p sao cho nó vừa là tổng của hai số nguyên
tố và vừa là hiệu của hai số nguyên tố.
I.37.
I.39. Một số nguyên dương được gọi là hoàn hảo nếu nó bằng tổng các ước số
của nó trừ ước là chính số đó.
I.40. Dùng thuật toán Euclid để tìm ước chung lớn nhất của những cặp số nguyên
sau:
a) a 12 và b 8. d) a 12345 và b 54321.
b) a 111 và b 223. e) a 123 và b 277.
c) a 1001 và b 1331. f) a 11111 và b 111111.
I.41. Dùng thuật toán Euclid mở rộng để tìm ước chung lớn nhất d và những
số nguyên x, y ứng với những cặp số nguyên a, b sao cho d a.x b.y ở
bài tập trên.
I.42. Xác định ước số chung lớn nhất và bội chung nhỏ nhất của những cặp số
nguyên sau:
I.54. Cho m và n là hai số tự nhiên lớn hơn 1 nguyên tố cùng nhau. Chứng
minh rằng
mφpnq nφpmq 1 pmod mnq.
a) 3 trong Z 28 . c) 13 trong Z 43 .
b) 4 trong Z 65 . d) 112 trong Z 213 .
I.59. Chuyển từ biểu diễn thập phân sang biểu diễn nhị phân của những số
nguyên sau:
a) 57. d) 342.
b) 423. e) 643.
c) 1234. f) 235158.
I.60. Chuyển từ biểu diễn nhị phân sang biểu diễn thập phân của những số
nguyên sau:
a) 111112 . d) 11001100112 .
b) 10000000012 . e) 111000010110102 .
c) 10101012 . f) 1111100000111112 .
I.61. Chuyển từ biểu diễn nhị phân sang biểu diễn thập lục phân của những số
nguyên sau:
a) 111112 . d) 11001100112 .
b) 10000000012 . e) 111000010110102 .
c) 10101012 . f) 1111100000111112 .
I.62. Chuyển từ biểu diễn thập lục phân sang biểu diễn thập phân và nhị phân
của những số nguyên sau:
a) AABB 16 . d) 1A5B8EF 16 .
b) 135AB 16 . e) DCE3616 .
c) DEF ACED 16 . f) F F F F 16 .
I.63. Chuyển từ biểu diễn thập phân sang biểu diễn thập lục phân của những số
nguyên sau:
a) 1356. d) 65537.
b) 4327. e) 4096.
c) 512. f) 851532.
I.64. Chứng minh rằng, chỉ dùng các loại quả cân nặng 1kg, 3kg, 9kg, 27kg,
mỗi loại đúng một quả cân và một chiếc cân đĩa, có thể cân được tất cả các vật
có khối lượng nguyên (đơn vị là kg) từ 1kg đến 40kg.
I.65. Ô nhớ nào sẽ được gán bởi hàm băm hpkq k mod 101 cho hồ sơ của
sinh viên có số thẻ bảo hiểm xã hội là:
a) 104578690. c) 372201919.
b) 432222187. d) 501338753.
I.66. Một bãi đỗ xe có 31 chỗ dành cho khách, được đánh số từ 0 đến
30. Các xe của khách được gán cho chỗ đỗ bằng cách dùng một hàm băm
hpkq k mod 31 với k là số tạo bởi ba chữ số đầu trên biển đăng kí xe của
khách.
a) Xác định chỗ đỗ của xe, nếu ba chữ số đầu trên biển đăng kí của nó là:
317; 918; 007; 100; 111; 310.
b) Mô tả các bước mà khách cần phải tuân theo để tìm ra chỗ đỗ xe còn trống
khi chỗ đỗ theo qui ước của họ đã bị chiếm.
I.67. Xác định dãy các số giả ngẫu nhiên được sinh ra bằng cách dùng “máy
phát” đồng dư tuyến tính:
a) 7x 25 pmod 117q.
b) 67x 64 pmod 183q.
I.70. Mã hóa bức thư “LET BYGONES BE BYGONES” bởi các hàm mã hóa
f ppq cho sau đây:
I.71. Giải mã các bức thư đã được mã hóa bằng mật mã Ceasar sau:
a) ORYH VWRUB.
b) PLVVLRQ WRS VHFUHW.
c) JRQH ZLWK WKH ZLQG.
I.72. Biết bản mã hóa của một bức thư như sau: “LJMKG MGMXF QEXMW”.
Tìm bức thư gốc biết nó được mã hóa bởi hàm f ppq p7p 10q mod 26.
$ $
& 5x 1 pmod 12q, & 3x 1 pmod 10q,
e) 5x 2 pmod 8q, f) 4x 3 pmod 5q,
% %
7x 3 pmod 11q. 2x 7 pmod 9q.
I.74. Tìm tất cả những số tự nhiên không vượt quá 1000 mà khi chia chúng
cho 3, 5, 9, 11 ta được số dư lần lượt là 1, 3, 4, 9.
I.75. Hãy thực hiện phép nhân các đa thức f pxq và g pxq sau trong Z 5 rxs:
I.76. Trong Z 5 rxs hãy thực hiện phép chia f pxq x3 2x2 2x 1 cho
g pxq 2x2 2x 1.
I.77. Hãy xác định số nguyên p để đa thức dư của phép chia đa thức f pxq
x3 px 5 cho g pxq x2 5x 7 trong Z 7 rxs bằng 0.
I.78. Trong Q rxs, chứng minh rằng đa thức f pxq px 1q2n x2n 2x 1
chia hết cho:
a) 2x 1.
b) x 1.
c) x.
I.80. Tìm các số thực a sao cho trong R rxs ta có đa thức f pxq x4 x a
chia hết cho đa thức g pxq x2 ax 1.
I.81. Cho k và n là các số tự nhiên khác không, r là số dư của phép chia n cho
k. Chứng minh rằng dư của phép chia xn cho xk 1 là xr .
I.82. Trong Q rxs, tìm U CLN của các cặp đa thức sau:
I.83. Chứng minh rằng trong R rxs, các đa thức f pxq x4 1 và g pxq
x3 1 nguyên tố cùng nhau. Hãy tìm cặp đa thức upxq và v pxq trong R rxs
sao cho 1 f.u g.v.
I.84. Chứng minh rằng trong Q rxs, đa thức f pxq x3 3n2 x n3 , với n
là một số tự nhiên khác không, là đa thức bất khả qui.
I.85. Chứng minh rằng trong Q rxs, những đa thức sau bất khả qui:
N guyên lí bù trừ, hệ thức truy hồi là những kĩ thuật đếm cao cấp khác mà
chúng ta sẽ cùng tìm hiểu trong chương này. Các bạn sẽ được làm quen
với định nghĩa đệ qui, các dạng hệ thức truy hồi tuyến tính hệ số hằng số và sau
cùng là áp dụng vào tính toán đánh giá độ phức tạp thuật toán.
Trong phần nguyên lí đếm ta đã biết số phần tử của hợp hai tập hợp bằng
|A Y B | |A| |B | |A X B |. Vậy số phần tử của hợp nhiều hơn hai tập
hợp thì sao? Trong nội dung mục này, chúng ta sẽ xem xét cách đếm số phần tử
của hợp hữu hạn những tập hợp. Đó chính là nội dung của nguyên lí bù trừ.
Đối với trường hợp ta có ba tập hợp A, B, C cho trước, tổng |A| |B | |C |
sẽ đếm một lần các phần tử chỉ thuộc một trong ba tập hợp, đếm hai lần các
phần tử thuộc đúng hai trong ba tập hợp và sẽ đếm ba lần các phần tử thuộc cả
ba tập hợp. Vậy để loại bỏ sự trùng lặp trong quá trình đếm các phần tử, ta cần
phải trừ đi số phần tử thuộc các giao của tất cả các cặp hai trong ba tập hợp:
|A| |B | |C | |A X B | |A X C | |B X C |.
Tuy nhiên, tổng trên cũng không đếm chính xác được số phần tử của A Y B Y C
vì trong quá trình trừ vừa thực hiện, ta đã trừ đi ba lần số các phần tử thuộc cả
ba tập hợp (tức là các phần tử thuộc cả ba tập hợp không xuất hiện trong tổng).
Để có được số phần tử chính xác, ta thêm vào tổng trên số phần tử thuộc vào cả
ba tập hợp đã cho. Vậy ta nhận được công thức:
|A Y B Y C | |A| |B | |C ||A X B ||A X C ||B X C | |A X B X C |.
Chương 2. Nguyên lí bù trừ, Đệ qui và Hệ thức truy hồi
Ví dụ 2.1.1 Hãy tìm số xâu nhị phân độ dài mười chứa tám số 0 liên tiếp.
Lời giải: Gọi A, B, C lần lượt là tập các xâu nhị phân độ dài mười chứa tám
số không liên tiếp ở vị trí đầu tiên, tám số không liên tiếp ở vị trí giữa và tám số
không liên tiếp ở vị trí cuối của xâu. Để đếm số xâu nhị phân độ dài mười chứa
tám số 0 liên tiếp ta tìm số phần tử của tập A Y B Y C theo công thức
|A Y B Y C | |A| |B | |C ||A X B ||A X C ||B X C | |A X B X C |.
Theo qui tắc nhân ta có thể tính ngay được |A| |B | |C | 4, |A X B |
|B X C | 2, |A X C | 1 và |A X B X C | 1. Vậy |A Y B Y C | 8. l
Trong trường hợp tổng quát, ta có nguyên lí bù trừ được phát biểu như sau:
Định lý 2.1.1 (Nguyên lí bù trừ) Cho A1 , A2 , . . . , An là n tập hợp hữu hạn
phần tử. Khi đó, ta có:
¸ ¸ ¸
|A1YA2Y. . .YAn| |Ai| |AiXAj | |AiXAj XAk |
1¤i¤n 1¤i j ¤n 1¤i j k¤n
¸
. . . p1q m1
|Ai X Ai X . . . X Ai |
1 2 m
1¤i1 i2 ... im ¤n
... p1qn1|A1 X A2 X . . . X An|.
Chứng minh: Chúng ta sẽ chứng minh công thức trên bằng cách chỉ ra rằng mỗi
phần tử của hợp n tập hợp được đếm đúng một lần. Giả sử a là phần tử chung
. . , An trong đó 1 ¤ r ¤ n.
của đúng r tập hợp trong những tập A1 , A2 , .°
Phần tử này được đếm đúng Cr lần trong tổng |Ai |, đúng Cr2 lần trong tổng
°
1
tA1, A2, . . . , Anu. Theo công thức tính số tập con của tập có n phần tử ta có
vế phải của công thức phát biểu trong nguyên lí bù trừ gồm 2n 1 số hạng.
Lời giải: Trước hết ta đếm số hợp số nhỏ hơn 100. Nhớ lại rằng một hợp số
luôn có ít nhất một ước nguyên tố nhỏ hơn hay bằng căn bậc hai của nó. Do vậy
mọi hợp số nhỏ hơn 100 sẽ chia hết cho 2 hoặc cho 3 hoặc cho 5 hoặc cho 7
không kể 2, 3, 5, 7. Gọi Ak là tập các số nguyên dương nhỏ hơn 100 chia hết
cho k. Vậy số các hợp số nhỏ hơn 100 là |A2 Y A3 Y A5 Y A7 | 4. Theo
nguyên lí bù trừ cho hợp của bốn tập hợp ta có
Chúng ta có nhiều cách để định nghĩa một đối tượng. Chúng ta có thể định
nghĩa một cách tường minh nhưng điều này không phải lúc nào cũng thực hiện
được, có một cách khác là ta định nghĩa đối tượng này qua chính nó. Kỹ thuật
kiểu này được gọi là đệ qui hay hồi qui. Kỹ thuật đệ qui được sử dụng rất nhiều
và đặc biệt hữu ích trong lập trình tin học.
Trong mục này chúng ta sẽ đưa ra định nghĩa đệ qui của những dãy số, hàm
số và tập hợp bằng đệ qui.
Để xem một hàm được định nghĩa bằng đệ qui như thế nào ta hãy xét ví dụ
về định nghĩa hàm giai thừa F pnq. Chúng ta có thể định nghĩa một cách tường
minh F pnq n!. Tuy nhiên tính toán giá trị của hàm tại một số nguyên dương
n bất kì, chẳng hạn F p5q 5! ta phải tính 5! 5.4! 5.4.3! 5.4.3.2!
5.4.3.2.1! 5.4.3.2.1.0!. Như vậy giá trị F p5q được tính thông qua các giá
trị trước nó và cuối cùng bao giờ ta cũng phải tính F p0q 0! 1. Từ ví dụ
trên ta thấy có thể định nghĩa hàm giai thừa F pnq như sau: Đầu tiên ta định
nghĩa giá trị tại n 0 sau đó ta xác định giá trị tại số nguyên n bất kì bằng
công thức F pnq n.F pn 1q.
Một cách tổng quát, để định nghĩa một hàm xác định trên tập số nguyên
không âm bằng đệ qui ta cho:
Ví dụ 2.2.1 Cho hàm f được định nghĩa bằng đệ qui như sau:
f p0q 2, f pn 1q 3f pnq 5.
Ví dụ 2.2.2 Hãy cho định nghĩa đệ qui của hàm giai thừa F pnq
n!.
Lời giải: Nhận thấy F p0q 1. Do pn 1q! 1.2.3 . . . n.pn 1q
pn 1q.n! nên ta có công thức F pn 1q pn 1q.F pnq. l
Ví dụ 2.2.3 Hãy cho định nghĩa đệ qui của hàm lũy thừa F pnq an, trong đó
a là số thực khác không và n là số nguyên không âm.
l
¹
n
Ví dụ 2.2.5 Hãy cho định nghĩa đệ qui của hàm F pnq ak .
k0
Lời giải: Phần đầu của định nghĩa đệ qui là: F p0q a0.
Phần thứ hai của định nghĩa của đệ qui là
¹1
n ¹
n
F pn 1q ak ak .an 1 an 1 .F pn q.
k0 k0
l
Ví dụ 2.2.6 Hãy đưa ra định nghĩa đệ qui của hàm max và min sao cho
maxta1 , a2 , . . . , an u và minta1 , a2 , . . . , an u tương ứng là số lớn nhất và
bé nhất của n số a1 , a2 , . . . , an .
Lời giải: Ta sẽ định nghĩa đệ qui đồng thời hàm max và hàm min như sau:
Đầu tiên ta xác định maxta1 u a1 và minta1 u a1 .
Sau đó ta đưa ra biểu thức đệ qui
hơn từ k giá trị này. Theo nguyên lí thứ hai của qui nạp toán học thì cách định
nghĩa này tạo ra những hàm hoàn toàn xác định.
Một dãy số là một hàm số xác định trên tập số nguyên không âm. Chính vì
vậy ta hoàn toàn có thể đưa ra định nghĩa đệ qui của những dãy số. Một trong
những dãy số phổ biến nhất là dãy Fibonacci.
Ví dụ 2.2.7 (Dãy Fibonacci) Dãy số Fibonacci tfn u được định nghĩa bằng đệ
qui như sau: f0 0, f1 1 và fn fn1 fn2 , với n 2, 3, 4, . . ..
Hãy tính các số hạng f2 , f3 , f4 , f5 , f6 , f7 .
Lời giải: Từ định nghĩa đệ qui của dãy tfn u ta suy ra:
f2 f1 f0 0 1 1,
f3 f2 f1 1 1 2,
f4 f3 f2 2 1 3,
f5 f4 f3 3 2 5,
f6 f5 f4 5 3 8,
f7 f6 f5 8 5 13.
l
Dãy số Fibonacci có nhiều ứng dụng quan trọng và lí thú. Ta cũng thường
gặp dãy số Fibonacci trong thiên nhiên, chẳng hạn ở số cánh của hầu hết các
loài hoa: 3 cánh (hoa loa kèn), 5 cánh (hoa mao lương vàng), 8 cánh (hoa phi
yến), 13 cánh và 21 cánh (hoa cúc vạn thọ), 34 cánh (hoa cúc),...
Dãy Fibonacci còn có rất nhiều tính chất hay và có thể được chứng minh
bằng cách sử dụng định nghĩa đệ qui. Sau đây ta sẽ đưa ra một vài ví dụ.
Các tập hợp thường được định nghĩa bằng đệ qui. Trước tiên ta đưa ra tập
xuất phát. Sau đó xây dựng qui tắc tạo những phần tử mới từ các phần tử đã
biết của tập. Những tập được mô tả bằng cách như vậy được gọi là những tập
được định nghĩa tốt, những định lí về chúng có thể chứng minh bằng cách sử
dụng định nghĩa đệ qui của chúng.
1. 3 P S.
2. x y P S nếu x P S và y P S.
Hãy chỉ ra rằng S là tập các số nguyên dương chia hết cho 3.
Lời giải: Gọi A là tập các số nguyên dương chia hết cho 3. Để chứng minh
A S ta sẽ chứng minh rằng A là tập con của S và S là tập con của A.
Chứng minh A S.
Nhận thấy rằng các phần tử của A đều có dạng 3n với n là một số nguyên
dương. Đặt P pnq là hàm mệnh đề “3n thuộc S”. Để chứng minh A là tập con
của S ta cần chỉ ra rằng P pnq đúng với mọi n nguyên dương. P p1q đúng vì
theo định nghĩa của S ta có 3.1 3 P S. Giả sử P pnq đúng, tức là 3.n P S.
Vì 3 P S và 3n P S nên theo định nghĩa 3 3n 3pn 1q P S. Điều này
có nghĩa là P pn 1q đúng. Theo qui nạp toán học mọi số có dạng 3n, với n
nguyên dương, thuộc S.
Chứng minh S A.
Để chứng minh S là tập con của A ta sẽ chỉ ra rằng các phần tử của S sinh ra
do phần đầu và phần sau của định nghĩa đệ qui đều thuộc A, tức là đều chia hết
cho 3. Hiển nhiên phần tử đầu tiên của S là 3 thuộc A do 3 chia hết cho 3. Bây
giờ ta chứng minh tất cả các phần tử của S sinh ra do phần sau của định nghĩa,
cũng thuộc A. Giả sử x và y là hai phần tử của S là hai phần tử của A. Theo
định nghĩa của S thì x y cũng là một phần tử của S, vì x và y đều chia hết
cho 3 nên x y cũng chia hết cho 3, tức là x y P A. l
Bộ môn Toán - ĐẠI HỌC THĂNG LONG 71
Chương 2. Nguyên lí bù trừ, Đệ qui và Hệ thức truy hồi
Định nghĩa tập hợp trong ví dụ 2.2.9 là một định nghĩa đệ qui rất điển hình.
Đầu tiên tập xuất phát được đưa ra. Tiếp theo là qui tắc tạo những phần tử mới
từ những phần tử đã biết của tập.
Một trong các ứng dụng thường gặp nhất của định nghĩa đệ qui cho tập hợp
là để định nghĩa biểu thức được tạo đúng qui tắc trong các hệ khác nhau. Ta xét
ví dụ sau:
Ví dụ 2.2.10 Ta xét biểu thức gồm các biến, các số và các toán tử , trừ ,
nhân , chia { và lũy thừa Ò được kết hợp với nhau theo một qui tắc nào đó. Khi
đó một biểu thức (được tạo) đúng qui tắc được định nghĩa như sau:
1. x là biểu thức đúng qui tắc nếu x là một số hay một biến.
2. pf g q, pf g q, pf g q, pf {g q và pf Ò g q là những biểu thức đúng qui
tắc nếu f, g là những biểu thức đúng qui tắc.
Chẳng hạn, do x và 3 là các biểu thức đúng qui tắc nên theo định nghĩa trên
px 3q, px 3q, px 3q, px{3q và px Ò 3q là các biểu thức đúng qui tắc. Tiếp
theo, vì y cũng là biểu thức đúng qui tắc nên ppx 3q y q, py px 3qq cũng
là đúng qui tắc,... (lưu ý là p3{0q cũng là biểu thức đúng qui tắc vì ở đây ta chỉ
quan tâm đến cú pháp).
Ví dụ 2.2.11 Biểu thức cho mệnh đề phức hợp gồm T, F , biến mệnh đề và các
toán tử t , ^, _, Ñ, Øu được định nghĩa như sau:
1. T, F và p, trong đó p là một biến mệnh đề, là những biểu thức đúng qui
tắc.
2. p pq, pp ^ qq, pp _ qq, pp Ñ qq, pp Ø qq là những biểu thức đúng qui
tắc nếu p và q là những biểu thức đúng qui tắc.
Chẳng hạn, nếu p, q là những biến mệnh đề, khi đó dùng định nghĩa đệ qui
nhiều lần ta có thể chỉ ra rằng các biểu thức
pp ^ qq, pr _ F q và ppp ^ qq Ñ pr _ F qq
là đúng qui tắc.
Định nghĩa đệ qui thường được dùng khi nghiên cứu các xâu kí tự. Nhắc
lại rằng, xâu là dãy những kí tự thuộc bộ chữ cái Σ. Tập hợp các xâu ứng với
bộ chữ cái Σ được kí hiệu là Σ . Hai xâu có thể kết hợp với nhau theo phép
ghép. Ghép hai xâu x và y được xâu xy là xâu tạo nên bằng cách viết tiếp
xâu y sau xâu x. Ví dụ, cho x là xâu abrrs, y là xâu zedgt, khi đó xy là
xâu abrrszedgt. Khi chứng minh những kết quả về xâu ta thường dùng định
nghĩa đệ qui.
Ví dụ 2.2.12 (Định nghĩa đệ qui của tập các xâu) Giả sử Σ là tập các xâu
trên bộ chữ cái Σ. Khi đó, Σ được định nghĩa bằng đệ qui như sau:
Phần đầu của định nghĩa nói rằng xâu rỗng thuộc Σ . Phần sau khẳng định một
xâu mới tạo nên bằng cách ghép một kí tự của Σ với một xâu của Σ cũng thuộc
Σ .
Độ dài của xâu, tức số kí tự trong xâu, cũng được định nghĩa bằng đệ qui.
Ví dụ 2.2.13 Hãy nêu định nghĩa bằng đệ qui độ dài của xâu w.
Lời giải: Ta kí hiệu độ dài của xâu w là lpwq. Khi đó định nghĩa đệ qui của
lpwq như sau:
l
Ví dụ 2.2.14 Chứng minh rằng lpxy q lpxq lpyq, trong đó x và y là những
xâu thuộc Σ .
Lời giải: Ta sẽ chứng minh bằng qui nạp toán học theo độ dài n của xâu y
khẳng định
lpxy q lpxq lpy q,
với x, y là những xâu thuộc Σ .
Đặt P pnq là mệnh đề
lpxy q l px q l py q,
với x P Σ và y P Σ , y là xâu có độ dài n.
Với n 0 ta có y λ, khi đó
lpxy q lpxλq lpxq lpxq lpxq lpλq.
0
Giả sử P pnq là đúng, ta phải chứng minh rằng nếu z P Σ là xâu có độ dài
n 1 thì
lpxz q l px q l pz q.
Do z là xâu có độ dài n 1 nên z ya, với y là xâu có độ dài n và a P Σ.
Theo định nghĩa độ dài của xâu ta có
lpxz q lpxyaq lpxyq 1.
Định nghĩa 2.3.1 Hệ thức truy hồi của một dãy số tan u là công thức biểu
diễn an qua một hay nhiều số hạng đi trước của dãy, cụ thể là biểu diễn qua
an0 , an0 1 , . . . , an1 , với mọi n nguyên dương và n ¥ n0 , trong đó n0 là số
nguyên không âm.
Dãy số được gọi là lời giải hay là nghiệm của hệ thức truy hồi nếu các số
hạng của nó thỏa mãn hệ thức truy hồi này.
Ví dụ 2.3.2 Cho tan u là dãy số thỏa mãn hệ thức truy hồi an an1 2an2 ,
với n 2, 3, . . . , và cho a0 1, a1 2. Tìm a2 , a3 .
Lời giải: Từ hệ thức truy hồi ta có a2 a1 2a0 2 2.1 4 và
a3 a2 2a1 4 2.2 8. l
Ví dụ 2.3.3 Cho hệ thức truy hồi an 3an1 2an2 , n 2, 3, . . . Kiểm
tra xem những dãy nào sau đây là nghiệm của hệ thức truy hồi trên.
1. an 2n, @n P N .
2. an 2n, @n P N .
3. an 2, @n P N .
Lời giải:
l
Những điều kiện đầu đối với dãy số xác định những số hạng trước số hạng
đầu tiên mà kể từ đó hệ thức truy hồi có hiệu lực. Trong ví dụ 2.3.2, a0 1 và
a1 2 là những điều kiện đầu. Những điều kiện đầu và hệ thức truy hồi xác
định duy nhất dãy số, chúng cho ra định nghĩa đệ qui của dãy và bất kì số hạng
nào của dãy cũng có thể tìm được nhờ điều kiện đầu và sử dụng hệ thức truy hồi
với số lần cần thiết. Cùng một hệ thức truy hồi nhưng điều kiện đầu khác nhau
cho ta những dãy số khác nhau.
Ví dụ 2.3.4 (Lãi suất kép) Giả sử một người gửi 100 triệu vào tài khoản của
mình tại một ngân hàng với lãi suất kép 8, 4% mỗi năm. Sau 20 năm anh ta có
bao nhiêu tiền trong tài khoản của mình?
Lời giải: Gọi Pn là tổng số tiền có trong tài khoản sau n năm. Vì số tiền có
trong tài khoản sau n năm bằng số tiền có sau n 1 năm cộng với lãi suất sinh
ra vào năm thứ n nên ta thấy dãy tPn u thỏa mãn hệ thức truy hồi sau:
Pn1
Pn 0, 084.Pn1 1, 084.Pn1.
Điều kiện đầu là P0 100.
Dùng phương pháp lặp ta có thể tìm được công thức cho Pn . Thật vậy, ta có
P1 1, 084.P0,
P2 1, 084.P1 p1, 084q2.P2,
...
Pn 1, 084.Pn1 p1, 084qn.P0.
Khi thay điều kiện đầu P0 100 vào ta nhận được công thức:
Pn p1, 084qn .100.
Sử dụng qui nạp toán học có thể khẳng định được tính đúng đắn của công
thức vừa tìm. Công thức đúng với n 0 vì đó chính là điều kiện đầu. Giả sử
công thức đúng đến n, tức là Pn p1, 084qn .100. Khi đó từ hệ thức truy hồi
và giả thiết qui nạp ta có
Ví dụ 2.3.5 (Họ nhà thỏ và số Fibonacci) Một cặp thỏ mới sinh (một con đực
và một con cái) được thả lên một hòn đảo. Giả sử rằng một cặp thỏ chưa sinh
sản được trước khi đầy hai tháng tuổi, mỗi tháng chúng đẻ ra một đôi thỏ con.
Nếu số thỏ sinh ra không bị tử vong thì sau n tháng tổng số thỏ có trên đảo là
bao nhiêu?
Lời giải: Giả sử fn là số cặp thỏ sau n tháng. Ta sẽ chỉ ra rằng fn với
n 1, 2, 3, . . . là những số của dãy Fibonacci. Số lượng các cặp thỏ có thể
tính bằng hệ thức truy hồi. Cuối tháng thứ nhất số các cặp thỏ trên đảo là
f1 1. Vì cặp thỏ này vẫn chưa đến tuổi sinh sản được nên trong tháng thứ
hai cũng là f2 1. Tổng số cặp thỏ sau n tháng bằng tổng số cặp thỏ trên đảo
ở tháng trước fn1 và số cặp thỏ mới đẻ ra là fn2 , do mỗi cặp thỏ con sinh ra
từ cặp thỏ có ít nhất hai tháng tuổi.
Vậy dãy tfn u thỏa mãn hệ thức truy hồi
fn1 fn2,
fn
với n ¥ 3 và những điều kiện đầu f1 1 và f2 1.
Vì điều kiện đầu và hệ thức truy hồi xác định duy nhất dãy số nên số các cặp
thỏ trên đảo sau n tháng được cho bởi số Fibonacci thứ n. l
Truyền thuyết của đạo Balamon “Ngày tận thế của thế giới” được chép lại
như sau: Trong thánh địa Phật giáo ở phía Bắc Ấn Độ có một tấm đồng, trong
đó cắm ba cây kim báu. Khi Brahama sáng tạo ra thế giới, Phạn Thiên đã bắn
64 xuyến vàng vào cây kim thứ nhất, theo thứ tự từ lớn đến nhỏ, tạo thành hình
tháp nên được gọi là “tháp Phạn”. Phạn Thiên phán rằng: bất cứ ngày hay đêm
đều phải cử tu sĩ canh giữ báu vật và liên tục chuyển 64 xuyến vàng đó sang cây
kim thứ hai và sử dụng cây kim thứ ba làm trung gian nhưng mỗi lần chỉ được
chuyển một xuyến vàng và luôn giữ hình tháp Phạn. Ngày tận thế sẽ đến khi cả
64 xuyến vàng đều được chuyển sang cây kim thứ hai.
Câu chuyện truyền thuyết trên có nội dung như một bài toán có tên là “Tháp
Hà Nội”.
Ví dụ 2.3.6 (Tháp Hà Nội) Có ba cái cọc dài bằng nhau. Một cọc đã được
lồng n cái đĩa chồng lên nhau với đường kính giảm dần. Bài toán đòi hỏi
chuyển cả n cái đĩa sang một cọc khác với những điều kiện sau:
1. Chỉ được chuyển mỗi lần một đĩa từ cọc này sang cọc khác.
2. Trong mỗi lần chuyển đĩa, không được đặt đĩa có đường kính lớn hơn ở
trên đĩa có đường kính nhỏ hơn.
Gọi Hn là số lần dịch chuyển cần thiết để giải bài toán Tháp Hà Nội có n đĩa.
Hãy lập hệ thức truy hồi đối với dãy tHn u.
Lời giải: Giả sử ở cọc thứ nhất có n đĩa khác nhau. Để chuyển n đĩa này sang
cọc thứ hai, ta phải thực hiện những công việc sau:
1. Cố định chiếc đĩa lớn nhất, dịch chuyển n 1 chiếc đĩa từ cọc thứ nhất
sang cọc thứ ba theo qui tắc ở trên và phải dùng Hn1 lần dịch chuyển.
2. Chuyển chiếc đĩa lớn nhất này bằng một lần dịch chuyển từ cọc một sang
cọc hai.
Hình 2.2: Minh họa bài toán Tháp Hà Nội với 3 đĩa.
3. Cuối cùng, dịch chuyển n 1 chiếc đĩa từ cọc ba sang cọc hai và đặt lên
trên chiếc đĩa lớn nhất. Bước cuối cùng này ta phải dùng Hn1 lần dịch
chuyển.
Từ đó ta có hệ thức truy hồi
Hn 2Hn1 1.
Điều kiện đầu H1 1 vì chỉ cần một lần dịch chuyển một đĩa ở cọc một sang
cọc hai theo đúng qui tắc của bài toán.
Sử dụng phương pháp lặp ta có thể giải được hệ thức truy hồi trên. Ta có:
Hn 2Hn1 1
2p2Hn2 1q 1
22Hn2 2 1
22p2Hn3 1q 2 1
23Hn3 22 2 1
...
2n1H1 2n2 . . . 2 1
2n 1.
Phương pháp lặp này cho ta nghiệm của hệ thức truy hồi Hn 2Hn1 1 với
điều kiện đầu H1 1. Dùng qui nạp toán học ta có thể chứng minh được tính
đúng đắn của công thức trên. l
78 Bộ môn Toán - ĐẠI HỌC THĂNG LONG
2.4. Giải Hệ thức truy hồi
Muốn thực hiện được lời phán của Phạn Thiên thì phải mất H64 lần chuyển
xuyến. Thay n 64 vào hệ thức trên ta được
Ví dụ 2.3.7 Tìm hệ thức truy hồi và điều kiện đầu để tính số các xâu nhị phân
độ dài n và có chứa hai số 0 liên tiếp. Có bao nhiêu xâu như thế có độ dài bằng
5?
Lời giải: Gọi Pn là số xâu nhị phân độ dài n và có chứa hai số 0 liên tiếp. Giả
sử một xâu như thế có dạng a1 a2 . . . an1 an . Với n ¥ 3 ta xét những trường
hợp sau:
Nếu an 1 thì xâu đã cho có dạng a1 a2 . . . an1 1. Số xâu nhị phân độ
dài n chứa hai số 0 liên tiếp kiểu này bằng số xâu nhị phân a1 a2 . . . an1 độ
dài n 1 chứa hai số 0 liên tiếp và bằng Pn1 xâu.
Nếu an 0 thì xâu đã cho có dạng a1 a2 . . . an1 0. Khi đó nếu an1 0
thì xâu đã cho luôn chứa hai số 0 liên tiếp nên ta có 2n2 xâu, còn nếu an1 1
thì số xâu nhị phân độ dài n chứa hai số 0 liên tiếp kiểu này bằng số xâu nhị
phân a1 a2 . . . an2 độ dài n 2 chứa hai số 0 liên tiếp và bằng Pn2 xâu.
Như vậy ta có hệ thức truy hồi
với n ¥ 3. Điều kiện đầu là P1 0 vì không có xâu nhị phân nào độ dài 1 lại
có hai số 0 liên tiếp, P2 1 vì có duy nhất xâu 00 độ dài hai thỏa mãn đề bài.
Để nhận được P5 ta sử dụng liên tiếp hệ thức truy hồi
P3 P2 P1 2 3,
P4 P3 P2 22 8,
P5 P4 P3 23 19.
l
Định nghĩa 2.4.1 Một hệ thức truy hồi tuyến tính thuần nhất bậc k với hệ số
hằng số là hệ thức truy hồi có dạng:
Ví dụ 2.4.2 Hệ thức truy hồi Pn 1, 084.Pn1 là hệ thức truy hồi tuyến tính
thuần nhất bậc nhất với hệ số hằng.
Hệ thức truy hồi fn fn1 fn2 là hệ thức truy hồi tuyến tính thuần nhất
bậc hai với hệ số hằng.
Hệ thức truy hồi an 2an1 5an5 là hệ thức truy hồi tuyến tính thuần
nhất bậc năm với hệ số hằng.
Định nghĩa 2.4.4 Cho hệ thức truy hồi an c1an1 c2 an2 . . . ck ank .
Khi đó phương trình
Các hệ thức truy hồi tuyến tính thuần nhất được nghiên cứu vì hai lí do. Thứ
nhất chúng hay gặp khi mô hình hóa các bài toán. Thứ hai chúng có thể giải
được một cách có hệ thống. Dưới đây ta sẽ đưa ra cách giải cho một số hệ thức
truy hồi tuyến tính thuần nhất hệ số hằng.
Phương pháp cơ bản để giải hệ thức truy hồi tuyến tính thuần nhất là tìm
nghiệm dưới dạng an r n , trong đó r là hằng số. Nhận thấy rằng an r n là
nghiệm của hệ thức truy hồi an c1 an1 c2 an2 . . . ck ank khi và
chỉ khi
r n c1 r n1 c2 r n2 . . . ck r nk .
Sau khi chia cả hai vế cho r nk và chuyển vế ta được phương trình tương đương
Giải hệ thức truy hồi tuyến tính thuần nhất bậc hai với hệ số hằng
Cho hệ thức truy hồi tuyến tính thuần nhất bậc hai với hệ số hằng an
c1 an1 c2 an2 có điều kiện đầu là a0 C0 và a1 C1 . Ta sẽ đưa ra công
thức nghiệm cho hệ thức truy hồi dựa trên tính chất nghiệm của phương trình
đặc trưng.
Trường hợp 1: Phương trình đặc trưng có hai nghiệm phân biệt. Khi đó
công thức nghiệm được cho qua định lí sau:
Định lý 2.4.1 Cho c1 , c2 là hai số thực. Giả sử phương trình đặc trưng r 2
c1 r c2 0 có hai nghiệm phân biệt r1 và r2 . Khi đó dãy tan u là nghiệm của
hệ thức truy hồi an c1 an1 c2 an2 nếu và chỉ nếu an α1 r1n α2 r2n ,
với n 1, 2, . . ., trong đó α1 và α2 là những hằng số.
Chứng minh: Trước hết ta sẽ chỉ ra rằng: nếu r1 , r2 là hai nghiệm của phương
trình đặc trưng và α1 , α2 là những hằng số thì dãy tan u với an α1 r1n α2 r2n
là nghiệm của hệ thức truy hồi.
Giả sử r1 , r2 là hai nghiệm của r 2 c1 r c2 0, tức là r12 c1 r1 c2
và r22 c1 r2 c2 . Khi đó ta có
c1 an1 c2 an2 c1pα1r1n1 α2r2n1q c2pα1r1n2 α2r2n2q
α1r1n2pc1r1 c2q α2r2n2pc1r2 c2q
α1r1n2r12 α2r2n2r22
α1r1n α2r2n
an.
Vậy dãy tan u với an α1 r1n α2 r2n là nghiệm của hệ thức truy hồi đã cho.
Ngược lại, giả sử tan u là một nghiệm bất kì của hệ thức truy hồi ta sẽ chỉ
ra rằng tồn tại những hằng số α1 và α2 sao cho an α1 r1n α2 r2n , với
n 1, 2, . . . .
Ta chọn α1 và α2 là nghiệm của hệ phương trình
#
α1 α2 C0,
α1 r1 α2 r2 C1.
Giải ra ta được nghiệm
của hệ thức truy hồi và có cùng điều kiện đầu với dãy tan u. Vì hệ thức truy hồi
và điều kiện đầu xác định duy nhất dãy nên an bn α1 r1n α2 r2n . Định lí
được chứng minh. l
Ví dụ 2.4.6 Tìm nghiệm của hệ thức truy hồi an 3an1 2an2 với điều
kiện đầu a0 5 và a1 8.
Lời giải: Phương trình đặc trưng của hệ thức truy hồi có dạng r 2 3r 2 0.
Các nghiệm đặc trưng là r1 1 và r2 2. Theo định lí 2.4.1 dãy tan u là
nghiệm của hệ thức truy hồi khi và chỉ khi
an α1.1n α2 .2n ,
với α1 và α2 là những hằng số. Từ điều kiện đầu ta có
#
a0 5 α1 α2 ,
a1 8 α1 2α2 .
Giải ra ta được α1 2 và α2 3.
Vậy nghiệm của hệ thức truy hồi thỏa mãn điều kiện đầu đã cho là dãy tan u với
an 2 3.2n .
l
Ví dụ 2.4.7 Tìm công thức tường minh của các số Fibonacci.
Lời giải: Dãy các số Fibonacci thỏa mãn hệ thức truy hồi fn fn1 fn2
với điều kiện đầu f0 0 và f1 1. Các nghiệm đặc trưng là:
? ?
1
r1 1
2
5
và r2 2
5
.
Theo định lí 2.4.1 các số Fibonacci được cho bởi công thức sau:
? ?
5 n 1 5 n
fn α1 1
2
α2
2
với α1 và α2 là những hằng số. Từ điều kiện đầu ta có những hằng số α1 và
α2 thỏa mãn hệ phương trình:
$
& f0 0 α1 α2?
,
?
%f1 1 α1
1 5 1 5
α2 .
2 2
Định lý 2.4.2 Cho c1 , c2 là hai số thực. Giả sử phương trình đặc trưng r 2
c1 r c2 0 có nghiệm kép r0 . Khi đó dãy tan u là nghiệm của hệ thức
truy hồi an c1 an1 c2 an2 nếu và chỉ nếu an α1 r0n α2 nr0n , với
n 1, 2, . . ., trong đó α1 và α2 là những hằng số.
Chứng minh: Đầu tiên ta sẽ chỉ ra rằng: nếu r0 là nghiệm kép của phương trình
đặc trưng và α1 , α2 là những hằng số thì dãy tan u với an α1 r0n α2 nr0n
là nghiệm của hệ thức truy hồi.
Giả sử r0 là nghiệm kép của r 2 c1 r c2 0, ta có r02 c1 r0 c2 ,
c21 4c2 0 và r0 . Khi đó
c1
2
c1 an1 c2 an2 c1pα1r0n1 α2pn 1qr0n1q
c2 pα1 r0n2 α2 pn 2qr0n2 q
α1r0n2pc1r0 c2q α2nr0n2pc1r0 c2q
α2r0n2pc1r0 2c2q
2
α1r0 r0 α2nr0 r0 α2r0 p
n2 2 n2 2 n2 c1 4c2
q
4
α1r0n α2nr0n
an.
Vậy dãy tan u với an α1 r0n α2 nr0n là nghiệm của hệ thức truy hồi đã cho.
Ngược lại, giả sử tan u là một nghiệm bất kì của hệ thức truy hồi ta sẽ chỉ
ra rằng tồn tại những hằng số α1 và α2 sao cho an α1 r0n α2 nr0n , với
n 1, 2, . . . .
Ta chọn α1 và α2 là nghiệm của hệ phương trình:
#
α1 C0,
α1 r0 α2 r0 C1.
Giải ra ta được nghiệm:
Đặt bn α1 r0n α2 nr0n . Theo chứng minh điều kiện cần ở trên ta có
dãy tbn u là một nghiệm của hệ thức truy hồi và có cùng điều kiện đầu với
dãy tan u. Vì hệ thức truy hồi và điều kiện đầu xác định duy nhất dãy nên
an bn α1 r0n α2 nr0n . Định lí được chứng minh. l
Ví dụ 2.4.8 Tìm nghiệm của hệ thức truy hồi an 4an1 4an2 với điều
kiện đầu a0 1 và a1 4.
Lời giải: Ta thấy phương trình đặc trưng r 2 4r 4 0 có nghiệm kép
r 2. Theo định lí 2.4.2 nghiệm của hệ thức truy hồi có dạng
an α1p2qn α2 np2qn ,
với α1 và α2 là những hằng số. Từ hai điều kiện đầu ta suy ra:
#
1 α1,
a0
4 α1p2q α2p2q.
a1
Hệ phương trình trên cho ta nghiệm α1 1 và α2 3.
Vậy nghiệm của hệ thức truy hồi thỏa mãn những điều kiện đầu là:
an p2qn 3n.p2qn.
l
?
Trường hợp 3: Phương trình đặc trưng không có nghiệm thực. Khi đó
∆ : c21 4c2 0. Bằng cách đặt ρ c2 và chọn góc α với 0 ¤ α ¤ 2π
sao cho cos α ?
c1 |∆| , công thức nghiệm của hệ thức
và sin α ?
2 c 2 2 c 2
truy hồi được cho trong định lí sau:
Định lý 2.4.3 Cho c1 , c2 là hai số thực. Giả sử phương trình đặc trưng r 2
c1 r c2 0 không có nghiệm thực. Khi đó dãy tan u là nghiệm của hệ thức truy
hồi an c1 an1 c2 an2 nếu và chỉ nếu an ρn pα1 cos nα α2 sin nαq,
với n 1, 2, . . ., trong đó α1 và α2 là những hằng số.
Ví dụ 2.4.9 Tìm nghiệm của hệ thức truy hồi an an1 an2 với những
điều kiện đầu a0 1 và a1 1.
an cos
nπ
?1 sin nπ .
3 3 3
l
Bộ môn Toán - ĐẠI HỌC THĂNG LONG 85
Chương 2. Nguyên lí bù trừ, Đệ qui và Hệ thức truy hồi
Giải hệ thức truy hồi tuyến tính thuần nhất bậc k với hệ số hằng
Trong mục này ta sẽ đưa ra những công thức nghiệm cho các hệ thức truy
hồi tuyến tính thuần nhất bậc k ¡ 2 với hệ số hằng. Do các chứng minh cho
những công thức nghiệm nói trên khá phức tạp nên ta sẽ công nhận mà không
đi vào chứng minh cụ thể.
Tương tự như cách giải hệ thức truy hồi tuyến tính thuần nhất bậc hai với hệ
số hằng ta cũng xét các trường hợp sau:
Trường hợp 1: Phương trình đặc trưng có k nghiệm thực phân biệt. Định
lí sau là một mở rộng của định lí 2.4.1 cho ta công thức nghiệm của hệ thức truy
hồi bậc k:
Định lý 2.4.4 Cho c1 , c2 , . . . , ck là những số thực. Giả sử phương trình đặc
trưng r k c1 r k1 . . . ck 0 có k nghiệm phân biệt r1 , r2 , . . . , rk . Khi
đó dãy tan u là nghiệm của hệ thức truy hồi
an c1an1 c2 an2 ... ck ank
nếu và chỉ nếu
an α1r1n α2 r2n ... αk rkn ,
với n 1, 2, . . ., trong đó α1, α2, . . . , αk là những hằng số.
Ví dụ 2.4.10 Tìm nghiệm của hệ thức truy hồi an an1 4an2 4an3
thỏa mãn điều kiện đầu a0 2 , a1 9 và a2 5.
Lời giải: Phương trình đặc trưng của hệ thức truy hồi r 3 r 2 4r 4 0 có
các nghiệm đặc trưng là r1 1, r2 2, r3 2. Theo định lí 2.4.4 nghiệm
của hệ thức truy hồi có dạng
an α11n α2 2n α3 p2qn ,
với α1 , α2 và α3 là những hằng số. Để tìm α1 , α2 và α3 ta sử dụng điều kiện
đầu: $
& a0 2 α1 α2 α3 ,
a1 9 α1 2α2 2α3 ,
%
a2 5 α1 4α2 4α3 .
Giải hệ phương trình trên ta nhận được α1 1, α2 2, α3 3 .
Vậy nghiệm của hệ thức truy hồi thỏa mãn những điều kiện đầu đã cho là
an 1 2.2n 3.p2qn .
l
Trường hợp 2: Phương trình đặc trưng có nghiệm bội. Tương tự như định
lí 2.4.2 ta có định lí sau:
rk c1rk1 . . . ck
pr r1qpr r2q . . . pr rsqpr2 a1r b1q . . . pr2 atr btq,
trong đó các tam thức bậc hai pr 2 ai r bi q, i 1, t không
? có nghiệm thực
và s 2t k. Tương tự như định lí 2.4.3 đặt: ρi bi và chọn góc αi
với 0 ¤ αi ¤ 2π sao cho cos αi ? và sin α
ai |a2i 4bi |
? , công thức
2 bi 2 bi
nghiệm của hệ thức truy hồi được cho trong định lí sau:
Ví dụ 2.4.12 Tìm nghiệm của hệ thức truy hồi an an3 với điều kiện đầu
a0 3, a1 và a2
3 3 .
2 2
Lời giải: Nhận thấy phương trình đặc trưng r 3 1 pr
? 1qpr 2 r 1q có
thừa số r 2 r 1 0 không có nghiệm thực. Xét ρ ? 1 1 và chọn góc
α với 0 ¤ α ¤ 2π thỏa mãn cos α
1 và sin α 3 , ta được α 2π .
2 2 3
Theo định lí 2.4.6 nghiệm của hệ thức truy hồi có dạng
l
88 Bộ môn Toán - ĐẠI HỌC THĂNG LONG
2.5. Hệ thức truy hồi tuyến tính không thuần nhất hệ số hằng
2.5 Hệ thức truy hồi tuyến tính không thuần nhất hệ số hằng
Định nghĩa 2.5.1 Một hệ thức truy hồi tuyến tính không thuần nhất bậc k với
hệ số hằng số là hệ thức truy hồi có dạng
Khi đó nếu tpn u là một nghiệm của hệ thức truy hồi không thuần nhất thì mọi
nghiệm của nó đều có dạng tpn hn u, trong đó thn u là nghiệm của hệ thức truy
hồi tuyến tính thuần nhất tương ứng: an c1 an1 c2 an2 . . . ck ank .
Chứng minh: Giả sử tqn u là một nghiệm của hệ thức truy hồi không thuần
nhất. Ta có:
và
pn c1pn1 c2 pn2 ... ck pnk F pn q.
Trừ từng vế của hai phương trình trên ta được:
Ví dụ 2.5.3 Tìm một nghiệm riêng của hệ thức truy hồi sau an an1
2an2 n 1.
Lời giải: Phương trình đặc trưng r 2 r 2 0 không có nghiệm r 1. Ta
tìm một nghiệm riêng của hệ thức truy hồi dưới dạng pn bn c. Thay tpn u
vào hệ thức truy hồi ta có
bn c rbpn 1q cs 2rbpn 2q cs n 1.
Hay
p2b 1qn p5b 2c 1q 0.
Do đẳng thức trên đúng với mọi n nên ta có:
"
2b 1 0,
5b 2c 1 0.
21 và c 34 . Vậy nghiệm riêng của hệ thức truy hồi đã
Giải ra ta được b
cho có dạng pn
1 n 3 . l
2 4
b. Nếu phương trình đặc trưng r k c1 r k1 . . . ck 0 có nghiệm r 1 bội
s thì tìm nghiệm riêng tpn u dưới dạng pn ns pt0 nm t1 nm1 . . . tm q,
với t0 , t1 , . . . , tm là những hằng số được tìm bằng phương pháp hệ số bất định.
Ví dụ 2.5.4 Tìm một nghiệm riêng của hệ thức truy hồi sau an 3an1
2an3 1.
Lời giải: Do phương trình đặc trưng r 3 3r 2 0 có nghiệm kép r1
r2 1 và r3 2 nên ta tìm một nghiệm riêng của hệ thức truy hồi dưới dạng
pn an2 . Thay tpn u vào hệ thức truy hồi ta có
3apn 2q2 2apn 3q2
an2 1.
Ví dụ 2.5.5 Tìm một nghiệm riêng của hệ thức truy hồi sau an an2 2n.
Lời giải: Do phương trình đặc trưng r 2 1 0 có nghiệm là r1 1 và
r2 1 đều khác 2 nên ta tìm một nghiệm riêng của hệ thức truy hồi dưới dạng
pn a2n . Thay tpn u vào hệ thức truy hồi ta có
a2n a2n2 2n .
Giải ra ta được a
4
3
Vậy một nghiệm riêng của hệ thức truy hồi đã cho có dạng pn 2n .
4
3
l
b. Nếu β là nghiệm bội s của phương trình đặc trưng thì tìm nghiệm riêng dưới
dạng pn ans β n .
Ví dụ 2.5.6 Tìm một nghiệm riêng của hệ thức truy hồi sau an 3an1 3n .
Lời giải: Do phương trình đặc trưng có nghiệm r 3 nên ta tìm một nghiệm
riêng của hệ thức truy hồi dưới dạng pn an3n . Thay tpn u vào hệ thức truy
hồi ta được
an3n 3apn 1q3n1 3n .
Giải ra ta được a 1.
Vậy một nghiệm riêng của hệ thức truy hồi đã cho có dạng pn n3n. l
3. F pnq có dạng: F pnq pb0 nm . . . bm q Aβ n .
Ta tìm nghiệm riêng dưới dạng pn p1n p2n , trong đó p1n là nghiệm riêng của
hệ thức truy hồi
an c1an1 c2 an2 ... ck ank b0 nm ... bm ,
và p2n là nghiệm riêng của hệ thức truy hồi
an c1an1 c2 an2 ... ck ank Aβ n .
Ví dụ 2.5.7 Tìm một nghiệm riêng của hệ thức truy hồi sau an 6an1
3n 5n.
Lời giải: Ta có p1n 3n là một nghiệm riêng của hệ thức truy hồi: an
6an1 3n và p2n n là nghiệm riêng của hệ thức truy hồi an
6
5
6an1 5n. Vậy pn p1n p2n 3n n là một nghiệm riêng của
6
5
hệ thức truy hồi an 6an1 3 n
5n. l
Bộ môn Toán - ĐẠI HỌC THĂNG LONG 91
Chương 2. Nguyên lí bù trừ, Đệ qui và Hệ thức truy hồi
Một chương trình máy tính, mặc dù được cài đặt theo một thuật toán đúng,
có thể không cho kết quả như mong muốn đối với một bộ dữ liệu nào đó vì hoặc
là nó đòi hỏi quá nhiều thời gian, hoặc không có đủ bộ nhớ để lưu giữ dữ liệu
và các biến của chương trình. Vì vậy, để có thể đánh giá khả năng ứng dụng
của chương trình ta cần phải phân tích hiệu quả của thuật toán. Phân tích thuật
toán là quá trình tìm ra những đánh giá về thời gian tính cũng như dung lượng
bộ nhớ cần thiết để thực hiện thuật toán. Độ phức tạp tính toán của một thuật
toán là lượng thời gian và bộ nhớ cần thiết để thực hiện thuật toán. Trong mục
này ta quan tâm đến việc đánh giá thời gian cần thiết để thực hiện thuật toán (ta
sẽ gọi là thời gian tính của thuật toán).
Rõ ràng, thời gian tính của một thuật toán là hàm của dữ liệu đầu vào. Thông
thường khó có thể xây dựng công thức dưới dạng hiện cho hàm này, vì thế ta
đặt vấn đề đơn giản hơn. Thay vì việc với dữ liệu đầu vào, ta sẽ làm việc với
một đặc trưng quan trọng của dữ liệu đầu vào, đó là kích thước của nó.
Để tính toán thời gian tính của thuật toán ta sẽ đếm số câu lệnh mà nó phải
thực hiện, hoặc trong một số trường hợp có thể đếm cụ thể số phép tính số học,
so sánh, gán,... mà thuật toán đòi hỏi thực hiện. Như vậy, từ thông số này ta có
thể tính được thời gian thực sự mà thuật toán đòi hỏi nếu như nó được cài đặt
trên một ngôn ngữ lập trình và chạy trên một máy tính cụ thể. Mặt khác, thông
số này không phụ thuộc vào người lập trình và ngôn ngữ lập trình được chọn để
cài đặt thuật toán cũng như máy tính mà trên đó nó được thực hiện. Vì thế nó là
tiêu chuẩn khách quan để đánh giá hiệu quả của thuật toán.
Một hàm đối số nguyên dương là hàm thực f : Z ÝÑ R xác định trên
tập số nguyên dương. Ký hiệu F là tập các hàm đối số nguyên dương. Trong
phần này ta sẽ nghiên cứu một số định nghĩa và tính chất của lớp hàm nói trên.
Định nghĩa 2.6.1 Cho một hàm g pnq P F , Ký hiệu O pg pnqq là tập tất cả
những hàm f pnq P F có tính chất: tồn tại hằng số dương C1 và số nguyên
dương N1 sao cho với mọi n ¥ N1 , ta có
f pn q
¤ C1gpnq.
Ta viết f pnq O pg pnqq và nói rằng f pnq là Ô lớn của g pnq.
Ký hiệu Ωpg pnqq là tập tất cả những hàm f pnq P F có tính chất: tồn tại hằng
Ta viết f pnq Θpg pnqq và nói rằng f pnq là Thê ta của g pnq.
Định nghĩa trên có thể phát biểu bằng lời như sau:
• f pnq O pg pnqq nếu ngoại trừ hằng số và một số hữu hạn ngoại lệ f bị
chặn trên bởi g.
• f pnq Ωpg pnqq nếu ngoại trừ hằng số và một số hữu hạn ngoại lệ f bị
chặn dưới bởi g.
• f pnq Θpg pnqq nếu ngoại trừ hằng số và một số hữu hạn ngoại lệ f bị
chặn dưới và chặn trên bởi g.
10n2 5n O pn 2 q.
7
10n2 5n 7 Ωpn2 q.
10n2 5n 7 Θpn2 q.
l
Ví dụ trên có thể mở rộng lên một đa thức với hệ số bậc cao nhất dương bất kì
trong ví dụ dưới đây
Nếu đặt C2 2
ak
t
và N2p|ak1 | . . . |a1 | |a0 |q u thì ta có
ak
2
P pnq ¥ C2 nk đúng với mọi n ¥ N2 . Vậy P pnq Ωpnk q. Do đó
P pnq Θpnk q. l
Ví dụ 2.6.4 Chứng minh rằng logpnq O pn q.
Lời giải: Ta sẽ chỉ ra rằng logpnq ¤ n, với mọi n ¥ 1. Thật vậy, ta sẽ
chứng minh bất đẳng thức bằng qui nạp toán học. Với n 1 bất đẳng thức
trên đúng vì 0 1. Giả sử logpnq ¤ n, với n ¥ 1. Ta chứng minh rằng
logpn 1q ¤ n 1. Ta có
logpn 1q ¤ logp2nq log n log 2 ¤n 1.
Vậy bất đẳng thức đúng đến n 1. Theo nguyên lí qui nạp toán học ta được
logpnq ¤ n, với mọi n ¥ 1. Từ đó log n O pnq. l
Ví dụ 2.6.5 Chứng minh rằng log n! Θpn log nq.
Lời giải: Ta có
log n! log n logpn 1q . . . log 2 log 1
¤ log n log n . . . log n
n log n.
94 Bộ môn Toán - ĐẠI HỌC THĂNG LONG
2.6. Độ phức tạp của thuật toán
Vậy 1k 2k . . . nk Ωpnk 1 q.
Do đó 1k 2k . . . nk Θpnk 1 q. l
Bộ môn Toán - ĐẠI HỌC THĂNG LONG 95
Chương 2. Nguyên lí bù trừ, Đệ qui và Hệ thức truy hồi
Ví dụ sau chỉ ra rằng thuật toán Euclid sử dụng O plog bq phép chia để tìm
ước chung lớn nhất của hai số nguyên dương a và b, trong đó a ¥ b.
Ví dụ 2.6.7 (Định lí Lamé) Giả sử a và b là hai số nguyên dương thỏa mãn
a ¥ b. Khi đó số phép chia dùng trong thuật toán Euclid để tìm ƯCLN(a,b) sẽ
nhỏ hơn hay bằng năm lần số các chữ số của b trong hệ thập phân.
Lời giải: Giả sử a và b là hai số nguyên dương và a ¥ b. Khi dùng thuật toán
Euclid để tìm UCLNpa, bq ta nhận được dãy những đẳng thức sau:
r0 r1 q1 r2 , 0 ¤ r2 r1 ,
r1 r2 q2 r3 , 0 ¤ r3 r2 ,
...
rn2 rn1qn1 rn, 0 ¤ rn rn1,
rn1 rn qn ,
với a r0 và b r1 . Như vậy để tìm rn UCLNpa, bq ta dùng n phép
chia. Ta có những thương q1 , q2 , . . . , qn1 luôn lớn hơn hay bằng 1 và qn ¥ 2
do rn rn1 . Từ những nhận xét trên ta được
rn ¥ 1 f2 ,
rn1 ¥ 2rn ¥ 2f2 f3 ,
rn2 ¥ rn1 rn ¥ f3 f2 f4 ,
...
r2 ¥ r3 r4 ¥ fn1 fn2 fn ,
b r1 ¥ r2 r3 ¥ fn fn1 fn 1 .
Từ đó suy ra nếu n là số phép chia trong thuật toán tìm UCLNpa, ? bq thì
b ¥ fn 1 . Từ ví dụ 2.2.8 ta có fn 1 ¡ αn1 , với n ¡ 2 và α
1 5
. Do
2
vậy b ¡ αn1 . Vì log10 α ∼ 0, 208 ¡ nên ta có đánh giá sau:
1
5
n1
log10 b ¡ pn 1q log10 α ¡ .
5
Hay n 1 5 log10 b. Giả sử b là số nguyên có k chữ số, khi đó b 10k và
log10 b k. Do vậy n 1 5k hay n ¤ 5k. Vì
k tlog10 bu 1 ¤ log10 b 1
nên
¤ 5k ¤ 5plog10 b 1q Oplog10 bq.
n
Vậy thuật toán Euclid để tìm UCLNpa, bq với mọi a ¡ b đã sử dụng O plog bq
phép chia. l
96 Bộ môn Toán - ĐẠI HỌC THĂNG LONG
2.6. Độ phức tạp của thuật toán
Mệnh đề 2.6.8 Cho f pnq và g pnq là những hàm đối số nguyên dương. Khi đó
ta có những tính chất sau:
Mệnh đề 2.6.9 Nếu f1 pnq O pg1 pnqq và f2 pnq O pg2 pnqq thì
Vì Θ xác định một quan hệ tương đương trên tập F nên ta có thể định nghĩa
thứ bậc trên tập đó.
Định nghĩa 2.6.11 Hai hàm f pnq và g pnq được gọi là có cùng thứ bậc nếu
f pnq Θpg pnqq.
2. Nếu f pnq có cùng thứ bậc với g pnq thì g pnq cũng có cùng thứ bậc với
f pnq.
3. Nếu f pnq có cùng thứ bậc với g pnq và g pnq có cùng thứ bậc với hpnq thì
f pnq có cùng thứ bậc với hpnq.
Từ tính chất của Θ ta cũng suy ra f pnq và g pnq cùng bậc khi và chỉ khi
Θpf pnqq Θpg pnqq. Như vậy, Θpf pnqq có thể kí hiệu bằng Θpg pnqq, với
mọi hàm g pnq Θpf pnqq. Khi mô tả thứ bậc của hàm f pnq ta thường chọn
tập hợp Θpf pnqq đơn giản nhất. Ví dụ
Θ p7n5 nq 3 Θ
1 5
log n 3n 3 2n log n
Θ 5
n3 Θ n3
5 1
15n 2
n5 2
Θ 10
n
.
n3 log n
5
Vì n 3 có dạng đơn giản nhất trong lớp hàm tương ứng này nên ta chọn lớp
Θpn 3 q, khi đó ta nói f pnq Θpn 3 q có bậc n 3 .
5 5 5
Từ định nghĩa của O ta có thể chỉ ra rằng n2 O pnq bằng phản chứng.
Như vậy, n và n2 nằm ở những lớp khác nhau. Do n O pn2 q ta suy ra
O pnq O pn2 q và ta nói rằng n có thứ bậc nhỏ hơn n2 . Một cách tổng quát ta
định nghĩa:
Định nghĩa 2.6.12 Cho hai hàm f pnq và g pnq, ta nói rằng f pnq có thứ bậc
nhỏ hơn g pnq nếu O pf pnqq thực sự chứa trong O pg pnqq, nghĩa là O pf pnqq
O pg pnqq.
Trong phân tích thuật toán người ta hay dùng những hàm sau:
?
1, log n, n, n, n log n, n2 , n3 , 2n , n2n , n!.
Những hàm này tạo ra một dây xích thứ bậc tăng như sau:
?
O p1q Oplog nq Op nq Opnq Opn log nq
Opn2q Opn3q Op2nq Opn2nq Opn!q.
Hai hàm thuộc hai thứ bậc khác nhau không thể so sánh được. Ta có thể
chỉ ra những thứ bậc trên thực sự khác nhau bởi một nhận xét: Những thứ
bậc của hai hàm f pnq và g pnq không so sánh được nếu f pnq O pg pnqq và
g pnq O pf pnqq.
Bảng sau cho ta những thuật ngữ thường dùng cho độ phức tạp của một thuật
toán của các lớp hàm trên.
Những thuật ngữ thường dùng cho độ phức tạp của một thuật toán
Độ phức tạp Thuật ngữ
O p1q Độ phức tạp hằng số
O plog nq Độ phức tạp lôgarít
O pn q Độ phức tạp tuyến tính
O pn q
2
Độ phức tạp bậc hai
O pn q
3
Độ phức tạp bậc ba
O pn m q Độ phức tạp đa thức
O pC q, C ¡ 1
n
Độ phức tạp hàm mũ
O pn!q Độ phức tạp giai thừa
Phân tích thuật toán là đi tìm hàm thời gian thực hiện của thuật toán và
thường rút ra phương trình hồi qui cho những hàm hồi qui này. Một định lí cơ
bản cho việc tìm hàm hồi qui loại này là:
Định lý 2.6.1 Nếu n là lũy thừa của c thì nghiệm của phương trình hồi qui
$
&d, nếu n ¤ 1,
T pn q %aT p n q bn, nếu n ¡ 1.
c
Bộ môn Toán - ĐẠI HỌC THĂNG LONG 99
Chương 2. Nguyên lí bù trừ, Đệ qui và Hệ thức truy hồi
Ta xét ba trường hợp cho tổng vế phải của bất đẳng thức trên:
Trường hợp 1: Nếu a c ta có
c n1
log¸
p ac qj c c a .
j 0
Do đó
T pn q dnlog O pn q,
a bcn
ca
c
vì thừa số thứ nhất có a c nên không ảnh hưởng đến sự đánh giá trên.
Trường hợp 2: Nếu a c ta có
c n1
log¸
T pn q dn logc a
bn 1j Opn log nq.
j 0
l
Từ định lí trên ta suy ra những trường hợp sau đây:
II.1. Trong một trường đại học, có 512 sinh viên theo học môn Tiếng Anh,
342 sinh viên theo học môn Tiếng Pháp và có 168 sinh viên theo học cả hai
môn. Hỏi có bao nhiêu sinh viên học môn Tiếng Anh hoặc môn Tiếng Pháp?
II.2. Hãy tìm số phần tử của A1 Y A2 Y A3 nếu mỗi tập có 100 phần tử và
thỏa mãn:
a) A1 A2 A3 .
b) Các tập hợp đôi một rời nhau.
c) Có 10 phần tử chung cho mỗi cặp tập hợp và 5 phần tử chung cho cả ba tập
hợp.
II.4. Sau một cuộc phỏng vấn 270 sinh viên ở Đại học Thăng Long, người ta
nhận thấy có 78 sinh viên có một ổ USB 128MB, 54 sinh viên có một ổ USB
256MB, 48 sinh viên có một ổ USB 512MB. Trong số những sinh viên kể trên,
có 38 sinh viên có hai ổ USB 128MB và USB 256MB, 25 sinh viên có hai
ổ USB 128MB và USB 512MB, 12 sinh viên có hai ổ USB 256MB và USB
512MB. Không có sinh viên nào có cả ba ổ USB. Vậy trong số 270 sinh viên
đã được phỏng vấn, có bao nhiêu sinh viên không có USB?
a) Lũy thừa bậc 2 hoặc cao hơn của một số nguyên dương.
b) Lũy thừa bậc 2 hoặc cao hơn của một số nguyên dương hoặc của một số
nguyên tố.
c) Không chia hết cho bình phương của một số nguyên lớn hơn 1.
d) Không chia hết cho lập phương của một số nguyên lớn hơn 1.
II.6. Có bao nhiêu hoán vị của 26 chữ cái trong bảng chữ cái tiếng Anh không
chứa một trong ba xâu: rat, mouse, mice?
II.7. Có bao nhiêu hoán vị của 10 chữ số hoặc bắt đầu bằng ba chữ số 123
hoặc chứa hai chữ số 45 ở vị trí thứ năm và thứ sáu hoặc kết thúc bằng ba chữ
số 789?
II.8. Có bao nhiêu số hạng trong công thức tính số phần tử của hợp của 10 tập
hợp theo nguyên lí bù trừ?
II.9. Hãy viết công thức chi tiết tính số phần tử của hợp của sáu tập hợp theo
nguyên lí bù trừ.
II.11. Hãy tìm f p1q, f p2q, f p3q, f p4q, f p5q nếu f pnq được định nghĩa bằng
đệ qui với điều kiện đầu f p0q 3, và với n 0, 1, 2, . . . thì
a) f pn 1q 2f pnq.
b) f pn 1q 3f pnq 5.
c) f pn 1q rf pnqs2 2f pnq 2.
d) f pn 1q 3f pnq{3 .
II.12. Hãy tìm f p1q, f p2q, f p3q, f p4q, f p5q nếu f pnq được định nghĩa bằng
đệ qui với điều kiện đầu f p0q 1, f p1q 2 và với n 1, 2, . . . thì
a) f pn 1q f pnq 3f pn 1q.
b) f pn 1q rf pnqs2 f pn 1q.
c) f pn 1q 3rf pnqs2 4rf pn 1qs2 .
f pn 1q
d) f pn 1q .
f pn q
II.13. Hãy cho định nghĩa đệ qui của dãy tan u, n 1, 2, . . . nếu
a) an 6n. d) an 1 p1qn .
b) an 10n . e) an npn 1q.
c) an 2n 1. f) an 5.
II.14. Cho F là hàm sao cho F pnq là tổng của n số nguyên dương đầu tiên.
Hãy đưa ra định nghĩa đệ qui của F pnq.
II.16. Cho fk là số Fibonacci thứ k. Với n nguyên dương, hãy chứng minh
những tính chất sau:
b) f1 f2 ... fn fn 2 1.
c) f1 f3 ... f2n1 f2n .
II.19. Hãy định nghĩa một biểu thức đúng qui tắc của các tập hợp, các biến biểu
diễn tập hợp và các toán tử tLấy phần bù, X, Y, zu.
II.20. Đảo của một xâu là một xâu gồm những kí tự của xâu ban đầu nhưng với
thứ tự ngược lại. Ta kí hiệu xâu đảo của xâu w là wR . Hãy đưa ra định nghĩa
xâu đảo bằng đệ qui. (Hướng dẫn: Trước tiên định nghĩa đảo của xâu rỗng. Sau
đó viết xâu w độ dài n 1 dưới dạng xy, với x là xâu độ dài n và biểu diễn
xâu đảo w qua xR và y).
II.21. Hãy nêu định nghĩa bằng đệ qui tập các xâu nhị phân có số bit 0 bằng số
bit 1.
II.22. Hãy nêu định nghĩa bằng đệ qui tập các xâu nhị phân có số bit 0 nhiều
hơn số bit 1.
II.23. Tìm năm số hạng đầu tiên được xác định bởi mỗi hệ thức truy hồi và
những điều kiện đầu sau đây:
a) an 6an1, a0 2.
b) an a2n1 , a1 2.
c) an an1 3an2 , a0 1, a1 2.
d) an nan1 n2 an2 , a0 1, a1 2.
e) an an1 an2 , a0 1, a1 2, a2 0.
II.24. Chỉ ra rằng những dãy tan u sau là nghiệm của hệ thức truy hồi an
3an1 4an2:
a) an 0. c) an p4qn.
b) an 1. d) an 2p4qn 3.
II.25. Hãy kiểm tra xem dãy tan u nào sau đây là nghiệm của hệ thức truy hồi
an 8an1 16an2 :
a) an 0. e) an n4n.
b) an 1. f) an 24n 3n4n .
c) an 2n . g) an p4qn .
d) an 4n . h) an n2 4n .
II.26. Với mỗi dãy sau đây hãy tìm một hệ thức truy hồi mà dãy này thỏa mãn
(câu trả lời là không duy nhất):
a) an 3. e) an n2 .
b) an 2n . f) an n2 n.
c) an 2n 3. g) an n p1qn .
d) an 5n . h) an n!.
II.27. Dùng phương pháp lặp hãy tìm nghiệm của mỗi hệ thức truy hồi với
những điều kiện đầu sau đây:
a) an 3an1, a0 2.
b) an an1 2, a0 1.
c) an an1 n, a0 1.
d) an an1 2n 3, a0 4.
e) an 2an1 , a0 1.
f) an 13 an1 1, a0 2.
g) an nan1 , a0 5.
h) an 2nan1 , a0 1.
II.28. Một người gửi 10000 đô la vào tài khoản của mình tại một ngân hàng
với lãi suất kép 10% một năm.
a) Hãy thiết lập hệ thức truy hồi cho tổng số tiền có trong tài khoản vào cuối
năm thứ n.
b) Tìm công thức tường minh cho tổng số tiền có trong tài khoản vào cuối năm
thứ n.
c) Sau 20 năm tổng số tiền có trong tài khoản là bao nhiêu?
II.29. Một nhân viên bắt đầu làm việc tại một công ty từ năm 2001, với mức
lương khởi điểm là 6000 đô-la một năm. Hàng năm anh ta nhận được thêm
500 đô-la và 5% lương của năm trước.
a) Hãy thiết lập hệ thức truy hồi tính lương của nhân viên đó ở năm thứ n kể từ
sau năm 2001.
b) Hãy tìm công thức tường minh tính lương của nhân viên này ở năm thứ n kể
từ sau năm 2001.
c) Lương năm 2007 của anh ta là bao nhiêu?
II.30. Giả sử dân số thế giới năm 1995 là 7 tỷ người và tốc độ tăng dân số
hằng năm là 3%.
a) Hãy lập hệ thức truy hồi cho dân số thế giới n năm sau năm 1995.
b) Tìm công thức tường minh cho dân số thế giới n năm sau năm 1995.
II.31. Một nhà máy sản xuất ô tô thể thao theo đơn đặt hàng với tốc độ ngày
càng tăng. Tháng đầu chỉ sản xuất một chiếc, tháng thứ hai làm được hai chiếc
và cứ như vậy tháng thứ n sản xuất được n chiếc.
a) Hãy lập công thức truy hồi tính số ô tô sản xuất được trong n tháng đầu tiên
của nhà máy.
b) Hãy tìm công thức tường minh tính số ô tô sản xuất được trong n tháng đầu
tiên của nhà máy.
II.32. Một nhóm mười người bắt đầu trò chơi “Viết thư dây chuyền” như sau:
Đầu tiên mỗi người gửi thư cho bốn người; mỗi người nhận được thư lại gửi thư
cho bốn người khác.
a) Hãy lập công thức truy hồi tính biểu thị số thư gửi đi ở bước thứ n của “dây
chuyền thư” này, nếu không có ai nhận được hơn một lá thư.
II.33. Một máy bán hàng tự động chỉ nhận những đồng xu 1 nghìn, 2 nghìn và
5 nghìn.
a) Hãy tìm hệ thức truy hồi tính số cách đặt n nghìn vào trong máy bán hàng,
biết rằng thứ tự những đồng xu được đặt vào máy là quan trọng.
c) Bao nhiêu cách đặt 10 nghìn vào trong máy để mua được một bộ tem?
II.34.
a) Hãy tìm hệ thức truy hồi cho số cách phủ toàn bộ bàn cờ 2 n bằng những
quân đôminô 1 2.
II.35.
a) Hãy tìm hệ thức truy hồi cho số xâu nhị phân độ dài n không chứa hai số 0
liên tiếp.
b) Tìm điều kiện đầu.
c) Có bao nhiêu xâu như vậy có độ dài là bảy?
II.36.
a) Hãy tìm hệ thức truy hồi cho số xâu nhị phân độ dài n chứa ba số 0 liên tiếp.
b) Tìm điều kiện đầu.
c) Có bao nhiêu xâu nhị phân độ dài là bảy thỏa mãn yêu cầu đề bài?
II.37.
a) Hãy tìm hệ thức truy hồi cho số xâu nhị phân độ dài n chứa xâu 01.
b) Tìm điều kiện đầu.
c) Có bao nhiêu xâu nhị phân độ dài bảy chứa dãy 01?
II.38. Trong những hệ thức truy hồi sau đây hệ thức nào là tuyến tính thuần
nhất với hệ số hằng số? Bậc của những hệ thức đó bằng bao nhiêu?
a) an an2. e) an 3.
b) an 2nan1 an2 . f) an 3an1 4an2 5an3 .
an1
c) an an1 2. g) an .
n
d) an a2n1 an2 . h) an 4an2 an5 an6 .
II.39. Giải những hệ thức truy hồi cùng những điều kiện đầu sau:
a) an 2an1, với n ¥ 1, a0 3.
b) an 4an2 , với n ¥ 2, a0 0, a1 4.
an2
c) an , với n ¥ 2, a0 1, a1 0.
4
d) an 5an1 6an2 , với n ¥ 2, a0 1, a1 3.
II.40. Có thể truyền được bao nhiêu thông báo khác nhau trong n µs khi sử
dụng ba tín hiệu nếu truyền tín hiệu đầu mất 1 µs, hai tín hiệu sau mỗi tín hiệu
cần 2 µs và mỗi tín hiệu trong thông báo được truyền liên tiếp nhau?
II.41. Với những tấm lát 1 2 và 2 2 có thể lát một chiếc bảng 2 n bằng
bao nhiêu cách khác nhau?
II.42. Giả sử số tôm hùm bị đánh bắt trong một năm bằng trung bình cộng số
bị đánh bắt trong hai năm trước đó.
a) Hãy tìm hệ thức truy hồi cho tLn u, trong đó Ln là số tôm bị đánh bắt trong
năm thứ n.
b) Hãy tìm Ln nếu năm đầu có 100000 tôm hùm bị đánh bắt, năm thứ hai có
300000 tôm hùm bị đánh bắt.
II.43. Một người gửi 100000 USD vào quĩ đầu tư vào ngày đầu của một năm.
Ngày cuối cùng của năm, người đó hưởng hai khoản tiền lãi. Khoản lãi đầu là
20% tổng số tiền có trong tài khoản cả năm. Khoản thứ hai là 45% tổng số tiền
có trong tài khoản trong năm trước đó.
a) Hãy tìm hệ thức truy hồi cho tPn u, trong đó Pn là tổng số tiền trong tài
khoản vào cuối năm thứ n, nếu người đó không rút tiền ra lần nào.
b) Tính số tiền có trong tài khoản sau n năm, nếu người đó không rút tiền ra
lần nào.
II.44. Giả sử rằng mỗi cặp thỏ trên đảo khi được một tháng tuổi đẻ được 2 cặp
thỏ con và từ hai tháng tuổi, mỗi tháng đẻ được 6 cặp thỏ con. Giả sử trong thời
gian thí nghiệm không có con nào bị chết hoặc rời khỏi đảo.
a) Hãy tìm hệ thức truy hồi cho số cặp thỏ trên đảo sau n tháng kể từ khi thả
một cặp thỏ mới sinh lên đảo.
b) Bằng cách giải hệ thức truy hồi trong câu trên, hãy tìm số cặp thỏ trên đảo
sau n tháng kể từ khi thả một cặp thỏ mới sinh lên đảo.
II.45. Giả sử rằng trong một quần thể vi trùng, sau mỗi giờ sẽ sinh ra hai vi
trùng mới và mỗi vi trùng chỉ sống được hai giờ. Đầu tiên quần thể có 100 vi
trùng.
a) Hãy tìm hệ thức truy hồi biểu diễn số vi trùng còn tồn tại sau n giờ.
b) Tìm nghiệm của hệ thức truy hồi này.
c) Khi nào quần thể có hơn 1000000 vi trùng.
a) pn 1q2 O pn 2 q.
b) rlog ns O pnq.
c) 3ntlog nu O pn2 q.
a)
?n Oplog nq.
?
b) n log n O pnq.
c) Oplog nq.
1
n
d) 3n2
?n Opn2q.
3n
e) 2 n 1
O p n q.
II.50. Giải hệ thức truy hồi với T p1q 1 và với mọi n là lũy thừa của 2
(n ¥ 2), 2T p q 6n 1.
n
2
II.51. Giải hệ thức truy hồi với T p1q 1 và với mọi n là lũy thừa của 2
(n ¥ 2), 2T p q n2 n.
n
2
II.52. Hãy xác định độ phức tạp (theo thời gian) của tất cả các thuật toán được
nêu trong cuốn sách này.
C ó một sự tương tự giữa các mệnh đề, phép tuyển, phép hội, phép phủ
định, giá trị chân lí sai (F ), giá trị chân lí đúng (T ) và các tập hợp cùng
với phép toán hợp, phép giao, phép lấy phần bù, tập rỗng, tập vũ trụ. Trong
chương này, chúng ta sẽ tìm hiểu khái niệm mang tính khái quát hơn, có nhiều
ứng dụng trong việc thiết kế các mạch tổ hợp logic. Đó là Đại số boole. Cuối
chương, chúng ta sẽ tiếp cận với vài phương pháp tối ưu hóa mạch tổ hợp logic,
đặc biệt là Bảng Karnaugh và Thuật toán Quine - McCluskey.
Như chúng ta đã nói ở trên, giữa lí thuyết logic mệnh đề và lí thuyết tập hợp
có một sự tương tự nhau. Các kết quả của logic mệnh đề có thể được chuyển
thành các kết quả tương ứng của tập hợp và ngược lại. Vì vậy, sẽ rất có ích nếu
chúng ta có một khái niệm trừu tượng, đại số boole, đại diện cho cả “cấu trúc”
logic mệnh đề, cả “cấu trúc” tập hợp, và cả những “cấu trúc” tương tự khác.
Một khi đã chứng minh được rằng một cấu trúc đặc biệt nào đó là một đại số
boole, thì khi đó mọi kết quả đã được thiết lập cho đại số boole tổng quát sẽ
được áp dụng cho cấu trúc đặc biệt đó.
Định nghĩa 3.1.1 Cho tập B thỏa mãn các điều kiện sau:
A1. Có hai “phép toán hai ngôi” “ ”, “.”: với mỗi cặp x, y P B có duy nhất
x y P B và duy nhất x.y P B.
A2. Có phần tử 0 P B sao cho x 0 0 x x và x.0 0.x 0 với
mọi x P B.
3.1. Đại số boole
Các phép toán “ ”, “.”, và “¯” được gọi là các phép toán boole. Khi đó tập
B cùng với các phép toán “ ”, “.”, và “¯” được gọi là Đại số boole.
Ví dụ 3.1.3 Tập B các mệnh đề logic với ba phép toán logic ^, _, (tương
ứng chính là các phép toán “.”, “ ”, “¯” trong định nghĩa 3.1.1) và giá trị
chân lí sai F , giá trị chân lí đúng T (tương ứng với phần tử 0 và 1) cũng lập
thành một đại số boole.
Ví dụ 3.1.4 Họ các tập con của tập S cho trước với ba phép toán tập hợp X,
Y, phép lấy phần bù (tương ứng chính là các phép toán “.”, “ ”, “¯” trong
định nghĩa 3.1.1) và tập rỗng H, tập S (tương ứng với hai giá trị 0 và 1) cũng
lập thành một đại số boole.
Từ định nghĩa của đại số boole, ta có thể chứng minh những tính chất sau gọi là
những hằng đẳng thức boole (với x, y, z P B):
Việc chứng minh các tính chất trên được dành cho các bạn như những bài tập
dễ. Chẳng hạn:
Lời giải: Giả sử có hai phần tử α, β trong B đóng vai trò của 0. Khi đó
α α β β. Cũng vậy, giả sử có hai phần tử γ, δ trong B đóng vai trò
của 1. Khi đó γ γ.δ δ. l
Định nghĩa 3.1.8 Cho B t0, 1u. Biến x được gọi là một biến boole nếu nó
chỉ nhận các giá trị trong B. Một hàm f : B n Ñ B được gọi là hàm boole
n biến.
Các hàm boole thường được cho dưới dạng bảng nhưng cũng có thể được cho
dưới dạng biểu thức các biến boole và các phép toán boole. Các biểu thức boole
với các biến x1 , x2 , . . . , xn được định nghĩa một cách đệ qui như sau:
Định nghĩa 3.1.9 0, 1, x1 , x2 , . . . , xn là các biểu thức boole. Nếu E1 và E2
là các biểu thức boole thì E1 , E2 , E1 .E2 , E1 E2 , pE1 q, pE2 q cũng là các biểu
thức boole.
Mỗi biểu thức boole biểu diễn một hàm boole. Các giá trị của hàm này nhận
được bằng cách thay 0 và 1 cho các biến trong biểu thức đó.
Ví dụ 3.1.10 Hàm boole F px, y, z q x.y z̄ có giá trị được cho trong bảng
sau:
x y z x.y z̄ F px, y, z q x.y z̄
1 1 1 1 0 1
1 1 0 1 1 1
1 0 1 0 0 0
1 0 0 0 1 1
0 1 1 0 0 0
0 1 0 0 1 1
0 0 1 0 0 0
0 0 0 0 1 1
Ngược lại, hàm cho trong bảng trên được biểu diễn bởi nhiều biểu thức boole
khác nhau: F1 px, y, z q x.y z̄, hoặc F2 px, y, z q x.y.z x.y.z̄
x.ȳ.z̄ x̄.y.z̄ x̄.ȳ.z̄. . .
Định nghĩa 3.1.11 Hai hàm n biến F và G được gọi là bằng nhau nếu
F px1 , x2 , . . . , xn q Gpx1 , x2 , . . . , xn q với mọi x1 , x2 , . . . , xn P B.
Hai biểu thức boole khác nhau cùng biểu diễn một hàm boole được gọi là tương
đương với nhau.
Trong ví dụ 3.1.10, hai hàm F1 và F2 bằng nhau còn hai biểu thức x.y z̄ và
x.y.z x.y.z̄ x.ȳ.z̄ x̄.y.z̄ x̄.ȳ.z̄ tương đương với nhau.
Định nghĩa 3.1.12 Cho hàm boole F . Phần bù của hàm boole F là hàm F̄
thỏa mãn F̄ px1 , x2 , . . . , xn q F px1 , x2 , . . . , xn q. Tổng boole F G và
tích boole F.G là các hàm thỏa mãn:
pF Gqpx1 , x2 , . . . , xn q F px 1 , x 2 , . . . , x n q Gpx1 , x2 , . . . , xn q,
Mỗi hàm boole n biến tương ứng với một bảng có n 1 cột (tương ứng với giá
trị của các biến x1 , x2 , . . . , xn và giá trị hàm) và 2n dòng (tương ứng với các
khả năng có thể có của giá trị các biến x1 , x2 , . . . , xn ). Hai hàm boole khác
nhau khi và chỉ khi chúng có hai cột giá trị khác nhau. Cột giá trị của một hàm
n
boole n biến có thể coi như một xâu nhị phân độ dài 2n . Vậy có tất cả 22 hàm
boole n biến khác nhau.
Các hằng đẳng thức boole xuất hiện theo từng cặp (trừ luật phần bù kép).
Hai hằng đẳng thức boole trong mỗi cặp dẫn dắt chúng ta tới khái niệm đối ngẫu
của một biểu thức boole.
Định nghĩa 3.1.13 Đối ngẫu của một biểu thức boole là một biểu thức boole
nhận được bằng cách đổi chỗ các tổng boole và tích boole cho nhau, đổi chỗ
các phần tử 0 và phần tử 1 cho nhau.
Ví dụ 3.1.14 Đối ngẫu của biểu thức boole x.p0 pȳ.zqq là biểu thức x
p1.pȳ zqq.
Định nghĩa 3.1.15 Đối ngẫu của một hàm boole được biểu diễn bởi một biểu
thức boole là một hàm boole được biểu diễn bởi đối ngẫu của biểu thức boole
ban đầu. Hàm đối ngẫu của hàm boole F được kí hiệu là F d .
Nguyên lí 3.1.16 (Nguyên lí đối ngẫu) Một hằng đẳng thức giữa các hàm được
biểu diễn bởi các biểu thức boole vẫn còn đúng nếu ta lấy đối ngẫu hai vế của
nó.
x py.px z qq px y q. px z q.
Hai tính chất nói trên đi thành một cặp đối ngẫu được gọi là tính chất modular.
Trong mục này chúng ta sẽ xem xét hai bài toán quan trọng liên quan đến
hàm boole. Bài toán thứ nhất tìm biểu thức boole biểu diễn một hàm boole được
cho trước bởi một bảng. Chúng ta sẽ chứng minh rằng mọi hàm boole đều có
thể được biểu diễn bởi tổng boole của những tích boole của các biến boole và
phần bù của chúng. Do vậy, mọi hàm boole đều có thể biểu diễn bởi biểu thức
boole thông qua ba toán tử: tổng boole, tích boole và phần bù. Bài toán thứ
hai xem xét việc thu gọn tập các toán tử biểu diễn hàm boole. Chúng ta sẽ đi
đến kết quả khẳng định mọi hàm boole đều có thể được biểu diễn bằng cách chỉ
dùng một toán tử. Cả hai bài toán trên đều có tầm quan trọng thực tiễn trong
việc thiết kế các “mạch logic”.
Ví dụ 3.2.1 Tìm ít nhất một biểu thức boole biểu diễn mỗi hàm trong hai hàm
F px, y, z q, Gpx, y, z q được cho bởi bảng sau:
x y z F px, y, z q Gpx, y, z q
1 1 1 0 0
1 1 0 0 0
1 0 1 1 1
1 0 0 0 0
0 1 1 0 0
0 1 0 0 0
0 0 1 0 1
0 0 0 0 0
Lời giải: Xét hàm F px, y, z q. Cần tìm ít nhất một biểu thức boole nhận giá
trị 1 khi x z 1 và y 0 và có giá trị 0 trong mọi trường hợp còn lại để
biểu diễn hàm F px, y, z q. Ta lấy tích boole của x, ȳ, z. Tích này, nhận giá
trị 1 khi và chỉ khi x ȳ z 1. Vậy có thể lấy x.ȳ.z để biểu diễn hàm
F px, y, z q.
Đối với hàm Gpx, y, z q, hàm này giống hàm trước ở chỗ nó cũng nhận giá trị
1 khi x z 1 và y 0 nhưng ngoài ra, nó còn nhận thêm một giá trị 1
nữa khi x y 0 và z 1. Ta cũng làm giống trên bằng cách xây dựng các
tích boole: x.ȳ.z và x̄.ȳ.z rồi lấy tổng boole của chúng. Dễ kiểm tra lại rằng
x.ȳ.z x̄.ȳ.z là một biểu thức boole biểu diễn hàm boole Gpx, y, z q. l
Đối với các hàm boole cho bởi các bảng giá trị khác, chúng ta cũng sẽ làm tương
tự như trên. Phương pháp này dẫn chúng ta tới một số khái niệm được định
nghĩa dưới đây:
Định nghĩa 3.2.2 Một biến boole hoặc phần bù của nó được gọi là một tín hiệu.
Tích boole y1 .y2 . . . . .yn trong đó yi xi hoặc yi x̄i với x1 , x2 , . . . , xn
là các biến boole được gọi là một hội sơ cấp n biến. Vậy một hội sơ cấp là tích
boole của các tín hiệu.
Một hội sơ cấp nhận và chỉ nhận giá trị 1 ứng với đúng một bộ giá trị của các
biến của nó. Cụ thể, hội sơ cấp y1 .y2 . . . . .yn 1 khi và chỉ khi yi 1
với mọi i 1, n. Điều này xảy ra nếu và chỉ nếu xi 1 khi yi xi và
xi 0 khi yi x̄i . Ngược lại, với một bộ giá trị cho trước của các biến boole
x1 , x2 , . . . , xn , ta có thể thành lập được đúng một hội sơ cấp n biến nhận và
chỉ nhận giá trị 1 ứng với bộ giá trị đã cho. Đó chính là tích boole y1 .y2 . . . . .yn
trong đó yi xi nếu xi 1 và yi x̄i nếu xi 0.
Nếu một hàm boole n biến được cho dưới dạng bảng, ta xét các dòng trong
bảng mà hàm đã cho nhận giá trị 1. Bằng cách lấy tổng boole các hội sơ cấp n
biến nhận giá trị 1 tương ứng với các bộ giá trị của các biến boole ở các dòng ta
đang xét (các dòng mà hàm nhận giá trị 1), ta nhận được biểu thức boole biểu
diễn hàm boole đã cho. Biểu thức boole biểu diễn hàm được thành lập như vậy
được gọi là dạng khai triển tổng các tích hay dạng tuyển chuẩn tắc của hàm
boole đã cho.
Ví dụ 3.2.3 Tìm khai triển tổng các tích của hàm F px, y, z q px y q.z̄.
Lời giải: Bước đầu tiên là lập bảng giá trị của hàm F px, y, z q:
x y z F px, y, z q
1 1 1 0
1 1 0 1
1 0 1 0
1 0 0 1
0 1 1 0
0 1 0 1
0 0 1 0
0 0 0 0
Tiếp theo, ta lập hội sơ cấp ba biến nhận giá trị 1 ứng với ba dòng mà hàm
F px, y, z q nhận giá trị 1. Đó là các hội sơ cấp x.y.z̄, x.ȳ.z̄ và x̄.y.z̄. Vậy ta
có F px, y, z q x.y.z̄ x.ȳ.z̄ x̄.y.z̄. l
Bằng cách lấy đối ngẫu, ta cũng có thể xây dựng biểu thức boole biểu diễn hàm
boole dưới dạng hội chuẩn tắc hoặc dạng khai triển tích các tổng.
Tính đầy đủ
Như vậy, ta đã biết, mỗi hàm boole đều có thể được biểu diễn thành tổng
boole những hội sơ cấp. Điều này chứng tỏ rằng mỗi hàm boole đều có thể được
biểu diễn thông qua ba phép toán boole: “.”, “ ”, “¯”. Vì tất cả các hàm boole
đều có thể biểu diễn thông qua ba phép toán đó nên ta nói rằng tập hợp t., , ¯u
là một hệ đầy đủ. Một vấn đề được đặt ra là tìm những hệ đầy đủ nhỏ hơn.
Bằng cách sử dụng luật De Morgan, mọi biểu thức có liên quan chẳng hạn
đến tích boole đều được chuyển qua các phép lấy phần bù và tổng boole. Vậy
t , ¯u là một hệ đầy đủ. Tương tự, t., ¯u cũng là một hệ đầy đủ. Đó là ví dụ
về hệ đầy đủ chỉ có hai toán tử.
Phép toán N AN D hay “|” (x|y x.y) và phép toán N OR hay “Ó”
(x Ó y x y), bản thân mỗi phép toán đều có thể lập thành hệ đầy đủ.
Chẳng hạn, vì t., ¯u là một hệ đầy đủ nên để chứng minh t|u là hệ đầy đủ, ta chỉ
cần chứng tỏ rằng cả hai phép toán “.” và “¯” đều có thể được biểu diễn bằng
cách chỉ dùng phép toán “|”. Thật vậy, dễ chứng minh:
x̄ x|x,
x.y px|yq|px|yq.
Tương tự với chứng minh tÓu là hệ đầy đủ.
Đại số boole được dùng để mô hình hóa các mạch điện tử. Mỗi đầu vào
và mỗi đầu ra của một mạch điện tử có thể được xem như một phần tử của tập
t0, 1u. Mỗi mạch có thể được thiết kế bằng cách dùng các luật đã nêu của đại
số boole. Các phần tử cơ bản của các mạch được gọi là các cổng. Mỗi một
loại cổng thực hiện một phép toán boole. Dùng các cổng này và các luật trong
đại số boole, chúng ta sẽ thiết kế các mạch thực hiện các nhiệm vụ khác nhau.
Các mạch mà chúng ta sẽ xem xét, sẽ cho đầu ra chỉ phụ thuộc vào đầu vào chứ
không phụ thuộc vào trạng thái hiện thời của mạch (đầu ra là hàm boole của đầu
vào). Nói một cách khác, các mạch này không có khả năng nhớ. Những mạch
như vậy được gọi là mạch tổ hợp.
Chúng ta có sáu loại cổng logic cơ bản. Các cổng này được minh họa trong
hình 3.1:
Hình 3.1: Các loại cổng logic cơ bản: a) Bộ đảo; b) Cổng OR; c) Cổng AND; d) Cổng XOR;
e) Cổng NOR; f) Cổng NAND.
• Bộ đảo: thực hiện phép toán lấy phần bù. Nó cho tín hiệu đầu ra có giá trị
là phần bù của giá trị tín hiệu đầu vào.
• Cổng OR: thực hiện phép toán lấy tổng boole. Nó cho tín hiệu đầu ra có
giá trị là tổng boole của hai giá trị của hai tín hiệu đầu vào.
• Cổng AND: thực hiện phép toán lấy tích boole. Nó cho tín hiệu đầu ra có
giá trị là tích boole của hai giá trị của hai tín hiệu đầu vào.
• Cổng XOR: thực hiện phép toán lấy tổng boole loại trừ “`”. Nếu hai
giá trị của hai tín hiệu đầu vào lần lượt là x và y thì tín hiệu đầu ra là
x̄.y x.ȳ.
• Cổng NOR: thực hiện phép toán N OR hay “Ó”. Nếu hai giá trị của hai
tín hiệu đầu vào lần lượt là x và y thì tín hiệu đầu ra là x y.
• Cổng NAND: thực hiện phép toán N AN D hay “|”. Nếu hai giá trị của
hai tín hiệu đầu vào lần lượt là x và y thì tín hiệu đầu ra là x.y.
Tuy là sáu loại cổng khác nhau nhưng thực ra ba loại cổng XOR, N AN D,
N OR thường được coi là các cổng phức hợp dựa trên bộ đảo, cổng OR và
cổng AN D.
Các mạch tổ hợp có thể được xây dựng bằng cách dùng tổ hợp các bộ đảo,
cổng OR và cổng AN D. Khi lập tổ hợp các mạch, một số cổng có thể có
chung đầu vào. Đầu ra từ một cổng có thể được dùng như đầu vào của một hoặc
nhiều cổng khác.
Ví dụ 3.3.1 Xây dựng mạch tổ hợp nhận đầu vào là x và y còn đầu ra là:
a) px.y q px̄.yq.
b) px y z q.x̄.ȳ.z̄.
Hình 3.2: Tổ hợp các cổng được mạch nhận đầu vào là x, y, cho đầu ra là px.y q px̄.yq.
Hình 3.3: Tổ hợp các cổng được mạch nhận đầu vào là x, y, z cho đầu ra là px y z q.x̄.ȳ.z̄.
Lời giải:
a) Mạch được thiết kế theo yêu cầu được minh họa trong hình 3.2.
b) Mạch được thiết kế theo yêu cầu được minh họa trong hình 3.3.
l
Ví dụ 3.3.2 Một ủy ban gồm ba thành viên phải quyết định các vấn đề của một
tổ chức. Mỗi một thành viên bỏ phiếu tán thành hoặc không cho mỗi một đề
nghị được đưa ra. Một đề nghị sẽ được thông qua nếu nó nhận được ít nhất hai
phiếu tán thành. Hãy thiết kế một mạch cho phép xác định được một đề nghị có
được thông qua hay không.
Lời giải: Cho x 1 nếu thành viên thứ nhất bỏ phiếu tán thành và x 0
nếu thành viên đó không tán thành. Tương tự với các biến y và z tương ứng ý
kiến của các thành viên thứ hai và thứ ba. Khi đó mạch cần được thiết kế sao
cho nó tạo đầu ra bằng 1 từ các đầu vào x, y, z khi có hai hoặc nhiều hơn các
biến x, y, z có giá trị là 1. Một biểu diễn của hàm boole có giá trị đầu ra đó là
x.y x.z y.z. Mạch thực hiện hàm này được cho trên hình 3.4. l
Hiệu quả của một mạch tổ hợp phụ thuộc vào số các cổng và sự bố trí các
cổng đó. Quá trình thiết kế một mạch tổ hợp được bắt đầu bằng một bảng chỉ
rõ các giá trị đầu ra đối với mỗi một tổ hợp các giá trị đầu vào. Chúng ta luôn
có thể sử dụng khai triển tổng các tích của mạch để tìm tập các cổng logic thực
hiện mạch đó. Tuy nhiên, khai triển tổng các tích có thể chứa các tích nhiều hơn
mức cần thiết. Những hội sơ cấp cùng số biến trong khai triển tổng các tích chỉ
khác nhau ở một biến sao cho trong hội sơ cấp này xuất hiện biến đó còn hội
sơ cấp kia xuất hiện phần bù của nó, đều có thể được tổ hợp lại với nhau rồi áp
dụng luật phân phối và luật bài trung.
Chẳng hạn, xét mạch có đầu ra bằng 1 nếu và chỉ nếu x y z 1 hoặc
x z 1, y 0. Khai triển tổng các tích của mạch này là x.y.z x.ȳ.z.
Hai hội sơ cấp trong tổng này chỉ khác nhau ở tín hiệu thứ hai (y và ȳ). Chúng
có thể được tổ hợp lại như sau:
x.y.z x.ȳ.z py ȳq.x.z
1.x.z
x.z.
Do vậy, x.z là biểu thức với ít phép toán hơn biểu diễn mạch đã cho. Hai thể
hiện khác nhau của cùng mạch đó được cho trên hình 3.5.
Ví dụ trên chứng tỏ rằng sự tổ hợp các hội sơ cấp trong khai triển tổng các
tích sẽ dẫn đến một biểu thức đơn giản hơn đối với cùng một mạch. Chúng ta
Hình 3.5: Hai mạch nhận đầu vào là x, y, z cho cùng đầu ra.
sẽ xem xét vài phương pháp đơn giản hóa các khai triển tổng các tích. Mục đích
của những phương pháp này là tạo tổng boole của các tích boole chứa một số
nhỏ nhất tích các tín hiệu sao cho các tích này lại chứa một số ít nhất các
tín hiệu trong số tất cả những tổng các tích cùng biểu diễn mạch đã cho.
Phương pháp này dựa vào các luật, các hằng đẳng thức boole để tối tiểu hóa
các biến và các phép toán trên biểu thức boole. Phương pháp này không có một
cách thức chung cho tất cả các biểu thức boole. Nói chung, cách thức tối tiểu
hóa sẽ phụ thuộc vào từng biểu thức boole cụ thể.
Ví dụ 3.4.1 Tối tiểu hóa hàm boole f px, y q x̄.y x.y x.ȳ.
Lời giải: Ta có
Ví dụ 3.4.2 Tối tiểu hóa hàm boole f px, y q x.ȳ x̄.ȳ x̄.y.
Để làm giảm số các hội thành phần trong một biểu thức boole biểu diễn
một mạch, ta cần phải tìm những hội thành phần có thể tổ hợp được với nhau.
Phương pháp bảng Karnaugh hay sơ đồ Karnaugh là phương pháp trực quan,
do Maurice Karnaugh đưa ra vào năm 1953, được dùng để tìm các hội thành
phần tổ hợp được đối với các hàm boole có số biến tương đối nhỏ. Các bảng
Karnaugh cho chúng ta một phương pháp trực quan để rút gọn các khai triển
tổng các tích nhưng lại không phù hợp với việc lập trình tự động thực hiện công
việc này.
Bảng Karnaugh để tối tiểu hóa hàm boole hai biến bao gồm bốn ô vuông,
trong đó hình vuông biểu diễn hội sơ cấp có mặt trong dạng tuyển chuẩn tắc của
hàm được đánh số 1:
y ȳ
x x.y x.ȳ
x̄ x̄.y x̄.ȳ
Các ô vuông được gọi là kề nhau nếu các hội sơ cấp trong các ô đó chỉ khác
nhau một tín hiệu (tức là tín hiệu có mặt trong hội sơ cấp này là x thì trong hội
sơ cấp kia là x̄, các biến khác giữ nguyên). Để rút gọn, ta dựa vào các ô có chứa
số 1 kề nhau để rút gọn lại thành hội sơ cấp chỉ gồm một biến. Nếu tất cả bốn ô
đều có số 1 thì có thể rút gọn bốn hội sơ cấp thành một giá trị 1.
Ví dụ 3.4.3 Cho f px, y q x.y x̄.y. Hãy dùng bảng Karnaugh để tối tiểu
hóa hàm boole trên.
Lời giải: Bảng Karnaugh của hàm f px, y q x.y x̄.y là:
y ȳ
x 1
x̄ 1
Vì hai ô chứa số 1 kề nhau nên hai hội sơ cấp tương ứng là x.y và x̄.y có thể
tổ hợp được với nhau. Vậy ta có f px, y q y. l
Ví dụ 3.4.4 Cho f px, y q x.ȳ x̄.y x̄.ȳ. Hãy dùng bảng Karnaugh để
tối tiểu hóa hàm boole trên.
Lời giải: Bảng Karnaugh của hàm f px, y q x.ȳ x̄.y x̄.ȳ là:
y ȳ
x 1
x̄ 1 1
Vì ba ô chứa số 1 kề nhau nên tổ hợp các hội sơ cấp lại (theo chiều dọc được ȳ,
theo chiều ngang được x̄), ta có f px, y q x̄ ȳ. l
Trong trường hợp chỉ có hai ô chứa số một lại không kề nhau, hai hội sơ cấp
tương ứng không thể tổ hợp lại với nhau được và do vậy kết quả tối tiểu hóa
đành phải giữ nguyên cả hai hội sơ cấp. Ví dụ chẳng hạn x̄.y x.ȳ không thể
tổ hợp cho ta kết quả gọn hơn.
Bảng Karnaugh cho hàm boole ba biến là hình chữ nhật được chia làm tám
ô (tương ứng với tám hội sơ cấp có thể có của ba biến) có dạng sau:
y.z y.z̄ ȳ.z̄ ȳ.z
x
x̄
Hội sơ cấp nào có mặt trong dạng tuyển chuẩn tắc của hàm boole đã cho thì ô
tương ứng với nó sẽ chứa số 1. Các bảng dưới đây sẽ thể hiện ví dụ đại diện cho
các khối gồm một số chẵn các ô kề nhau trong bảng Karnaugh dành cho hàm
boole ba biến (chú ý rằng bảng Karnaugh hoán vị vòng tròn tức là cột đầu của
bảng cũng có thể coi là cột kế tiếp của cột cuối cùng) mà ta cần nhận dạng để tổ
hợp:
y.z y.z̄ ȳ.z̄ ȳ.z
x 1
x̄ 1
ȳ.z̄ x.ȳ.z̄ x̄.ȳ.z̄.
Mục tiêu của chúng ta là phải nhận dạng các khối (gồm một số chẵn các ô
chứa số 1 có chung biên giới với nhau có dạng trong các bảng nêu trên) có
thể lớn nhất trong bảng Karnaugh và phủ tất cả các ô chứa số 1 bằng một
số nhỏ nhất các khối mà trước hết là khối lớn nhất. Chú ý rằng không phải
chỉ có một cách để làm được điều này.
Ví dụ 3.4.5 Cho f px, y, z q x.y.z̄ x.ȳ.z̄ x̄.y.z x̄.ȳ.z̄. Hãy tối tiểu
hóa hàm boole trên bằng bảng Karnaugh.
Tổ hợp các ô mang giá trị 1 kề nhau theo hàng ngang thứ nhất ta được x.z̄. Tổ
hợp các ô mang giá trị 1 kề nhau theo hàng dọc ta được ȳ.z̄. Vậy khai triển tối
tiểu hóa của hàm boole f px, y, z q là x.z̄ ȳ.z̄ x̄.y.z. l
Bộ môn Toán - ĐẠI HỌC THĂNG LONG 127
Chương 3. Đại số Boole
Tổ hợp khối bốn ô mang giá trị 1 liền nhau ta được ȳ. Tổ hợp hai ô mang giá trị
1 kề nhau trên hàng ngang thứ hai (bảng Karnaugh hoán vị vòng tròn) ta được
x̄.ȳ.z x̄.y.z x̄.z. Vậy khai triển tối tiểu hóa của hàm boole f px, y, z q
là x̄.z ȳ. l
Ví dụ 3.4.7 Cho f px, y, z q x.y.z x.y.z̄ x.ȳ.z x.ȳ.z̄ x̄.y.z
x̄.ȳ.z x̄.ȳ.z̄. Hãy tối tiểu hóa hàm boole trên bằng bảng Karnaugh.
Tổ hợp khối bốn ô cuối mang giá trị 1 liền nhau ta được ȳ. Tổ hợp bốn ô mang
giá trị 1 kề nhau trên hàng ngang thứ nhất ta được x. Tổ hợp bốn ô mang giá trị
1 trên cột đầu và cột cuối (nhớ rằng bảng Karnaugh hoán vị vòng tròn) ta được
z. Ba khối vừa xét đã phủ hết tất cả các ô chứa số 1 trong bảng. Vậy khai triển
tối tiểu hóa của hàm boole f px, y, z q là x ȳ z. l
Tương tự như các bảng Karnaugh cho các hàm boole hai biến, ba biến, ta
cũng xây dựng được bảng Karnaugh cho hàm boole bốn biến. Đó là một hình
vuông được chia thành 16 ô. Các ô này biểu diễn 16 hội sơ cấp có thể:
Và cũng như trên, các khối mà chúng ta cần nhận dạng sẽ gồm 2, 4, 8 hoặc 16
ô chứa số 1 biểu diễn các hội sơ cấp mà ta có thể tổ hợp lại. Chẳng hạn như các
khối trong một số trường hợp sau:
Mục tiêu mà chúng ta cần phải nhận dạng cũng giống như trường hợp hai, ba
biến là các khối lớn nhất có thể có chứa các số 1 trong bảng và phủ tất cả các số
1 bằng cách dùng một số ít nhất các khối, mà trước hết là các khối lớn nhất.
Ví dụ 3.4.8 Dùng các bảng Karnaugh để rút gọn các dạng tuyển chuẩn tắc sau:
Lời giải:
a) Bảng Karnaugh:
Tổng cộng có tất cả 5 khối được nhận dạng: tổ hợp hai ô ở dòng một, cột
một và dòng hai, cột một ta được w.y.z; tổ hợp hai ô ở dòng một, cột hai
và dòng một, cột ba được w.x.z̄; tổ hợp hai ô ở dòng hai, cột ba và dòng
hai, cột bốn được w.x̄.ȳ; tổ hợp hai ô ở dòng ba, cột một và dòng ba, cột
hai được w̄.x̄.y; cuối cùng là ô ở dòng bốn, cột bốn w̄.x.ȳ.z. Vậy tối
tiểu thu được là: w.y.z w.x.z̄ w.x̄.ȳ w̄.x̄.y w̄.x.ȳ.z.
b) Bảng Karnaugh:
Tổng cộng có tất cả 3 khối được nhận dạng: tổ hợp hai ô ở dòng hai,
cột một và dòng hai, cột hai ta được w.x̄.y; tổ hợp hai ô ở cột hai
được x̄.y.z̄; tổ hợp bốn ô ở cột ba được ȳ.z̄. Vậy tối tiểu thu được là:
w.x̄.y x̄.y.z̄ ȳ.z̄.
c) Bảng Karnaugh:
Tổng cộng có tất cả 3 khối được nhận dạng: tổ hợp hai ô ở dòng hai, cột
một và dòng hai, cột hai ta được w.x̄.y; tổ hợp tám ô ở cột hai và cột ba
được z̄; tổ hợp bốn ô ở dòng bốn được w̄.x. Vậy tối tiểu thu được là:
w.x̄.y z̄ w̄.x.
Chúng ta đã thấy rằng các bảng Karnaugh có thể được dùng để tạo biểu thức
tối tiểu của các hàm boole (chẳng hạn dạng tuyển chuẩn tắc). Tuy nhiên các
bảng Karnaugh sẽ rất khó dùng khi số biến lớn hơn bốn. Hơn nữa, việc dùng
bảng Karnaugh lại dựa trên việc rà soát trực quan để nhận dạng các hội sơ cấp
cần được tổ hợp lại. Vì những nguyên nhân đó, cần có một thuật toán tối tiểu
dạng tuyển chuẩn tắc có thể được cài đặt một cách dễ dàng. Phương pháp Quine
- McCluskey là một thuật toán như vậy. Nó có thể được dùng cho hàm boole
với số biến bất kì. Phương pháp này được W.V.Quine và E.J.McCluskey con
phát triển vào những năm 1950. Về cơ bản, phương pháp Quine - McCluskey
có hai phần. Phần đầu là tìm những hội sơ cấp là ứng viên để đưa vào khai triển
tối tiểu như một tổng các tích boole. Phần thứ hai là xác định xem trong số các
ứng viên đó, ứng viên nào thực sự cần.
Dưới đây chúng ta sẽ xét một ví dụ để minh họa phương pháp này.
Ví dụ 3.4.9 Sử dụng phương pháp Quine - McCluskey để tìm biểu thức tối tiểu
tương đương với:
Lời giải: Biểu diễn các hội sơ cấp trong khai triển trên bằng những xâu bit độ
dài ba. Giả sử rằng các hội sơ cấp đã cho được viết dưới dạng tích các tín hiệu
xuất hiện theo thứ tự x, y, z. Bit đầu tiên bằng 1 nếu tín hiệu đầu trong hội sơ
cấp là x và bằng 0 nếu tín hiệu đầu là x̄. Bit thứ hai bằng 1 nếu tín hiệu thứ hai
trong hội sơ cấp là y và bằng 0 nếu tín hiệu thứ hai là ȳ. Tương tự, bit thứ ba
bằng 1 nếu tín hiệu thứ ba trong hội sơ cấp là z và bằng 0 nếu tín hiệu thứ ba là
z̄. Sau đó chúng ta sẽ nhóm các hội sơ cấp theo số các bit 1 trong các xâu bit
tương ứng:
Các hội sơ cấp chỉ khác nhau đúng một tín hiệu có thể được tổ hợp lại để tạo
những tích boole mới (tương đương). Do vậy, hai tích boole có thể được tổ hợp
nếu xâu bit tương ứng biểu diễn chúng sẽ chỉ khác nhau một bit tại cùng vị trí.
Khi hai tích boole (chứa ba tín hiệu) tổ hợp lại với nhau thành một tích boole
mới thì tích mới này sẽ chỉ chứa hai tín hiệu và tích này được biểu bằng một xâu
có dấu gạch ngang nằm vào vị trí tín hiệu thiếu. Chẳng hạn x.ȳ.z và x̄.ȳ.z
được biểu diễn bằng các xâu bit 101 và 001 có thể được tổ hợp lại thành ȳ.z
được biểu diễn bằng xâu 01. Cứ tổ hợp như vậy cho đến khi không còn làm
được nữa, ta có bảng các bước tiến hành như sau:
Bước 1 Bước 2
Tích Tích Tích
1: x.y.z (111) p1, 2q: x.z (1 1) p1, 2, 3, 4q: z ( 1)
2: x.ȳ.z (101) p1, 3q: y.z (11)
3: x̄.y.z (011) p2, 4q: ȳ.z (01)
4: x̄.ȳ.z (001) p3, 4q: x̄.z (0 1)
5: x̄.ȳ.z̄ (000) p4, 5q: x̄.ȳ (00)
Trong bảng trên ta cũng chỉ ra những tích đã được dùng để tạo ra những tích
có số tín hiệu nhỏ hơn nhưng không nhất thiết có mặt trong biểu thức tối tiểu.
Bước tiếp theo là nhận dạng tập cực tiểu các tích cần thiết để biểu diễn hàm
boole. Chúng ta sẽ xem xét tất cả các tích còn lại sau cùng (chưa được sử dụng
để tổ hợp). Trong ví dụ này, những tích như thế là z và x̄.ȳ. Chúng ta sẽ lập
bảng tiếp theo, các dòng tương ứng với các tích cần xem xét và các cột tương
ứng với các hội sơ cấp ban đầu. Chúng ta sẽ đánh dấu nhân () ở ô mà tương
ứng với cột là hội sơ cấp đã được dùng để tạo ra tích tương ứng với dòng đó.
Trong trường hợp này ta nói tích ứng viên đã phủ hội sơ cấp gốc. Chúng ta cần
phải lấy tổng của ít tích ứng viên nhất mà vẫn phủ được toàn bộ các hội sơ cấp
ban đầu.
1. Biểu diễn mỗi hội sơ cấp chứa n tín hiệu bằng một xâu bit độ dài n với bit 1
ở vị trí thứ i nếu tín hiệu xi xuất hiện và bit 0 ở vị trí thứ i nếu tín hiệu xi
xuất hiện.
2. Nhóm các xâu bit theo số các bit 1 trong chúng để có thể dễ dàng trong việc
tổ hợp các tích.
3. Xác định tất cả các tích chứa n 1 tín hiệu có thể tạo thành bằng cách lấy
tổng boole những tích có thể tổ hợp. Những tích có thể tổ hợp là những
tích được biểu diễn bằng những xâu bit chỉ khác nhau đúng một vị trí. Biểu
diễn những tích chứa n 1 tín hiệu này bằng các xâu chứa 1 ở vị trí thứ
i nếu xi xuất hiện trong tích, 0 ở vị trí thứ i nếu xi xuất hiện trong tích
và dấu gạch ngang nếu không có tín hiệu nào liên quan đến xi xuất hiện
trong tích.
4. Tiếp tục xác định tất cả các tích chứa n 2 tín hiệu có thể được tạo thành
bằng cách tổ hợp những tích chứa n 1 biến đã tìm được ở bước trước.
Những tích có chứa n 1 tín hiệu có thể tổ hợp được nếu những xâu biểu
diễn chúng có dấu gạch ngang ở cùng vị trí và khác nhau chỉ ở đúng một
vị trí.
5. Tiếp tục tổ hợp các tích boole thành các tích có số biến ít hơn. Quá trình này
không thể kéo dài mãi vì số tín hiệu trong một tích boole chúng ta xét là
hữu hạn.
6. Tìm tất cả các tích boole xuất hiện nhưng không được dùng để tập tích boole
với số tín hiệu nhỏ hơn.
7. Tìm tập nhỏ nhất các tích boole trong tập các tích boole tìm được ở bước
trước sao cho tổng các tích này biểu diễn hàm boole đã cho ban đầu. Điều
này làm được bằng cách lập bảng chỉ rõ các hội sơ cấp nào đã được phủ
bởi các tích nào. Mỗi hội sơ cấp phải được phủ bởi ít nhất một tích (trong
lập trình, ta sử dụng quay lui để cài đặt).
Ví dụ 3.4.10 Dùng phương pháp Quine - McCluskey để tối tiểu dạng tuyển
chuẩn tắc sau:
w.x.y.z̄ w.x̄.y.z w.x̄.y.z̄ w̄.x.y.z w̄.x.ȳ.z w̄.x̄.y.z w̄.x̄.ȳ.z.
Lời giải: Biểu diễn các hội sơ cấp bằng các xâu bit, ta có bảng sau:
Tích Xâu bit Số các bit 1
w.x.y.z̄ 1110 3
w.x̄.y.z 1011 3
w̄.x.y.z 0111 3
w.x̄.y.z̄ 1010 2
w̄.x.ȳ.z 0101 2
w̄.x̄.y.z 0011 2
w̄.x̄.ȳ.z. 0001 1
Tổ hợp các tích ban đầu, qua các bước ta có bảng sau:
Bước 1 Bước 2
Tích Tích Tích
1: w.x.y.z̄ (1110) p1, 4q: w.y.z̄ (1 10) p3, 5, 6, 7q: w̄.z (0 1)
2: w.x̄.y.z (1011) p2, 4q: w.x̄.y (101)
3: w̄.x.y.z (0111) p2, 6q: x̄.y.z (011)
4: w.x̄.y.z̄ (1010) p3, 5q: w̄.x.z (01 1)
5: w̄.x.ȳ.z (0101) p3, 6q: w̄.y.z (0 11)
6: w̄.x̄.y.z (0011) p5, 7q: w̄.ȳ.z (0 01)
7: w̄.x̄.ȳ.z (0001) p6, 7q: w̄.x̄.z (00 1)
Tập các tích boole không được dùng tiếp để tạo ra tích có ít tín hiệu hơn là:
w̄.z, w.y.z̄, w.x̄.y, x̄.y.z. Ta lại lập bảng sau để xét xem các hội sơ cấp ban
đầu bị phủ bởi tập các tích nào trong số những tích trên:
w.x.y.z̄ w.x̄.y.z w̄.x.y.z w.x̄.y.z̄ w̄.x.ȳ.z w̄.x̄.y.z w̄.x̄.ȳ.z
w̄.z
w.y.z̄
w.x̄.y
x̄.y.z
Từ bảng trên ta thấy bắt buộc phải có ít nhất hai tích w̄.z và w.y.z̄ vì các tích
này là những tích duy nhất phủ w̄.x.y.z và w.x.y.z̄ tương ứng. Một khi đã
có hai tích nói trên thì chỉ cần thêm một trong hai tích còn lại là được. Vậy kết
quả là w̄.z w.y.z̄ w.x̄.y hoặc w̄.z w.y.z̄ x̄.y.z. l
Bài tập III
a) 1.0̄. c) 0̄.0.
b) 1 1̄. d) 1 0.
III.2. Tìm giá trị (nếu có) của biến boole x thỏa mãn những phương trình sau:
a) x.1 0. c) x.1 x.
b) x x 0. d) x.x̄ 1.
III.3. Tìm giá trị của biến boole x và y thỏa mãn phương trình x.y x y.
III.5. Chứng minh rằng F px, y, z q x.y x.z y.z có giá trị 1 nếu và chỉ
nếu ít nhất hai trong số các biến x, y, z có giá trị 1.
III.6. Chứng minh rằng x.ȳ y.z̄ x̄.z x̄.y ȳ.z x.z̄ với x, y, z là
các biến boole.
a) x y. c) x.y.z x̄.ȳ.z̄.
b) x̄.ȳ. d) x.z̄ x.0 x̄.1.
III.8. Cho F là hàm boole được biểu diễn bởi một biểu thức boole với các biến
x1 , x2 , . . . , xn . Chứng minh rằng:
F d px1 , x2 , . . . , xn q F px1, x2, . . . , xnq.
III.9. Chứng minh rằng nếu F và G là các hàm boole được biểu diễn bởi các
biểu thức boole n biến và F G thì F d Gd với F d và Gd là các hàm boole
được biểu diễn bởi đối ngẫu của các biểu thức boole biểu diễn các hàm F và G
tương ứng.
III.10. Có bao nhiêu hàm boole F px, y, z q khác nhau sao cho F px̄, ȳ, z̄ q
F px, y, z q đối với mọi giá trị của các biến boole x, y, z?
III.11. Có bao nhiêu hàm boole F px, y, z q khác nhau sao cho F px̄, y, z q
F px, ȳ, z q F px, y, z̄ q đối với mọi giá trị của các biến boole x, y, z?
III.12. Chứng minh rằng trong một đại số boole, mọi phần tử x đều có đúng
một phần bù x̄ sao cho x x̄ 1 và x.x̄ 0.
III.13. Chứng minh rằng trong một đại số boole, phần bù của phần tử 0 là phần
tử 1 và ngược lại.
III.14. Tìm tích boole của x hoặc x̄, y hoặc ȳ, z hoặc z̄, biết rằng tích đó có
giá trị 1 nếu và chỉ nếu:
a) x y 0, z 1. c) x 0, y z 1.
b) x 0, y 1, z 0. d) x y z 0.
III.15. Tìm dạng tuyển chuẩn tắc của các hàm boole sau:
a) F px, y q x̄ y. e) F px, y, z q x y z.
b) F px, y q x.ȳ.
f) F px, y, z q px z q.y.
c) F px, y q 1.
d) F px, y q ȳ. g) F px, y, z q x.ȳ.
III.16. Tìm dạng tuyển chuẩn tắc của hàm boole F px, y, z q biết rằng F 1
nếu và chỉ nếu:
a) x 0. c) x y 0.
b) x.y 0. d) x.y.z 0.
III.17. Tìm dạng tuyển chuẩn tắc của hàm boole F px, y, z, w q biết rằng
F 1 nếu và chỉ nếu một số lẻ những giá trị trong những giá trị x, y, z, w
bằng 1.
III.18. Tìm dạng tuyển chuẩn tắc của hàm boole F px1 , x2 , x3 , x4 , x5 q biết
rằng F 1 nếu và chỉ nếu ba hoặc nhiều hơn những giá trị trong những giá trị
x1 , x2 , x3 , x4 , x5 có giá trị 1.
III.19. Tìm tổng boole chứa x hoặc x̄, y hoặc ȳ, z hoặc z̄ có giá trị 0 nếu và
chỉ nếu:
a) x y 1, z 0.
b) x y z 0.
c) x z 0, y 1.
III.20. Tìm tích boole các tổng boole của các tín hiệu, biết rằng tích đó có giá
trị 0 nếu và chỉ nếu x y 1 và z 0 hoặc x z 0 và y 1 hoặc
x y z 0.
III.22. Chứng minh rằng một hàm boole luôn có thể được biểu diễn dưới dạng
tích boole của các tuyển sơ cấp. Biểu diễn này được gọi là khai triển tích các
tổng hay dạng hội chuẩn tắc của hàm đó.
III.23. Tìm dạng hội chuẩn tắc của các hàm boole sau:
a) F px, y q x̄ y. e) F px, y, z q x y z.
b) F px, y q x.ȳ.
f) F px, y, z q px z q.y.
c) F px, y q 1.
d) F px, y q ȳ. g) F px, y, z q x.ȳ.
III.24. Biểu diễn các hàm boole sau bằng cách chỉ dùng toán tử tích boole và
toán tử lấy phần bù:
a) x y z. c) x ȳ.
b) x ȳ.px̄ z q. d) x̄.px ȳ z̄ q.
III.25. Biểu diễn các hàm boole sau bằng cách chỉ dùng toán tử tổng boole và
toán tử lấy phần bù:
a) x y z. c) x ȳ.
b) x ȳ.px̄ z q. d) x̄.px ȳ z̄ q.
a) x̄ x|x.
b) x.y px|y q|px|y q.
c) x y px|xq|py |y q.
III.28. Biểu diễn các hàm boole sau bằng cách chỉ dùng toán tử “|”:
a) x y z. c) x ȳ.
b) x ȳ.px̄ z q. d) x̄.px ȳ z̄ q.
III.29. Biểu diễn các hàm boole sau bằng cách chỉ dùng toán tử “Ó”:
a) x y z. c) x ȳ.
b) x ȳ.px̄ z q. d) x̄.px ȳ z̄ q.
III.30. Chứng minh rằng tập các phép toán t , .u không phải là một hệ đầy đủ.
III.31. Hãy kiểm tra những tập sau xem có phải là hệ đầy đủ không:
a) t , `u. b) t¯, `u. c) t., `u.
III.37. Dựng các mạch gồm các bộ đảo, các cổng AN D và OR để tạo các
đầu ra sau:
a) x̄ y. c) x.y.z x̄.ȳ.z̄.
b) px y q.x. d) px̄ z q. py z̄ q.
III.38. Hãy thiết kế một mạch thực hiện sự bỏ phiếu theo đa số cho năm thành
viên.
III.39. Hãy dùng các cổng N AN D xây dựng các mạch với các đầu ra như
sau:
a) x̄. c) x.y.
b) x y. d) x ` y.
III.40. Hãy dùng các cổng N OR xây dựng các mạch với các đầu ra như sau:
a) x̄. c) x.y.
b) x y. d) x ` y.
III.41. Vẽ bảng Karnaugh đối với một hàm hai biến và ghi số 1 vào ô biểu diễn
x̄.y. Các hội sơ cấp nào được biểu diễn bởi các ô kề với ô nói trên?
III.42. Tìm khai triển dạng tuyển chuẩn tắc được biểu diễn bởi các bảng
Karnaugh sau:
y ȳ y ȳ
a) x 1 c) x 1 1
x̄ 1 1 x̄ 1 1
y ȳ
b) x 1 1
x̄
III.43. Vẽ các bảng Karnaugh của những khai triển tổng các tích hai biến sau
và tìm khai triển tối tiểu của chúng:
III.44. Vẽ bảng Karnaugh đối với một hàm ba biến và ghi số 1 vào ô biểu diễn
x̄.y.z̄. Các hội sơ cấp nào được biểu diễn bởi các ô kề với ô nói trên?
III.45. Dùng bảng Karnaugh tìm khai triển tối tiểu của các biểu thức boole sau:
a) x.y.z x̄.y.z.
b) x.y.z̄ x.ȳ.z̄ x̄.y.z̄ x̄.ȳ.z̄.
c) x̄.y.z.rpx z̄ q pȳ z̄ qs.
III.46. Vẽ các bảng Karnaugh của những khai triển tổng các tích boole ba biến
sau:
a) x.ȳ.z̄.
b) x̄.y.z x̄.ȳ.z̄.
c) x.y.z x.y.z̄ x̄.y.z̄ x̄.ȳ.z.
III.47. Dùng bảng Karnaugh tìm khai triển tối tiểu của các hàm boole ba biến
sau:
a) x̄.y.z x̄.ȳ.z.
b) x.y.z x.y.z̄ x̄.y.z x̄.y.z̄.
c) x.y.z̄ x.ȳ.z x.ȳ.z̄ x̄.y.z x̄.ȳ.z.
d) x.y.z x.ȳ.z x.ȳ.z̄ x̄.y.z x̄.y.z̄ x̄.ȳ.z̄.
III.48. Vẽ bảng Karnaugh đối với một hàm bốn biến và ghi số 1 vào ô biểu
diễn w̄.x.y.z̄. Các hội sơ cấp nào được biểu diễn bởi các ô kề với ô nói trên?
III.49. Dùng bảng Karnaugh tìm khai triển tối tiểu của các hàm boole bốn biến
sau:
III.50. Giả sử một ủy ban có năm thành viên, nhưng Dân và Minh luôn bỏ
phiếu ngược với Phong. Hãy thiết kế một mạch thực hiện việc bỏ phiếu theo đa
số của ủy ban đó, có dùng đến quan hệ nói trên giữa các lá phiếu.
III.51. Dùng phương pháp Quine - McCluskey tìm khai triển tối tiểu của các
hàm boole ba biến sau:
a) x̄.y.z x̄.ȳ.z.
III.52. Dùng phương pháp Quine - McCluskey tìm khai triển tối tiểu của các
hàm boole bốn biến sau:
III.53. Dùng phương pháp Quine - McCluskey tìm khai triển tối tiểu của các
hàm boole bốn biến sau:
III.54. Hãy giải thích làm thế nào có thể dùng các bản đồ Karnaugh để rút gọn
khai triển tích boole các tổng boole ba biến. (Gợi ý: Đánh dấu các ô tương ứng
với các tuyển sơ cấp trong khai triển và tổ hợp các khối của các tuyển sơ cấp.)
III.55. Dùng phương pháp ở bài tập trên, hãy rút gọn khai triển tích các tổng
px y zq.px y z̄q.px ȳ zq.px ȳ z̄q.px̄ y zq.
III.56. Dùng các cổng OR, AN D và các bộ đảo để dựng một mạch cho đầu
ra bằng 1 nếu chữ số thập phân được mã hóa nhị phân chia hết cho 3 và bằng 0
trong các trường hợp còn lại.
145
Chỉ mục
cấu hình tổ hợp . . . . . . . . . . . . . . . . . . . 6 hai biểu thức boole tương đương với
cổng AND . . . . . . . . . . . . . . . . . . . . . 121 nhau . . . . . . . . . . . . . . . . . . . . 116
cổng logic . . . . . . . . . . . . . . . . . . . . . . 120 hai hàm boole bằng nhau . . . . . . . . 116
cổng NAND . . . . . . . . . . . . . . . . . . . . 121
cổng NOR . . . . . . . . . . . . . . . . . . . . . 121 K
cổng OR . . . . . . . . . . . . . . . . . . . . . . . 121 không chia hết cho . . . . . . . . . . . . . . . 13
cổng XOR . . . . . . . . . . . . . . . . . . . . . 121 khai triển
cực tiểu hóa các mạch . . . . . . . . . . . 123 bát phân . . . . . . . . . . . . . . . . . . . . . 37
chia hết . . . . . . . . . . . . . . . . . . . . . . . . . 13 Cantor . . . . . . . . . . . . . . . . . . . . . . . 11
chia hết cho . . . . . . . . . . . . . . . . . . . . . 13 nhị phân . . . . . . . . . . . . . . . . . . . . . 37
chia hết cho đa thức . . . . . . . . . . . . . . 51 thập lục phân . . . . . . . . . . . . . . . . . 37
theo hệ cơ số . . . . . . . . . . . . . . . . . 36
D khai triển tổng các tích . . . . . . . . . . 118
dãy số Fibonacci . . . . . . . . . . . . . . . . . 70 khai triển thành tích các đa thức bất khả
dạng hội chuẩn tắc . . . . . . . . . . . . . . 119 qui . . . . . . . . . . . . . . . . . . . . . . . 51
dạng khai triển tích các tổng . . . . . 119
dạng khai triển tổng các tích . . . . . 119 L
dạng tuyển chuẩn tắc . . . . . . . . . . . . 119 lớp các số nguyên đồng dư theo modulo
m . . . . . . . . . . . . . . . . . . . . . . . . 33
G lời giải của hệ thức truy hồi . . . . . . . 74
giải hệ thức truy hồi . . . . . . . . . . . . . . 79 liệt kê hoán vị . . . . . . . . . . . . . . . . . . . . . 7
liệt kê tập con . . . . . . . . . . . . . . . . . . . . 10
H liệt kê tổ hợp . . . . . . . . . . . . . . . . . . . . 10
hàm đối ngẫu của một hàm boole . 117 liệt kê xâu nhị phân . . . . . . . . . . . . . . . . 9
hàm băm . . . . . . . . . . . . . . . . . . . . . . . . 39 luật đồng nhất . . . . . . . . . . . . . . . . . . 114
hàm boole n biến . . . . . . . . . . . . . . . 115 luật bài trung . . . . . . . . . . . . . . . . . . . 114
hàm boole được cho dưới dạng bảng luật De Morgan . . . . . . . . . . . . . . . . . 114
116 luật giao hoán . . . . . . . . . . . . . . 113, 114
hàm boole được cho dưới dạng biểu luật hấp thụ. . . . . . . . . . . . . . . . . . . . .114
thức boole . . . . . . . . . . . . . . . 116 luật kết hợp . . . . . . . . . . . . . . . . 113, 114
hằng đẳng thức boole . . . . . . . . . . . . 113 luật lũy đẳng . . . . . . . . . . . . . . . . . . . 114
hệ đầy đủ . . . . . . . . . . . . . . . . . . . . . . 120 luật nuốt . . . . . . . . . . . . . . . . . . . . . . . 114
hệ mã mật Caesar . . . . . . . . . . . . . . . . 41 luật phân phối . . . . . . . . . . . . . . 113, 114
hệ thức truy hồi . . . . . . . . . . . . . . . . . . 74 luật phần bù kép . . . . . . . . . . . . . . . . 114
hệ thức truy hồi tuyến tính không thuần
nhất hệ số hằng . . . . . . . . . . . . 89 M
hệ thức truy hồi tuyến tính thuần nhất mô hình hóa bằng hệ thức truy hồi . 75
hệ số hằng số . . . . . . . . . . . . . . 79 mạch bỏ phiếu theo đa số . . . . . . . . 122
hội sơ cấp n biến . . . . . . . . . . . . . . . 119 mạch logic . . . . . . . . . . . . . . . . . . . . . 120
hợp số . . . . . . . . . . . . . . . . . . . . . . . . . . 16 mạch tổ hợp . . . . . . . . . . . . . . . . . . . . 120