Trước khi dưa vào khái niệm dộ phức tạp của thuật toán, ta dc cập tới một sô khái niệm sau: a Khái niệm vê độ táng của hàm Một trong những khái niệm thường dùng để phân tích độ tăng của
Trang 1NHÀ XUẤT/BẢN GlÁCXm JC VIỆ
G ]
& J
Trang 3Công ty cổ phần Sách Đại học • Dạy nghề - Nhà xuất bản Giáo dục Việt Nam giữ quyển công bố tác phẩm.
14 - 201 l/CXB/102 - 2075/GD Mã số : 7B705y 1 - DAI
Trang 4J lờ i nối đau
Dê nâng cao chất lượng giảng dạy và học tập môn Toán rời rạc cho sinh viên và học viên ngành Công nghệ thông tin và các ngành
khoa học tự nhiên, chúng tôi biên soạn cuôh Toán rời rac ứng dung
trong tin hoc gồm :
- Phần I Kiến thức bổtrỢ;
- Phần II Logic và ứng dụng;
- Phần III Dồ thị và ứng dụng;
- Phần IV Ngôn ngữ hình thức.
Cuốn Toán rời rac ứng dung trong tin hoc trình bày các vân d ề
toán học cơ bản nhất, nhưng lại h ết sức thiết yếu và cần thiết đối với những ai m uôh có dược các kiến thức tin học vững chắc Cuốn sách giúp người học hiểu dược lý thuyết thấu dáo, rèn luyện tư duy khoa học, k ỹ năng tính toán và khả năng vận dụng toán học vào giải quyết vân dề, kích thích niềm say mê học tập và từ đó nâng cao k ỹ năng thực hành, tư d u y sáng tạo khi học các m ôn học cơ SỞ và chuyên ngành Công nghệ thông tin tiếp theo Cuốn sách này cũng rất bô ích cho việc ôn thi tu vén sinh sau dại hoc ngành Công nghệ thông tin dược tô chức hàng năm Ở Đại học Quốc gia Hà Nội.
Tác giả chân thành cảm ơn các bạn dồng nghiệp dã dộng viên tác giả biên soạn cuốn sách này.
Cuốn sách xuất bản lần dầu, nôn khó tránh khỏi thiếu sót về hình thức củng n h ư nội dung Vì vậy, tác giả m ong nhận dược sự góp ý của bạn dọc dê cuốn sách ngày càng tốt hơn Mọi góp ý xin gửi về: Công ty Cô phần Sách Dại học và Dạy nghề: 25 Hàn Thuyên -
Hà N ộ i.
TÁC GIẢ
Trang 54 TOÁN RỜI RẠC ỨNG DUNG TRONG TIN HOC
MỤC LỤC
V
LỜI NÓI ĐẦU 3
Phẩn I KIẾN THỬC B ổ TRỢ Chương 1 CÁC KHÁI NIỆM c ơ BẢN CỦA THUẬT TOÁN VÀ PHƯƠNG PHÁP ĐỆ Q U Y 9
§1 Khái niệm thuật toán 9
1.1 Thuật toán là g ì 9
1.2 Các đặc trưng của thuật toán
1.3 Ngôn ngữ thuật toán 10
1.4 Độ phức tạp thuật to á n 13
§2 Phương pháp đệ quy 19
BÀI T Ậ P 29
Chương 2 CÁC PHƯƠNG PHÁP Đ Ế M 33
§1 Tập hợp và biểu diễn tập hợp trên máy tính 33
1.1 Các phép toán trên tập hợp 33
1.2 Các tính chất của tập hợp 34
1.3 Lực lượng của tập h ợ p 34
1.4 Tích Đề-các của các tập hợp và lực lượng của n ó 35
1.5 Biểu diễn các tập hợp trên máy tín h 35
§2 Hoán vị, chỉnh hợp và tổ hợp 37
2.1 Hoán vị và chình hợ p 37
2.2 Tổ hợp và định lý nhị thức 38
§3 Các quy tắc đếm cơ bản 43
3.1 Quy tắc cộng 43
3.2 Quy tắc n hâ n 44
3.3 Một số bài toán đếm kết hợp giữa quy tắc cộng và quy tắc n h â n 45
§4 Nguyên lý chuồng chim bồ câu 52
4.1 Nguyên lý chuồng chim bổ c ả u 52
4.2 Nguyên lý Dirichlet 52
4.3 Các ví d ụ 53
Chương 3 QUAN HỆ 57
§1 Quan hệ và biểu diễn quan h ệ 57
1.1 Quan hệ và ví dụ về quan hệ 57
1.2 Phương pháp biểu diễn quan hệ 57
1.3 Tính chất của quan h ệ 60
§2 Cung và đường trong đố thị của quan h ệ 63
2.1 Định nghĩa 1 63
2.2 Tính chất 63
§3 Quan hệ ngược và quan hệ hợp thành 64
3.1 Quan hệ ngược 64
3.2 Quan hệ hợp thành 65
Trang 6MỤC L Ụ C _ • 5
• §4 Quan hệ tương đương 66
4.1 Định nghĩa quan hệ tương đương 66
4.2 Phản hoạch tương đương và lớp tương đương trẽn tập h ợ p 67
§5 Bao đóng bắc cáu của quan hệ 70
5.1 Bao đóng bắc cấu của quan hệ 70
5.2 Xác định bao đóng bắc cầu của quan h ệ 70
§6 Thuật toán xác định bao đóng bắc cầu của quan h ệ 73
BÀI TẬP : 74
Phán II LOGIC VÀ ỨNG DỤNG Chưưng 4 LOGIC MỆNH ĐỂ 78
§ 1 Các phép toán và công thức 78
1.1 Định nghĩa các phép toán trong đại số mệnh đ ề 78
1.2 Định nghĩa công thức trong lỏgic mệnh đ ể 79
1.3 Công thức đồng nhất bằng nhau và cống thức đống nhất đúng 80
1.4 Bảng công thức đồng nhất bằng nhau 80
1.5 Bảng công thức hằng đúng 81
1.6 Luật đối ngẫu 81
1.7 Luật thay th ế 82
1.8 Luật kết lu ậ n i 83
§2 Điếu kiện đống nhất đúng (hằng đúng), điều kiện đồng nhất sai (hằng sai) 83
2.1 Tuyển và hội sơ cấ p 83
2.2 Dạng chuẩn tắc tuyển và chuẩn tắc hội 84
2.3 Thuật toán nhận biết hằng đúng, hằng sai và thực hiện được của công thức trong lôgic mệnh đ ề 85
§3 Các quy tắc suy diễn trong lôgic mệnh đ ề 86
3.1 Các quy tắc suy d iễn 87
3.2 Ví dụ minh hoạ việc áp dụng các quy tắc suy d iễ n 88
Chương 5 LOGIC VỊ TỪ 102
§1 Định nghĩa vị từ 102
§2 Khái niệm công thức đổng nhất bằng nhau, đổng nhất đúng và đồng nhất s a l 104
§3 Ý nghĩa các vị từ theo lý thuyết tập hợp 106
3.1 Vị từ một ngôi 106
3.2 Mờ rộng cho vị từ n n g ô i 107
§4 Dạng chuẩn tắc hội và dạng chuẩn tắc tuyển của công thức 108
4.1 Bảng các công thức đồng nhất bằng nhau trong lôgic vị từ cấp 1 110
4.2 Thuật toán tìm DCTH và DCTT của công thức A trong lôgic vị từ cấp 1 111
§5 Vấn đề về tính giải được 113
§6 Nguyên lý quy nạp 118
§7 Quy tắc suy diễn trong lôgic vị từ cấp 1 124
7.1 Các lượng từ và các mệnh đề có lượng từ 124
7.2 Một số quy tắc suy diễn trong lôgic vị từ 124
7.3 Một sỏ ví dụ áp dụng 125
BÀI TÂP .! , 129
Trang 7Chương 6 HỆ TOÁN MỆNH Đ Ể 140
§1 Hệ toán mệnh đ ề 141
1.1 Xây dựng hệ toán mệnh đề 141
1.2 Các định nghĩa trong hệ toán mệnh đ ề 142
1.3 Một số ví dụ về định lý 143
§2 Các tinh chất của hệ toán mệnh đế 144
§3 Định lý tương đương 152
§4 Quan hệ giữa Logic mệnh đề và hệ toán mệnh đ ề 169
§5 Tính phi mâu thuẫn, tính đầy đủ, tính độc lập của hệ toán mệnh đé 180
5.1 Tính phi mâu thuẫn của hệ toán mệnh đ ề 180
5.2 Tính đầy đủ của hệ toán mệnh đ é 180
5.3 Tính độc lập của hệ toán mệnh đ ề 181
Phẩn III ĐỒ THỊ VÀ ỨNG DỤNG Chương 7 LÝ THUYẾT Đ ổ T H Ị 189
§1 Định nghĩa đồ thị, biểu diễn đồ thị và một số dạng đồ thị thường g ặ p 189
1.1 Định nghĩa đố thị 189
1.2 Biểu diễn đổ th ị 190
1.3 Một số dạng đồ thị thường gặ p 193
§2 Một số thuật ngữ và tính chất của đố th ị 195
2.1 Một số thuật ngữ của dồ th ị 195
2.2 Một số tính chất của đồ th ị 197
§3 Số ổn định trong, số ổn định ngoài và nhân của đố th ị 200
3.1 Sô ổn định tro n g 200
3.2 Số ổn định ngoài 200
3.3 Nhân của đồ thị 201
3.4 Thuật toán tìm số ổn định ngoài 202
§4 Sắc sô của đô th ị 204
4.1 Sắc số của đố thị đầy đ ủ 204
4.2 Sắc số của đồ thị không có chu trình độ dài lẻ 204
4 3 Quan hệ giữa sắc số và số ổn định trong 205
4.4 Sắc số của đố thị có chu trình 206
4.5 Sắc số của đồ thị đơn và đổ thị đơn phàn đôi 206
4.6 Bài toán tô màu bản đố 207
§5 Chu trình Euler và đường Euler 208
5.1 Chu trình Euler 208
5.2 Thuật toán tìm chu trình Euler 212
5.3 Đường Euler 213
5.4 Thuật toán tim đường Euler 214
§6 Chu trình Hamilton và đường Hamilton 214
6.1 Chu trình Hamilton 214
6.2 Đường Hamilton 216
§7 Đường đi ngắn nhất trong đổ th ị 218
7.1 Đường đi ngắn nhất trong đồ thị không trọng s ố 218
7.2 Đường đi ngắn nhất trong đồ thị có trọng s ố 219
6 TOÁN RỜI RẠC ỨNG DỤNG TRONG TIN HOC
Trang 8MỤC LỤC _ _ 7
§8 Một số tính chất của đố thị phảng 224
8.1 Khái niệm diện hữu hạn và diện vô hạn của đố thị phảng 224
8.2 Chu sô' của đò thị 225
8.3 Công thức Euler 226
BÀ T Ậ P 226
Chương 8 CÂY VÀ ỨNG DỤNG CỦA C Â Y 239
1.1 Cây
1.2 Rừng cây 241
1.3 Cây có gốc 241
1.4 Cây m - phàn, cây m - phản đẩy đủ và cây nhị p h ả n 242
§2 Một số tính chất của cây 243
§3 ứng dụng của cây 246
3.1 Cày tìm kiếm nhị phân đối với bài toán 1 247
3.2 Cây quyết định đối với bàrtoán 2 248
3.3 Các mã tiền tố đối với bài toán 3 249
§4 Các phương pháp duyệt cày 252
4.1 Hệ địa chỉ phổ dụng 252
4.2 Thuật toán duyệt câ y 253
§5 Cây và các bài toán sắp x ế p 258
5.1 Thuật toán sắp xếp nhị nguyên 258
5.2 Thuật toán sắp xếp kiểu nổi b ọ t 259
5.3 Thuật toán sắp xếp kiểu hoà nhập 261
§6 Cày khung của đổ th ị : 266
6.1 Cây khung của đố thị không có trọng s ố 266
6.2 Cây khung của đổ thị có trọng s ố 275
BAI T Ậ P 282
Phấn IV NGÔN NGỮ HỈNH THỨC Chương 9. VĂN PHẠM VÀ NGÔN NGỮ SINH BỞI VĂN PHAM 298
§1 Khát niệm chung về ngốn ngữ 298
1.1 Bảng chữ c á i 298
1.2 Xâu ký tự 299
1.3 Ngôn ngữ 299
§2 Văn phạm và ngôn ngữ sinh bởi văn phạm 300
2.1 Định nghĩa văn phạm 300
2.2 Ngôn ngữ của văn phạm 301
§3 Phản loại văn phạm của chomsky 302
§4 Một số ví dụ về văn phạm 304
§5 Một số tính chất của văn phạm 308
BAI TẬP 314
Chương 10 ÔTÔMAT HỮU HẠN VÀ NGÔN NGỬ-ĐOÁN NHẬN CỦA N Ó 319
§1 Ôtômat hữu hạn (Finite Automata - FA) 319
1.1 Định nghĩa ôtômat hữu hạn 319
Trang 91.2 Phương pháp biểu diễn ôtômat hữu hạn 320
1.3 Sự tương đương giữa ôtômat đơn định và không đơn địn h 327
§2 Ngôn ngữ chính quy và biểu thức chính quy 328
2.1 Ngôn ngữ chính quy 328
2.2 Biểu thức chính q u y 329
2.3 Thuật toán Thompson 329
2.4 Tính chất của ngôn ngữ chính quy 331
2.5 Quan hệ giữa ôtômat hữu hạn và ngôn ngữ chính quy 332
BÀI T Ậ P 335
Chương 11 ÔTÔMAT ĐẨY XUỐNG ĐOÁN NHẬN NGÔN NGỮ PHI NGỮ CẢNH 345
§1 Văn phạm phi ngữ cảnh và cây dẫn xuất của n ó 345
1.1 Định nghĩa văn phạm phi ngữ cảnh và quy tắc về ký h iệ u 345
1.2 Cây dẫn xuất đầy đủ trong văn phạm phi ngữ cảnh 346
1.3 Sự nhập nhằng trong ngôn ngữ phi ngữ c ả n h 349
§2 Giản lược các văn phạm phi ngữ cảnh : 350
2.1 Ký hiệu có ích và ký hiệu thừa 350
2.2 Các A- quy tắc ( a chỉ xâu rỗng) 352
2.3 Các quy tắc đơn 353
§3 Văn phạm chuẩn của Chomsky 354
§4 Ôtỏmat đẩy xuống (Pushdown Automata) 356
4.1 Ôtômat đẩy xuống 357
4.2 Ngôn ngữ đoán nhận của PA 360
§5 Phương pháp phân tích tất định trên lớp ngôn ngữ phi ngữ cảnh 366
5.1 Phản tích tất định 366
5.2 Các hàm FIRST, FOLLOW 369
5.3 Điều kiện để văn phạm phi ngữ cảnh không nhập nhằng và không đệ quy trái 371
BÀI T Ậ P 374
Chương 12 MÁY TURING KHÔNG ĐƠN ĐỊNH ĐÀN HỔI ĐOÁN NHẬN NGÔN NGỮVẢN PHẠM 391
§1 Máy Turing đơn định 391
§2 Máy Turing không đơn định đàn h ố i 393
2.1 Mô tả sự hoạt động của máy Turing đơn định không đàn h ồ i 393
2.2 Mô hình máy một băng 397
§3 Sự tương đương giữa máy Turing không đơn định đàn hổi và văn phạm Chomsky ' 399
Phụ lục MỘT s ố ĐỂ THI TUYỂN s in h s a u đ ạ i h ọ c (ĐHQGHN) 401
TÀI LIỆU THAM KHẢO 407
8 _ TOÂN RỜI RẠC ỨNG DỤNG TRONG TIN HỌC
Trang 10PHẦN I
KIẾN THỨC BỔ TRỢ _ ■
C h ư ơ n g 1
C Á C KHÁI NIỆM C O BẢN
§1 KHÁI NIỆM THUẬT TOÁN 1.1 Thuật toán là gì
Thuật toán là một khái niệm quan trọng của toán học Nói đến thuật toán là nói đến một dãy các quy tắc, nhằm xác dinh một dãy các thao tác trên các đôi tượng, sao cho sau một số hữu hạn bước thực hiện các thao tác,
ta đạt dược mục tiêu cần làm
1.2 Các độc trưng của thuột toán
- Tính dừng: Sau một số hữu hạn bước thuật toán phái dừng.
- Tính xác dinh: Ở mỗi bước, các thao tác phải rõ ràng, không gây nên
sự nhập nhằng Nói rõ hơn, trong cùng một điểu kiện hai bộ xử lý cùng thực hiện một bước của thuật toán phái cho những kết quá như nhau
- Tính hiệu quá: Trước hết thuật toán phải dúng đắn, nghĩa là sau khi
dưa dữ liệu vào thuật toán hoạt dộng và đưa ra kết quả mong muốn
- Tính phổ dụng: Thuật toán có thể giải bất kỳ một bài toán nào trong
lớp các bài toán Cụ thế là thuật toán có thê có các đầu vào là các bộ dữ liệu khác nhau trong miên xác định
- Yếu tố vào ra: Đối với một thuật toán luôn có một đối tượng vào
(input) và đối tượng ra (output)
Trang 1110 "OÁN RỜI RAC ỨNG DUNG TRONG TIN HOC
1.3 Ngôn ngữ thuật ỉoán
- Ngôn ngữ dùng đe miêu ta thuật toán gọi là ngôn ngữ thuật toán
- Thuật toán thường dược mò tá bàng một dãy các lệnh Bộ xử lý sẽ thực hiện các lệnh đó theo một trật tự nhất dinh cho đến khi gãp lệnh dừng thì kết thúc
- Ngôn ngữ thuật toán bao gồm:
+ Ngôn ngữ liệt kè tùng bước;
+ Sơ đồ khối;
+ Ngôn ngữ lập trình
a) Ngôn ngữ liệt ké tùng bước bao gốm:
- Thuật toán: Tên thuật toán và chức nâng
- Đầu vào: Các dữ liệu vào với tên, kiêu
- Đầu ra: Các dữ liệu ra với tên, kiếu
- Biến phụ (nếu có ) gồm tên, kiểu
- Hành dộng là các thao tác với các lệnh có nhãn là các sô tự nhiên
Ví dụ 1: Đế giái phương trình bậc hai ax2 + bx + c = 0 (a * 0), ta có thê
mô tá thuật toán bằng ngôn ngữ liệt kê như sau:
Bước l : Xác dinh các hệ sô a, b, c.
Bước 2: Kiểm tra xem hê sô a có khác 0 hay không? Nếu a = 0 quay lại
thực hiện bước 1
Bước 3: Tính biểu thức A = b2 - 4ac.
Bước 4: Nếu A < 0 thông báo "phương trình vô nghiệm" và chuyển den
Bước 7: Thông báo các nghiệm X|, x2
Bước S: Kết thúc thuât toán.
và chuyên sang bước 7
b) Sơ đổ khối
Đê mô tá thuật toán bàng sơ dổ khôi ta cần dựa vào các nút sau:
Trang 12Phấn ĩ. KIẾN THỨC Bổ TRƠ 11
- NÚI thao tác: Biếu diễn bàng hình chữ nhật,
trong dó ghi câu lệnh cần thực hiện Nếu có nhiều
câu lệnh liên tiếp cần được thực hiện thì chúng có
thế được viết chung trong nút thao tác;
- Nát điều kiện: Biểu diễn bằng hình thoi,
trong đó ghi điều kiện cần kiểm tra trong quá
trình tính toán;
- Nút khói dầu, kết thúc: Biểu diễn bằng hình
elip, the hiện sự bắt đầu hay kết thúc quá trình;
- Cung: Biểu diễn bằng đoạn thẳng có hướng,
Chẳng hạn, giải phương trình bậc hai ax2 + bx + c = 0 (a * 0) ta mò tả thuật toán bằng phương pháp sơ đồ khối như sau:
Trang 1312 TOÁN RỜI RẠC ỨNG DỤNG TRONG TIN HOC
c) Ngôn ngữ lặp trình
Đê giải bài toán bằng máy tính, người ta thường sử dụng một loại ngôn
ngữ, gọi là ngôn ngữ lập trình, chẳng hạn như ngôn ngữ lập trình Cobol, Algol, Pascal, Chương trình chính là một dãy hữu hạn các câu lệnh được
viết theo một quy tắc nhất dinh trên một ngôn ngữ lập trình nào đó Hay nói cách khác, để giải một bài toán trước hết cần có một thuật toán để giải bài toán đó; để máy tính hiểu được thuật toán, người ta sử dụng một ngón ngừ lập trình cự thê đế diễn đạt thuật toán thông qua ngôn I*gữ đó
Chảng hạn, giải phương trình bậc hai ax2 + bx + c = 0 (a * 0) ta mỏ tá
thuật toán bằng một chương trình Pascal như sau:
exit;
end else
begin x1 ;= (—b - sqrt(delta))/(2*a);
END.
Trang 14Phán ỉ. KIÉN THỨC Bổ TRỢ 13
1.4 Độ phức tạp thuật toán
Khi dề xuất một thuật toán, ngoài việc quan tâm đến tính đúng đắn, thường phái quan tàm đến một số vấn đề như: ưu diêm, nhược điểm, tính phổ dưng, thời gian tính toán, Với các thuật toán được sử dụng có tần số cao như các thuật toán sắp xếp, thuật toán tìm kiếm, ta đặc biệt quan tâm dến thời gian cần thiết cho việc thực hiện thuật toán dó
Thông thường với mỗi thuật toán, dữ liệu vào sẽ có kích thước là một số nào đó Chảng hạn, khi sắp xếp một dãy số thì kích thước của dữ liệu có thê xcm như là sô phần tứ n cúa dãy đó Rõ ràng với n càng lớn thi thời gian cần thiết cho việc sắp xếp sẽ càng lớn và nó là một hàm cúa đôi sô n Ta ký hiệu hàm dó là f(n) Trước khi dưa vào khái niệm dộ phức tạp của thuật toán, ta
dc cập tới một sô khái niệm sau:
a) Khái niệm vê độ táng của hàm
Một trong những khái niệm thường dùng để phân tích độ tăng của một hàm là khái niệm "O" dược định nghĩa như sau:
Cho f(x) và g(x) là hai hàm từ tập các số nguyên dương hoặc tập các số thực vào tập các số thực Ta nói f(x) là ()(g(x)) nếu tồn tại hai hằng sô c và k sao cho
lf(x)l < Clg(x)l với mọi X > k
Cần lưu ý rằng, cặp các hằng số c và k thoả mãn điều kiện trên là không duy nhất, dồng thời nếu f(x) là ()(g(x)) mà h(x) là hàm thoá mãn lg(x)l < lh(x)l với X > k thì ta cũng có f(x) là ơ(h(x))
Ví dụ 2: Cho f(x) = anxn + an_|Xn ' + + a|X + a0, với a, là các sỏ' thực (i = 0, 1, n) Khi dó f(x) = 0(x")
Thật vậy, với mọi X > 1 :
lf(x)l = lanxn + an-|Xn ' + + aỊX + aDl
< lanlxn + I V | l x n 1 + + la,lx + lac
Trang 1514 TOÁN RỜI RẠC ỨNG DUNG TRONG TIN HOC
Ví dụ 3: Cho f(n) = 1 + 2 + 3 + + n Chỉ ra f(n) là C)(n2)
Thật vậy, f(n) < n + n + n + + n = n.n = n2, nên f(n) là C)(n2) với c = k = 1
Ví dụ 4: Chỉ ra hàm n! là 0 (n n) và logn! là O(nlogn)
Thật vậy, ta có n! < nn nên nl là 0 (n n) với c = k = 1
Từ n! < nn => logn! < nlogn, vậy logn! là O(nlogn) với c = k = 1
Ví dụ 5: Hãy chi ra hàm logn là O(n)
Thật vậy, ta có n < 2n với mọi n > 1, nên logn < n (lôgarit cơ số 2) và vì vậy logn là 0(n) với c = k = 1
ớđây k = m ax(k|, k2}; c = C| + c 2; g(x) = max{lg|(x)l, lg9(x)l}
Ví dụ 7: Cho f|(x) và f2(x) đều là 0(g(x)) Khi dó
Trang 16Ví dụ 11: Giả sử f(x) là 0(g(x)) với f(x), g(x) là các hàm đơn diệu tãng
và không giới nội Chứng minh log(f(x)) là 0(log(g(x)))
Thật vậy, theo giá thiết ta có I f(x)| < C| I g(x)| với mọi X > k| Ta có thêgiá thiết f(x) > 1, g(x) > 1 với X dủ lớn, hay f(x) < Cg(x) với X đủ lcớn Lỏgarit cơ sỏ 2 bất dảng thức trên ta có
log(f(x)) < log(C|g(x)) = logCị + log(g(x)) < 21og(g(x)) với X đủ lớn Hay log(f(x)) là 0(log(g(x))
c) Độ phức tạp thuật toán
Ớ dày chúng ta chỉ để cập tới dộ phức tạp của thuật toán vé thời gian tính toán mà không để cập tới dộ phức tạp về không gian cúa thuật toán.Các phép toán dược dùng dế do dộ phức tạp thời gian của thuật toán là phép so sánh sô nguyên; các phép cộng, trừ, nhàn, chia các số nguyên; hoặc bất kỳ một phép tính sơ cấp nào khác xuất hiện trong quá trình tính toán.Cần lưu ý các thuật ngữ dùng trong dộ phức tạp thuật toán thường gặp:
- Độ phức tạp 0 ( 1 ) gọi là độ phức tạp hằng số.
- Độ phức tạp O(logn) gọi là dộ phức tạp lôgarit.
- Độ phức tạp O(n) gọi là dộ phức tạp tuyến tính.
Độ phức tạp O(nlogn) gọi là dộ phức tạp nlogn
Độ phức tạp 0 (n b) gọi là độ phức tạp da thức.
- Đ ộ phức tạp 0 (b n) (b > 1 ) gọi là dộ phức tạp hàm mũ.
- Độ phức tạp 0(n!) gọi là độ phức tạp giai thừa.
Trang 17Để minh hoạ vể độ phức tap của thuật toán ta xét một sỏ VI du sau:
Ví dụ 12: Mô ta llliuật toán tìm phán tử lớn nhát của dãy hữu hạn các sô nguvên và tìm độ phức tap cua thuật toán đó
Bước I : Đặt giá trịi c ực dại tạm thời bằng sô nguyên đấu tiên của dãy Bước 2: So sánh sổ nguyên tiếp theo với giá trị tạm thời, nếu nó lớn hưn
giá trị cực dại tạm thời thì đặt cực đại tạm thời bằng số nguyên dó
Bước 3: Lặp lại burớc 2 (nếu còn các sô nguyên trong dãy).
Bước 4: Dừng khi không còn số nguyên nào trong dãy Khi dó cực dai
tạm thời chính là sô nguvôn lern nhất trong dãy
Mô tá thuật toán tìm phần tứ lứn nhát trong dãy hữu hạn:
Procedure MAX(a,, a2, a„ : integer);
max := a,;
for i ;= 2 to n do
if max < a, then max := a,
{max là phấn tử hớn nhất}
Lưu ý: Mổi sô hạng của dãy dùng hai phép so sánh, một dô xác định
chưa đạt dến cuối dãy, một dế xác định có phải nó là giá trị lớn nhất tạm thời hay không Việc so sánh này dược dùng cho mỗi phần tứ a, trong dãv tùphần tứ thứ hai trỏ di (i = 2, 3 n) Sau dó là phép so sánh đế ra khói vònglặp, nên số phép so sánh cần dùng tất cả là 2(n - 1) + 1 dối với thuật toán trên Vậy thuật toán trên có dộ phức tạp thời gian là O(n) (dộ phức tạp
tuyên tính).
Ví dụ 13: Mô tả thuật toán xác dinh vị trí của một phần tử trong một báng liệt kê sắp thứ tự Bài toán tìm kiếm được phát biểu như sau:
Xác định vị trí của X trong bàng liệt kê các phần tử phân biệt: d|, a , an.
Dưới đây ta đé cập tới thuật toán tìm kiếm tuyến tính:
Mô tả thuật toán: Trước hết ta so sánh X với a ,, nếu X = a, thì \ ị trí là 1, còn trường hợp X * a I ta so sánh tiếp X với a2 Nếu X = a2 thì vị trí của X là 2, còn trường hợp X * a2 thi so sánh tiếp X với av Quá trình trôn được tiếp tục cho đến khi nếu X = a, (i < n) thì vị trí là i, trường hợp X * a, (Vi < n) thì X
khòng có mặt trong bảng liệt kê
TOAN RỜI RAC ỨNG DỤNG TRONG TIN HỌC
Trang 18Phàn / KIỂN THỨC B ổ TRƠ 17
Mô tá thuật toán tìm kiếm tuyến tính:
Procedure TÌM KIỀM TT (x: integer, a,, a2 an: các số nguyên phản biệt);
{location là chỉ số của số hạng bằng X (location = 0 nếu không tim dược x)}.
Lito ý: Ở mỗi bước của vòng lập trong thuật toán trên có hai phép so sánh: một dể xem đã tới cuối dãy chưa; một dể xem phần tử X có trùng với một phần tứ của bảng liệt kê hay không Cuối cùng là một phép so sánh ngoài vòng lập
Nếu X = a, thì có 2i + 1 phép so sánh dược sứ dụng Số phép so sánh lớn
nhất là 2n + 1 (khi X * a¡, i = 1,2, n) Sau dó cần một phép so sánh đểthoát khỏi vòng lặp Vậy, khi X không có mặt trong bảng thì tống sô phép so sánh trong thuật toán này là 2n + 2 Vậy độ phức tạp của thuật toán là 0(n).Xét bài toán trên trong trường hợp các phần từ trong báng dược sắp theo thứ tự tăng dần Ví dụ, tìm số 19 trong báng liệt kê theo thứ tự tăng dần: 1, 2,
3, 4 5, 6, 7, 8, 10 12, 13, 15, 16, 17, 18, 19, 20, 22 Tổng quát: Tìm X trong
báng liệt kê a,, a2, an với dị < a2 < < an.
Đé giái bài toán trên ta dùng thuật toán nhị phàn, được mô tả như sau:
So sánh X với sô hạng am ở giữa dãy (m = l(n + 1 >/21, ở dây ỊxỊ là phần nguyên lớn nhất không vượt quá x) Nếu X > am thì việc tìm kiếm X trên dãy
gồm các số hạng am+1, am+, an; còn nếu X < am thì việc tìm kiếm sẽ thực hiện trên dãy gồm các sô 'dị, a2 am Cả hai trường hợp đều dưa dến bài
toán tìm kiếm trên báng khổng lớn hơn [n/2] phần tứ Quá trình trên được thực hiện cho tới khi bảng liệt kê chi còn một phần tử và so sánh X với chính
số hạng này
Mô tả thuật toán tìm kiếm nhị phân:
Procedure TÌM KIẾM_NHLPHÂN (x : integer, a,, a2 an: integer - tăng dấn)
i := 1 {i là diểm mut trái của khoảng tìm kiếm)
j := n {j lá diểm mút phải của khoảng tim kiếm)
while i <j
begin
m := Ị(i + ])/2)
if X > am then i := m + 1 else j := m
end
; -TOAN RỜI RAC
Trang 19if X = a, then location := i
else location := 0
{location là chiỉ số của sõ hang bằng X (location = 0 nếu không tim thấy x)}.
Lưu ý: Độ phức tạp cùa thuật toán tìm kiếm nhị phán trên là O(logn) vì
nó phải dùng tới 2[logn] + 2 phép toán so sánh Như vậy, trong trường hợp báng liệt kê được sắp thứ tự thì thuật toán tìm kiếm nhị phân tốt hem thuật toán tìm kiếm tuyến tính
Đê kết thúc phần nàv ta xét thêm thuật toán Euclid
Trong lý thuyết sò n gười ta đã chứng minh dược rằng:
Nếu a = bq + r, trong dó a, b, q, r là các sô nguycn thì:
SỐ dư xuất hiện trong dãy các phép chia liên tiếp, vì dãy các số
a = rc > T| > r2 > > 0 không thế chứa quá a sô hạng Từ (*) ta suy ra:
ƯCLN(a, b) = ƯCLN(r0, r () = ƯCLN(r,, r2) =
= ƯCLN(rn 2, rn_ I) = ƯCLN(rn-j, rn) = ƯCLN(rn, 0) = rn
Vậy, ước chung lớn nhất là số dư khác 0 cuối cùng trong dãy các phép chia
Do đó ƯC1 N(414, 662) = 2 (2 là sô dư cuối cùng khác khống)
^ 8 _ TOAN RỜI RẠC ỨNG DỤNG TRONG TIN HỌC
Trang 20rh ấn l. KIẾN THỨC Bổ TRƠ 19
'ITiuật toán Euclid dược mô tả như sau:
Procedure UCLN(a, b : integer);
y ;=r
end {UCLN(a, b) là x}
Lưu ỷ: Giá trị ban dầu cúa X, y tương ứng là a và b Ó mỗi giai đoạn của thú tục X dược thay bằng y và y được thay bởi X mod y (là số dư r trong phép chia X cho y) Quá trình này dược lặp lại nếu y * 0 và thuật toán sẽ dừng khi
y = 0 Giá trị của X ớ thời điếm này là số dư khác 0 cuối cùng trong thú tục
và chính là ước số chung lớn nhất cần tìm
§2 PHƯƠNG PHÁP ĐỆ QUY
Độ quy là một khái niệm tồn tại trong cuộc sống, trong toán học trong lập trình Đệ quy cho một phương pháp ngăn gọn và sáng súa đe mô tá các dõi tượng cũng như một sò quá trình Như vậy, dệ quy là một phương pháp xác dịnh tập hợp các dôi tượng thoá mãn một ycu cáu nào dó Nó bao gồm
các quy tắc, trong dó một sô' quy tắc dùng để xác định các dối tượng ban đầu, còn quy tắc khác dùng để xác dịnh các đối tượng tiếp theo nhờ các đối tượng ban đầu đã dược xác định
Ví dụ 1: Một dãy số a0, a,, a2 a„, có tính chất: an = 0, = 2 -^ ị + 3
với mọi n > 1 Khi dó ta có thê xác dịnh được số hạng an tống quát của dãy
sô trẽn như sau:
Trước hết chọn các số ơ ị, a-, sao cho
Từ (1) suy ra an = a ,a n^ I - a ! a 9 + a I
Rõ ràng các số a I, a 2 phái thoá mãn hệ phương trình
Trang 212 0 TOÁN RỜI RẠC ỨNG DUNG TRONG TIN HOC
| « 2 = 2
Ị a , - a , a 2 = 3
Từ hệ trên ta có ngay ơ | = -3 , a 2 = 2 Đặt qn = an - otị với n > 1 Suy ra
qn = a 2.qn_| với n > 1 và q! = 6, từ đó ta có qn = qj a^-1
Vậy a„ - aj = qj aỊỊ-1, suy ra an = a , + qi a"“1 = 6.2n 1 - 3
Chương trình con đệ quy để tính sô' hạng tổng quát an được minh hoạ như sau:
Function fn(n: integer): integer;
BIGIN
if n = 0 then fn := 0
else fn := 2*fn(n-1) + 3;
END;
Ví dụ 2: Một dãy a0, d ị , a2, an, có tính chất: aQ = 0, d ị = 1,
an = an_j + an_2 với mọi n > 2, dược gọi là dãy Fibonacci Như vậy, dãy Fibonacci là dãy: 0, 1, 1, 2, 3, 5, 8, 13, 21, và với n > 2 ta có thể tìm được
số Fibonacci thứ n nếu biết sô' Fibonacci thứ n - 1 và thứ n - 2 Bàng quy nạp toán học ta dễ dàng chứng minh được rằng, với n > 0
1 í 1 + >/5 1n 1 ị i - s í ĩ )
a" = ^ l 2 J : j 5 K 2 y
Tuy nhiên công thức trên có thê tính trực tiếp như sau:
Trước hết hãy tìm một cặp sô' (X|, ct2 sao cho:
a n - c t i V , = a 2(an_ 1- a , a n_2)
=> an = (a, + a 2)an_1- a , a 2an_2
Rõ ràng các cặp sô' CX|, a 2 thoả mãn hệ phương trình
Trang 22a 2, đảng thức (1) với a " -2 và cộng lại theo từng vế ta có:
Chương trình con để tính sô' hạng tổng quát thứ n có thể được viết như sau:
Function fn(n : integer): integer;
a) Nếu học sinh A giỏi hơn học sinh B thì sô' phần thưởng của A sẽ lớn hơn hoặc bằng sô' phần thướng của B;
b) Tất cả m phần thướng đểu phải thướng hết cho học sinh
Giả sứ rằng với i < j và 1 < i, j < n thì học sinh thứ i giỏi hơn học sinh thứ j Ký hiệu sổ phần thướng mà học sinh thứ i nhận dược là Tị Từ giả thiết của bài toán ta suy ra các diều kiện sau cần dược thoả mãn:
Tị + T2 + + Tn = m;
T| > T2 > > Tn > 0
Trang 232 2 TOÁN RỜI RẠC ỨNG DỤNG TRONG TIN HỌC
Ký hiệu CHIA(m, n) là sô' cách chia m phần thướng cho n học sinh theo ycu cầu trên
Nhận xét ràng:
- Khi m = 0, tức là không có phần thưởng nào thì khi dó rõ ràng chí có duy nhất một cách chia: mỗi học sinh dược 0 phần thướng Vậy CH1A(0, n) = 1 dối với mọi n
- Khi có m phần thướng và không có học sinh giỏi, đưorng nhiên sẽ không có cách chia nào Vậy CHIA(m, 0) = 0 đối với mọi m * 0
- Khi có m phần thướng, n học sinh giỏi và m < n, khi đó n - m học sinh phía cuối sẽ không nhận dược phần thướng nào, do đó:
CHIA(m, n) = CHIA(m, m) khi m < n
- Khi có m phần thưởng, n học sinh giỏi và m > n Khi đó ta xét hai trường hợp sau:
+ Khi học sinh cuối cùng không nhận được phần thướng nào, khi đó số cách chia sẽ là CHIA(m, n - 1);
+ Khi học sinh cuối cùng nhận dược 1 phần thướng, khi đó tất cá các học sinh giỏi sẽ nhận được ít nhất 1 phần thưởng, do đó số cách chia trong trường hợp này sẽ là CHIA(m - n, n)
Tóm lại, khi có m phần thướng và n học sinh giỏi thì số cách chia sẽ là CHIA(m, n - 1) + CHIA(m - n, n)
Trên cơ sớ dó ra có thê viết một chương trình con đệ quy thế hiện thuật
toán trên như sau:
Function CHIA(m, n : integer): integer;
BEGIN
if m = 0 then CHIA := 1
else if n = 0 then CHIA := CHIA(m, m)
else CHIA := CHIA(m, n - 1) + CHIA(m - n, n) END;
Thuật toán quay lui
Bài toán: Hãy xây dựng các bộ giá trị gồm có n thành phấn (X|, x2, ., xn)
từ một tập hữu hạn cho trước, sao cho các bộ đó thoả mãn một yêu cầu B cho trước nào đó
Trang 24Phấn / KIỂN THỨC Bổ TRƠ 2 3
Phương pháp:
Xây dựng các phần tử Xị, x2, x n theo cách sau đây:
Giả sử đã xác định được k - 1 phần tử đầu tiên cúa dãy đó là X|, x2,
xk | Cần xác dịnh tiếp phần tứ xk, phần tử này được xác định theo cách sau:Giả sử Tk là tập tất cả các giá trị mà phần tứ xk có thể nhận dược Vì tập
Tk là hữu hạn nên có thế đặt nk là số phần tứ của tập Tk Khi đó có thế liệt kê các phẩn tử của Tk theo một thứ tự nào đó Tức là có thể thành lập một ánh
xạ 1 - 1 từ tập Tk lên tập {1, 2, , nk}
- Nếu k = n, khi đó bộ (X|, x2, xk_ị, xk) có đủ n thành phần và thoả
mãn yêu cầu dặt ra, do dó bộ này được đưa vào quan hệ kết quả
Xét j e 11, 2, nkỊ, ta nói rằng "j chấp nhận được" nếu có thế bổ sung phần tứ thứ j trong Tk với tư cách là phần tử xk vào dãy X), x2, , xk_ị, xk
- Nếu k < n ta cần phái thực hiện tiếp quá trình trên, tức là phải bổ sung tiếp phẩn tử xk+1 vào dãy Xị, x2, , xk_| để được dãy Xị, x2, , xk_|, xk.Như vậy, nét đặc trưng của phương pháp quay lui là ớ chỗ có được lời giải ta phái đi từng bước bằng phép thử Khi một bước lựa chọn chấp nhận cần ghi nhớ thông tin cần thiết và tiến hành bước tiếp theo Ngược lại, khi không có một lựa chọn nào được chấp nhận thì cần phải thực hiện lại bước trước, xoá bớt ghi nhớ và thứ lại với những lựa chọn còn lại
a) Thủ tục đệ quy cho thuật toán quay lui
Procedure THU (k: interger);
Var j: interger;
BEGIN
for j := 1 to nk do
if <j là chấp nhận dược> then Begin
Điều đáng quan tâm ờ đây là:
1) Làm thế nào để xác dịnh dược tập Tk, tức là tập tất cả các khả năng
mà phần tứ thứ k của dãy X|, x2 xn có thể nhận được
Trang 252 4 TOÁN RỜI RẠC ỨNG DỤNG TRONG TIN HỌC
2) Khi đã có tập Tk dê xác định xk, thấy ràng xk không những phụ thuộcvào chí số j mà còn phụ thuộc vào các X|, x2 xk_ị Vì vậy cần phải ghinhớ trạng thái cúa quá trình xác định dãy bằng một biến nhớ nào dó sau khi xác định dược xk theo j và dồng thời phái trả lại trạng thái cũ sau lời gọi
T H U (k+ l)
Ngoài thủ tục THƯ(k) nên có một thú tục gọi là khới tạo, nhằm tạo ra một sô giá trị cũng như những trạng thái cần thiết ban đầu
b) Các ví dụ minh hoạ cho thuật toán quay lui
Trong các ví dụ dưới đây bộ giá trị (Xị, x2, xn) sẽ được lưu trữ dưới dạng mảng một chiểu là x[ 1 ], x [ 2 ] , x [ n ]
Ví dụ 4: Liệt kê tất cả các hoán vị của n số tự nhiên dầu tiên
Đặt N = {1,2, , n } Khi đó một hoán vị của n số tự nhiên đầu tiên sẽ là một bộ x[ 1 ]» x[2], x[n] Trong đó x[i] * x(j] với i * j và x[i] e N Nhận thấy Tị = N Giả sử đã xác định được x[l], x[2J, , x[k—1 ], khi đó:
Tk = N - {x[l], x[2], ,x [k -l]}
Để ghi nhớ tập Tj (i = 1, ., n), ta cần sử dụng một mảng b[l n] là các giá trị boolean sao cho b[i] = true khi và chỉ khi i e Tk
Sau dây là chương trình liệt kê tất cả các hoán vị của n số tự nhiên dầu tiên
writefso phan tu ="); readln(n);
for i:= 1 to n do b[i] := true;
Trang 26¡‘hán I. KIÊN THỨC Bổ TRỢ 2 5
BEGIN
inc(d);
write ('Hoan vi thu', d:3,
for i := 1 to n do write (x(i]:4);
b[jl := false; {chuyên ve trang thai moi}
if k = n then INKQ else THU(k+1);
b[j] ;= true; {tro ve trang thai cu}
END {Hoan vi}
Ví dụ 5: Liệt kê tất cả các chuỗi nhị phân có độ dài n
Nhận thấy ràng, một chuỗi nhị phân dộ dài n có dạng x[l], x[2], x[n]
với x[i) e B (B = {0, 1}) Ta có T, = B Giả sử đã xác định dược x[lỊ,
Trang 272 6 TOÁN RỜI RẠC ỨNG DỤNG TRONG TIN HOC
write ('Chuoi thu', d:3,':');
for i := 1 to n do write (x[i]:4);
Trang 28ì ‘hàn / KIÉN THỨC Bổ TRƠ 2 7
Ví dụ 6: Bài toán đật các con hậu
Phái biểu bài toán: Cho bàn cờ hình vuông cỡ n X n Hãy liệt kê tất cá các cách xếp n con hậu trcn bàn cờ sao cho chúng không ăn được nhau Tức
là không có hai con hậu nào cùng dòng, cùng cột, cùng đường chéo nào đó cùng phưưng với dường chéo chính hoặc đường chéo phụ
Thuật toán:
Xét một bàn cờ gồm n hàng, n cột được đánh số 1, 2 n Sứ dụng chỉ
số k dê chỉ hàng và chỉ số j để chi cột Vậy: 1 < k, j < n Quy ước nếu x(k] = j thì có nghĩa con hậu ớ hàng thứ k và cột thứ j
Nhận thấy T| = N = {1, 2, , nị Giá sử đã xác định dược x[l], x[2J
x [k -l], cần xác định tiếp x[k] thoả mãn yêu cầu của bài toán Trước hết ta
có một số nhận xét:
- Bàn cờ có hai đường chéo (đường chéo chính và dường chéo phụ), khi
dó có 2n dường chéo cùng chiều với đường chéo chính Nhận thấy rằng, với hai ô bất kỳ trên cùng một đường chéo thì tổng chỉ số hàng với chỉ sô cột của các ỏ đó là như nhau, chẳng hạn cùng bằng một số i nào đó Khi đó i là chi số của đường chéo đó Rõ ràng 2 < 2n và i = k + j nếu đường chéo đó đi qua ô có toạ độ là (k, j)
Trên cơ sờ đó, có thể chọn một mảng c[2 2n] các giá trị Boolean đê ghi nhận xem đường chéo đó có thế còn đặt con hậu vào dó được không, tức là c[i] = true khi và chí khi trên trường chéo đó chưa có con hậu nào
- Tương tự thấy rằng, cũng có 2n - 1 đường chéo cùng chiều với đường chéo phụ Nhận thấy, với hai ô bất kỳ trên cùng một dường chéo thì hiệu của chi sô hàng và chi sô' cột của các ồ đó là như nhau, chẳng hạn cùng băng một sô' m nào dó Khi đó ta gọi m là chỉ số cúa dường chéo dó Rõ ràng
1 - n < m < n - l v à m = k - j nếu dường chéo dó đi qua ô có toạ dộ là (k, j)
Ta cũng chọn một mảng p[2 2n) các giá trị Boolean đê ghi nhận xem đường chéo dó có thể còn dặt con hậu vào đó được không, tức là p[m] = true khi và chi khi trên đường chéo dó chưa có con hậu nào Khi đó tập Tk là tập có thê của các chi sô' các cột mà con hậu trên hàng thứ k có thê đặt vào Như vậy, tập tất cả các giá trị mà x[k] có thể nhận là tập Tk được xác định bới biểu thức:
Tk = {j : j e N , j * x[h] với h € {1, 2 k - 1,c[k + j] = true, p[k - jj = true ị
Trang 292 8 TOÁN RỜI RẠC ỨNG DỤNG TRONG TIN HOC
Chương trình để giải bài toán:
write('Kich CO ban co'); readln(n);
for j := 1 to n do a[j] := true;
for i := 2*n do c[i] := true;
Trang 30Vhàn / KIẾN THỨC Bổ TRỢ 2 9
if a[j] and c(j+k] and p[k-j] then
Begin x[k] :=j;
Trang 313 0 TOÁN RỜI RẠC ỨNG DUNG TRONG TIN HỌC
Procedure DA_THUC (c, a0, a,, an: real);
{*ở dây giá trị cuối củng của y chính là giá trị của đa thức tại X = c*}
a) Đánh giá 3x2 + X + 1 tại X = 2 bằng cách thực hiện từng bước của thuật toán trên
b) Có bao nhiêu phép nhân và phép cộng đã dược sứ dụng đẽ đánh giá
da thức bậc n tại X = c? (không kể các phép cộng được dùng để tãng biến của vòng lập)
6 Dùng thuật toán Euclid tìm:
a ) ƯCLN(12, 18);
b) ƯCLN(1001, 1331)
7 Thuật toán nhân ma trận: Giả sử Á"*k = ¡ a j là ma trận cấp m X k với phán tử ở hàng i, cột j là aỳ Tương tự lý*" = ịb ! là ma trận cấp k X n với phần tử ở hàng i, cột j là bịj.
Khi dó Am*k.Bkx" = c m*" = ịc,j] là ma trận cấp m X n, với
k
ci j ~ X aiq^qj ■
<7=1
Thuật toán nhân ma trận có thò mỏ tá như sau:
Procedure NHAN MA„TRAN (A, B: ma trận)
for i := 1 to m do
for j := 1 to n do
begin cy:=0 for q := 1 to k do
c ij := cij + a iq^qj end {C = [c,j] là tích của A và B).
a) Có bao nhiêu phép cộng và phép nhân các số nguyên dược dùng trong thuật toán trên để nhân hai ma trận có các phần tử là các sô' nguyên?
Trang 32Phấn / KIẾN THỨC Bổ TRƠ 31
8.
b) Cho A|, A->, A3 tương ứng là các ma trận cấp 30 X 20, 20 X 40 và
40 X 10 với các phần tử đcu là s ố nguyên Hỏi phải nhân A,, A2 và A3 theo trình tự như thế nào đế số các phép nhân là ít nhất?
Ma trận logic:
Ma trận mà các phần tử là 0 hoặc I gọi là ma trận lôgic.
mxn
V BT Cho ma trận logic Am " = ¡ a j và B"1 " = ị b j Ta kỷ hiệu A
là ma trận lôgic hợp giữa Am*" với I f 1*" mà phần tử ở hàng i, cột j là
1 nếu atJ = 1 hoặc bịj = 1
lìiuật toán tính tích boole như sau:
Procedure TICH BOOLE (A, B: các ma trận logic)
a) Có bao nhiêu phép toán bit dược dùng dc tính A <B> B với A, B là các
Trang 333 2 TOÁN RỜI RẠC ỨNG DUNG TRONGTIN HỌC
input: n và dãy số a1t a2, an;
output: vị tri phấn tử có giá trị key hoặc n + 1 nếu không tìm thấy
Function Linear-Search (a, n, key);
1) Giá trị của hàm tại n = 0;
2) Công thức tính giá trị của hàm dó tại sô nguyên n từ các giá trị của
nó tại các số nguyên nhó hơn n
Định nghĩa như trên gọi là định nghĩa đệ quy
Giả sử f dược định nghĩa bằng dệ quy như sau:
12 Định nghĩa tập hợp bàng dệ quy: Trước tiên dưa ra tập xuất phát, sau dó
là quy tắc tạo các phần tứ mới từ các phần tứ đã biết của tập hợp
Định nghĩa tâp hựp A bằng dệ quy như sau:
3 e A; X + y e A nếu X và y thuộc A
Hãy chỉ ra A là tập các số nguyên chia hết cho 3
13 Tìm thuật toán đệ quy tính giá trị an với a là số thực khác không và n là
số nguyên không âm
14 T ìm thuật toán dệ quy tính ƯCLN của hai sô' nguycn a, b khòng âm
và a < b
15 Hãy biếu diễn thuật toán tìm kiếm tuyến tính như một thủ tục đệ quy
Trang 3534 TOÁN RỜI RẠC ỨNG DUNG TRONG TIN HOC
Ta ký hiệu lực lượng cúa tập A là IAI và định nghĩa:
IAI = sô' phần tứ của A
Khi dó ta có ba công thức thường gập khi phái tính sô phán tứ cùa một tập hợp:
1) IA u BI = 1AI + IBI - IA n BI;
2) I A u B u C I = IAI + IBI + ICI - IA n BI - IA n CI - IB n Cl
+ IA n B n Cl;
3) IA u B u c u DI = IAI + IBI + ICI + IDI - IA n BI - IA n Cl
- IA n DI - IB n CI - IB n DI - IC n DI
+ IA n B n CI + IA n B n DI + IA n c n DI + IB n c n DI - IA n B n c n DI
Trang 36rh án ì. KIỂN THỨC Bổ TRƠ 3 5
1.4 Tích Đề-các của các tập hợp và lực lượng của nó
• A X B = {(a, b) : a e A; b € BỊ và lực lượng của nó là
1.5 Biểu diễn các tạp hợp trên máy tính
Có nhiều cách biêu diễn lập hợp trên máy tính Dưới đày giới thiệu một cách biểu diễn tập hợp trên máy tính bằng cách lưu trữ các phần tứ cúa nó dưới dạng săp tuỳ ý các phần tứ của tập vũ trụ
Giả sử X là một tập vũ trụ và A ç X (với giả thiết dung lượng bộ nhớ của máy tính không bé hem lực lượng của X)
Giả sứ IXI = n, khi đó ta sắp (đánh số) các phần tử của X = {aj, a2, an Ị
Ta có thê’ biểu diễn tập A trên máy tính bàng một xâu bít có chiểu dài n, trong dó bit thứ i là 1 nêu a, e A, còn bít thứ i là 0 nếu a, Ể A (i = 1, n )
Ví dụ 5: Cho X = 11, 2, 3, 4, 5, 6, 7 8 9, 10} (sắp xếp các phần tứ cúa
X theo thứ tự tăng dẩn)
a) Xác dịnh xâu bít của tập A = {1,3, 5, 7, 9 Ị c X
b) Xác dịnh xâu bit cùa tập B = (2 4, 6 8, 10} c X
c) Xác dinh xâu bít các phần tử không vượt quá 5 trong X, tức là tìm xâu bít của c = ( 1, 2, 3, 4, 5}
Giải:
a) Xâu bít của tập A = {1, 3, 5, 7, 9} là 1010101010
b) Xàu bit của tập B= {2,4, 6,8, 10} là 0101010101
c) Xâu bit của tập C = 1 1 ,2 ,3 ,4 ,5 } là l i l i 1000G0
Ví dụ 6: Cho X ={ 1,2, 3, 4, 5, 6 7, 8, 9, 10} và
A = { 1 ,3 ,5 ,7 ,9 }
B = {2,4, 6, 8, 10} vàC = {1, 2, 3,4, 5} như trong ví dụ 5
Trang 373 6 TOÁN RỜI RAC ỨNG DUNG TRONG TIN HOC
a) Tim xâu bit của A U B
b) Tim xâu bit của A n B
c) Tìm xâu bit của A và B
Giải:
Xâu bit của A là 1010101010
Xäu bit của B là 0101010101
a) Xâu bit của A U B là:
- Đê nhận được xâu bit của giao hai tập hợp, ta thực hiện phép hội ( a )
hai xâu bít đó với nhau
- Để nhận được xâu bít của phần bù tập hợp A, ta chỉ việc thay 0 bới 1
và 1 bởi 0 trong xâu bít của A
Ví dụ 7: Cho X = {1, 2, 3,4, 5, 6 7, 8, 9}
A = 11 2 3 8 } ;B = {2,4, 8 ,9 } ;C = {6, 7, 8,9}.a) Tim xâu bít của A u B , A u B u C
b) Tim xâu bít của A n B, A n B n c
c) Tìm xâu bit của A, B, c
Giải:
Xâu bit của A là 111000010
Xâu bit của B là 010100011
Xâu bit của c là 000001 111
a) Xâu bit của A U B là 111100011 (hay A U B = {1, 2, 3,4, 8,9}).Xâu bit của A u B u c là 111101111
(hay A U B u c = {1,2, 3, 4, 6, 7,8,9})
Trang 38Phấn / KIỀN THỨC B ổ TRƠ 37
b) Xâu bit của A n B là 010000010 (hay A n B = | 2 , 8 | )
Xâu bit cùa A n B n c là 000000010 (hay A n B n c = {8})
c) Xâu bit của à là 000111101 ( hay à = {4, 5, 6, 7, 9Ị)
Xâu bit của B là 101011100 (hay B = {1, 3, 5,6, 7 |)
Xâu bit của C là 111110000 (hay C = {1,2, 3,4, 5})
§2 HOÁN Vị, CHỈNH HỢP VÀ Tổ HỌP
2.1 Hoán vị và chỉnh hợp
Hoán vị của một tập các đối tượng khác nhau là một cách sắp xếp có thứ
tự các đôi tượng này
Một cách sắp xếp có thứ tự r phần tử của một tập n phần tử được gọi là
chỉnh hợp chập r của tập n phán tứ Ký hiệu P(n, r) là sô chính hợp chập r
của lập n phần tử Ta có kết quá dưới đây:
Hay số hoán vị của tập gồm n phần tử là P(n, n) = n!
Ví dụ 3: Giả sứ có 8 vận dộng viên chạy thi tốc độ cự ly 2000m Người den dich dầu tiên được trao Huy chương Vàng, người đến đích thứ hai dược
Trang 393 8 TOÁN RỜI RAC ỨNG DUNG TRONG TIN HOC
trao Huy chương Bạc và người dến đích thứ ba được trao Huy chương Đồng Hỏi có bao nhiêu cách trao Huy chương Vàng, Bạc và Đồng cho 8 vận động viên trên
Giài: Số cách trao Huy chương Vàng, Bạc và Đồng cho 8 vận động viên
chính là chỉnh hợp chập 3 của 8, hay P(8, 3) = 8.7.6 = 336 cách
Ví dụ 4: Giả sử vận động viên đi xe đạp dự định di qua 8 thành phố Vận động viên bắt đầu cuộc hành trình từ một thành phố nào dó và có thể đến thành phố kia theo bất kỳ một thứ tự nào anh ta muôn Hói vận dộng viên có thể đi qua 8 thành phố này theo bao nhiêu lộ trình khác nhau?
Giải: Số lộ trình có thê giữa các thành phố bằng số hoán vị của 7 thành
phố (vì thành phố đầu tiên đã được xác định) 7 thành phố còn lại có thê có thứ tự chọn tuỳ ý Do đó có P(7, 7) = 7! = 5040 cách dê vận động có thể chọn lộ trình khác nhau cho mình
Trang 40Cụ thể là: {a, b, c }, {a, b, d }, {a, c, d }, {b, c, d }.
Ví dụ 6: Có bao nhiêu cách tuyển 5 trong sô' 10 cầu thủ cúa một dội quần vọt để di thi đấu?