1. Trang chủ
  2. » Giáo án - Bài giảng

Toán rời rạc ứng dụng trong tin học

409 877 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 409
Dung lượng 48,56 MB

Nội dung

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 1

NHÀ XUẤT/BẢN GlÁCXm JC VIỆ

G ]

& J

Trang 3

Cô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 4

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

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

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

Chươ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 8

MỤ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 9

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

PHẦ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 11

10 "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 12

Phấ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 13

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

Phá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 15

14 TOÁN RỜI RẠC ỨNG DUNG TRONG TIN HOC

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

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

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}

dụ 7: Cho f|(x) và f2(x) đều là 0(g(x)) Khi dó

Trang 16

Ví 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 18

Phà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 19

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

rh ấ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 21

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

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 22

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

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

Phấ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 25

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

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

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

Vhà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 31

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

Phấ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 33

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

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

rh á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 37

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

Phấ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!

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 39

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

Cụ thể là: {a, b, c }, {a, b, d }, {a, c, d }, {b, c, d }.

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?

Ngày đăng: 17/07/2016, 11:15

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w