1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài giảng toán rời rạc đh lâm nghiệp

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

Tiêu đề Bài Giảng Toán Rời Rạc
Tác giả ThS. Khương Thị Quỳnh
Trường học Trường Đại Học Lâm Nghiệp
Chuyên ngành Toán Rời Rạc
Thể loại bài giảng
Năm xuất bản 2019
Định dạng
Số trang 163
Dung lượng 3,43 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • Chương 1. THUẬT TOÁN (10)
    • 1.1. Khái niệm thuật toán (10)
      • 1.1.1. Định nghĩa (10)
      • 1.1.2. Các đặc trưng của thuật toán (11)
    • 1.2. Thuật toán tìm kiếm (12)
      • 1.2.1. Bài toán tìm kiếm (12)
      • 1.2.2. Thuật toán tìm kiếm tuyến tính (12)
      • 1.2.3. Thuật toán tìm kiếm nhị phân (13)
    • 1.3. Độ phức tạp của thuật toán (14)
      • 1.3.1. Khái niệm về độ phức tạp của một thuật toán (14)
      • 1.3.2. So sánh độ phức tạp của các thuật toán (16)
      • 1.3.3. Đánh giá độ phức tạp của một thuật toán (18)
    • 1.4. Số nguyên và thuật toán (20)
      • 1.4.1. Thuật toán Euclide (20)
      • 1.4.2. Biểu diễn các số nguyên (22)
      • 1.4.3. Thuật toán cho các phép tính số nguyên (23)
    • 1.5. Thuật toán đệ quy (26)
      • 1.5.1. Khái niệm đệ quy (26)
      • 1.5.2. Đệ quy và lặp (27)
  • Chương 2. BÀI TOÁN ĐẾM (32)
    • 2.1. Cơ sở của phép đếm (32)
      • 2.1.1. Những nguyên lý đếm cơ bản (32)
      • 2.1.2. Nguyên lý bù trừ (34)
    • 2.2. Nguyên lý dirichlet (36)
      • 2.2.1. Mở đầu (36)
      • 2.2.2. Nguyên lý Dirichlet tổng quát (36)
      • 2.2.3. Một số ứng dụng của nguyên lý Dirichlet (37)
    • 2.3. Chỉnh hợp va tổ hợp suy rộng (39)
      • 2.3.1. Chỉnh hợp có lặp (39)
      • 2.3.2. Tổ hợp lặp (39)
      • 2.3.3. Hoán vị của tập hợp có các phần tử giống nhau (40)
      • 2.3.4. Sự phân bố các đồ vật vào trong hộp (40)
    • 2.4. Sinh các hoán vị và tổ hợp (41)
      • 2.4.1. Sinh các hoán vị (41)
      • 2.4.2. Sinh các tổ hợp (42)
    • 2.5. Hệ thức truy hồi (43)
      • 2.5.1. Khái niệm mở đầu và mô hình hóa bằng hệ thức truy hồi (43)
      • 2.5.2. Giải các hệ thức truy hồi (44)
    • 2.6. Quan hệ chia để trị (45)
      • 2.6.1. Mở đầu (45)
      • 2.6.2. Hệ thức chia để trị (46)
  • Chương 3. ĐỒ THỊ (50)
    • 3.1. Định nghĩa và thí dụ (50)
      • 3.1.1. Định nghĩa (51)
      • 3.1.2. Định nghĩa (51)
      • 3.1.3. Định nghĩa (51)
      • 3.1.4. Định nghĩa (51)
      • 3.1.5. Định nghĩa (52)
    • 3.2. Bậc của đỉnh (53)
      • 3.2.1. Định nghĩa (53)
      • 3.2.2. Định nghĩa (53)
      • 3.2.3. Mệnh đề (53)
      • 3.2.4. Hệ quả (53)
      • 3.2.5. Mệnh đề (54)
      • 3.2.6. Định nghĩa (54)
      • 3.2.7. Định nghĩa (54)
      • 3.2.8. Mệnh đề (54)
    • 3.3. Những đơn đồ thị đặc biệt (55)
      • 3.3.1. Đồ thị đầy đủ (55)
      • 3.3.2. Đồ thị vòng (55)
      • 3.3.3. Đồ thị bánh xe (55)
      • 3.3.4. Đồ thị lập phương (56)
      • 3.3.5. Đồ thị phân đôi (đồ thị hai phe) (56)
      • 3.3.6. Một vài ứng dụng của các đồ thị đặc biệt (56)
    • 3.4. Biểu diễn đồ thị bằng ma trận và sự đẳng cấu đồ thị (59)
      • 3.4.1. Định nghĩa (59)
      • 3.4.3. Định nghĩa (60)
    • 3.5. Các đồ thị mới từ đồ thị cũ (61)
      • 3.5.1. Định nghĩa (61)
      • 3.5.2. Định nghĩa (62)
      • 3.5.3. Định nghĩa (62)
    • 3.6. Tính liên thông (63)
      • 3.6.1. Định nghĩa (63)
      • 3.6.2. Định nghĩa (63)
      • 3.6.3. Định nghĩa (64)
      • 3.6.4. Mệnh đề (64)
      • 3.6.5. Mệnh đề (64)
      • 3.6.6. Hệ quả (65)
      • 3.6.7. Mệnh đề (65)
      • 3.6.8. Mệnh đề (65)
      • 3.6.9. Định lý (65)
      • 3.6.10. Định nghĩa (66)
      • 3.6.11. Mệnh đề (67)
  • Chương 4. ĐỒ THỊ EULER VÀ ĐỒ THỊ HAMILTON (71)
    • 4.1. Đường đi euler và đồ thị euler (71)
      • 4.1.1. Định nghĩa (71)
      • 4.1.2. Định lý (72)
      • 4.1.3. Bổ đề (72)
      • 4.1.4. Hệ quả (73)
      • 4.1.5. Chú ý (74)
      • 4.1.6. Bài toán người phát thư Trung Hoa (74)
      • 4.1.7. Định lý (76)
      • 4.1.8. Bổ đề (76)
      • 4.1.9. Hệ quả (76)
    • 4.2. Đường đi hamilton và đồ thị hamilton (76)
      • 4.2.1. Định nghĩa (77)
      • 4.2.2. Định lý (Rédei) (78)
      • 4.2.3. Định lý (Dirac, 1952) (79)
      • 4.2.4. Hệ quả (80)
      • 4.2.5. Định lý (Ore, 1960) (80)
      • 4.2.6. Định lý (80)
      • 4.2.7. Bài toán sắp xếp chỗ ngồi (81)
  • Chương 5. MỘT SỐ BÀI TOÁN TỐI ƯU TRÊN ĐỒ THỊ (85)
    • 5.1. Đồ thị có trọng số và bài toán đường đi ngắn nhất (85)
      • 5.1.1. Mở đầu (0)
      • 5.1.2. Bài toán tìm đường đi ngắn nhất (85)
      • 5.1.3. Thuật toán Dijkstra (86)
      • 5.1.4. Định lý (87)
      • 5.1.5. Mệnh đề (88)
      • 5.1.6. Thuật toán Floyd (88)
      • 5.1.7. Định lý (89)
    • 5.2. Bài toán luồng cực đại (91)
      • 5.2.1. Luồng vận tải (91)
      • 5.2.2. Bài toán luồng cực đại (92)
    • 5.3. Bài toán du lịch (98)
      • 5.3.1. Giới thiệu bài toán (98)
      • 5.3.2. Phương pháp nhánh và cận (99)
      • 5.3.3. Cơ sở lý luận của phép toán (99)
      • 5.3.4. Ma trận rút gọn (99)
      • 5.3.5. Mệnh đề (100)
      • 5.3.6. Phân nhánh (100)
      • 5.3.7. Tính cận (101)
      • 5.3.8. Thủ tục ngăn chặn hành trình con (102)
      • 5.3.9. Tính chất tối ưu (102)
  • Chương 6. CÂY (108)
    • 6.1. Định nghĩa và các tính chất cơ bản (108)
      • 6.1.1. Định nghĩa (108)
      • 6.1.2. Mệnh đề (108)
      • 6.1.3. Định lý (109)
    • 6.2. Cây khung và bài toán tìm cây khung nhỏ nhất (110)
      • 6.2.1. Định nghĩa (110)
      • 6.2.2. Bài toán tìm cây khung nhỏ nhất (110)
      • 6.2.3. Thuật toán Kruskal (111)
      • 6.2.4. Thuật toán Prim (112)
    • 6.3. Cây có gốc (115)
      • 6.3.1. Định nghĩa (115)
      • 6.3.2. Định nghĩa (116)
      • 6.3.3. Định nghĩa (116)
      • 6.3.4. Mệnh đề (116)
      • 6.3.5. Mệnh đề (116)
    • 6.4. Duyệt cây nhị phân (117)
      • 6.4.1. Định nghĩa (117)
      • 6.4.2. Các thuật toán duyệt cây nhị phân (118)
      • 6.4.3. Ký pháp Ba Lan (121)
  • Chương 7. ĐỒ THỊ PHẲNG VÀ TÔ MÀU ĐỒ THỊ (127)
    • 7.1. Đồ thị phẳng (127)
      • 7.1.1. Định nghĩa (127)
      • 7.1.2. Định nghĩa (128)
      • 7.1.3. Định lý (Euler, 1752) (128)
      • 7.1.4. Hệ quả (129)
    • 7.2. Đồ thị không phẳng (129)
      • 7.2.1. Định lý (129)
      • 7.2.2. Định lý (130)
      • 7.2.4. Định lý (Kuratowski) (130)
    • 7.3. Tô màu đồ thị (131)
      • 7.3.1. Tô màu bản đồ (131)
      • 7.3.2. Tô màu đồ thị (132)
      • 7.3.3. Mệnh đề (132)
      • 7.3.4. Mệnh đề (133)
      • 7.3.5. Mệnh đề (133)
      • 7.3.6. Định lý (Định lý 5 màu của Kempe-Heawood) (133)
      • 7.3.7. Định lý (Định lý 4 màu của Appel-Haken) (134)
      • 7.3.8. Những ứng dụng của bài toán tô màu đồ thị (135)
  • Chương 8. ĐẠI SỐ BOOLE (139)
    • 8.1. Khái niệm đại số boole (139)
      • 8.1.1. Định nghĩa (139)
      • 8.1.2. Chú ý (141)
      • 8.1.3. Định lý (141)
      • 8.1.4. Chú ý (142)
    • 8.2. Hàm boole (143)
      • 8.2.1. Định nghĩa (143)
      • 8.2.2. Định nghĩa (145)
      • 8.2.3. Mệnh đề (146)
      • 8.2.4. Hệ quả (146)
      • 8.2.5. Hệ quả (146)
      • 8.2.6. Chú ý (147)
    • 8.3. Mạch lôgic (147)
      • 8.3.1. Cổng lôgic (147)
      • 8.3.2. Mạch lôgic (148)
    • 8.4. Cực tiểu hoá các mạch lôgic (153)
      • 8.4.1. Bản đồ Karnaugh (154)
      • 8.4.2. Phương pháp Quine-McCluskey (156)
  • TÀI LIỆU THAM KHẢO (163)

Nội dung

THUẬT TOÁN

Khái niệm thuật toán

Thuật toán là một bảng liệt kê các chỉ dẫn (hay quy tắc) cần thực hiện theo từng bước xác định nhằm giải một bài toán đã cho

Thuật ngữ “Algorithm” (thuật toán) có nguồn gốc từ tên nhà toán học Ả Rập Al-Khowarizmi, ban đầu được sử dụng để chỉ các quy tắc thực hiện phép tính số học trên số thập phân Vào thế kỷ 19, thuật ngữ này đã chuyển từ "algorism" sang "algorithm" Với sự phát triển của công nghệ máy tính, khái niệm thuật toán đã mở rộng, không chỉ bao gồm các thủ tục tính toán mà còn các quy trình xác định để giải quyết các bài toán phức tạp.

Có nhiều cách trình bày thuật toán như ngôn ngữ tự nhiên, sơ đồ khối và ngôn ngữ lập trình Tuy nhiên, việc sử dụng ngôn ngữ lập trình có thể làm cho mô tả thuật toán trở nên phức tạp và khó hiểu do chỉ được phép sử dụng các lệnh trong ngôn ngữ đó Hơn nữa, việc chọn một ngôn ngữ lập trình cụ thể không phải lúc nào cũng được ưa chuộng Do đó, thuật toán thường được trình bày bằng ngôn ngữ tự nhiên kết hợp với ký hiệu toán học và một dạng giả mã Giả mã đóng vai trò là bước trung gian giữa mô tả thuật toán bằng ngôn ngữ thông thường và thực hiện thuật toán trong ngôn ngữ lập trình, với các bước được chỉ rõ qua các lệnh tương tự như trong các ngôn ngữ lập trình.

Để tìm phần tử lớn nhất trong một dãy hữu hạn các số nguyên, trước tiên, khởi tạo một biến để lưu trữ giá trị lớn nhất, gán giá trị của phần tử đầu tiên trong dãy cho biến này Tiếp theo, lặp qua từng phần tử trong dãy, so sánh mỗi phần tử với giá trị hiện tại của biến lưu trữ Nếu phần tử nào lớn hơn giá trị trong biến, cập nhật biến đó với giá trị mới Cuối cùng, sau khi hoàn tất vòng lặp, giá trị trong biến sẽ là phần tử lớn nhất trong dãy.

1 Đặt giá trị cực đại tạm thời bằng số nguyên đầu tiên trong dãy (Cực đại tạm thời sẽ là số nguyên lớn nhất đã đƣợc kiểm tra ở một giai đoạn nào đó của thủ tục)

2 So sánh số nguyên tiếp sau với giá trị cực đại tạm thời, nếu nó lớn hơn giá trị cực đại tạm thời thì đặt cực đại tạm thời bằng số nguyên đó

3 Lặp lại bước trước nếu còn các số nguyên trong dãy

4 Dừng khi không còn số nguyên nào nữa trong dãy Cực đại tạm thời ở điểm này chính là số nguyên lớn nhất của dãy b) Dùng đoạn giả mã procedure max (a1, a2, , an: integers) max:= a1 for i:= 2 to n if max 1, trước tiên, ta cần chuyển n-1 đĩa từ cọc A sang cọc B, giữ nguyên đĩa thứ n ở dưới cùng của cọc A Số lần chuyển đĩa trong bước này là S(n-1) Tiếp theo, ta chuyển đĩa thứ n từ cọc A sang cọc C Cuối cùng, ta chuyển n-1 đĩa từ cọc B sang cọc C, với số lần chuyển cũng là S(n-1).

Nhƣ vậy, số lần chuyển n đĩa từ A sang C là:

Thuật toán cho trò chơi “Tháp Hà Nội” yêu cầu thực hiện 2^64 - 1 lần chuyển đĩa, tương đương khoảng 18,4 triệu triệu lần Nếu mỗi lần chuyển đĩa mất 1 giây, thời gian cần thiết để hoàn thành thuật toán sẽ lên tới khoảng 585 tỷ năm.

Thuật toán cần phải hoàn tất trong một số bước hữu hạn, nhưng nếu số bước này quá lớn, việc thực hiện thuật toán trong thực tế sẽ trở nên không khả thi.

Thuật toán trong Thí dụ 3 có độ phức tạp là n-1, được coi là một thuật toán hiệu quả và nhanh chóng Trong khi đó, thuật toán trong Thí dụ 4 có độ phức tạp khác, cho thấy sự khác biệt trong hiệu suất giữa hai thuật toán này.

2 n 1 và đó là một thuật toán không hữu hiệu (hay thuật toán chậm)

1.3.2 So sánh độ phức tạp của các thuật toán

Một bài toán thường có nhiều cách giải, có nhiều thuật toán để giải, các thuật toán đó có độ phức tạp khác nhau

Xét bài toán: Tính giá trị của đa thức P(x)=a n x n +a n-1 x n-1 + +a 1 x+a 0 tại x0

Procedure tính giá trị của đa thức (a0, a1, , an, x0: Các số thực) sum := a0 for i := 1 to n sum := sum + aix0 i

{sum là giá trị của đa thức P(x) tại x 0 }

Chú ý rằng đa thức P(x) có thể viết dưới dạng:

Ta có thể tính P(x) theo thuật toán sau:

Procedure tính giá trị của đa thức (a0, a1, , an, x0: Các số thực)

{P là giá trị của đa thức P(x) tại x0}

Để phân tích độ phức tạp của thuật toán 1, ta thấy rằng tại bước 2, với mỗi giá trị của i từ 1 đến n, thuật toán yêu cầu thực hiện 1 phép nhân và 1 phép cộng Cụ thể, khi i = 1, có 1 phép nhân và 1 phép cộng; khi i = 2, có 2 phép nhân và 1 phép cộng; và tiếp tục như vậy cho đến i = n Do đó, tổng số phép tính (nhân và cộng) mà thuật toán 1 cần thực hiện là tổng của các phép toán này.

Đối với thuật toán 2, bước 2 cần thực hiện n lần, với mỗi lần yêu cầu 2 phép tính (nhân và cộng) Do đó, tổng số phép tính (nhân và cộng) mà thuật toán 2 cần là 2n.

Khi coi thời gian thực hiện mỗi phép tính nhân và cộng là như nhau, với mỗi n cho trước, thời gian thực hiện của thuật toán 1 là n(n + 3)/2, trong khi thời gian thực hiện của thuật toán 2 là 2n.

Thời gian thực hiện thuật toán 2 ngắn hơn so với thuật toán 1 Hàm f1(n) = 2n là hàm bậc nhất, tăng chậm hơn so với hàm bậc hai f2(n) = n(n + 3)/2.

Thuật toán 2, với độ phức tạp 2^n, được coi là hiệu quả hơn so với thuật toán 1, có độ phức tạp n(n + 3)/2 Để so sánh độ phức tạp của các thuật toán, ta xem độ phức tạp như là cấp của hàm biểu diễn thời gian thực hiện của từng thuật toán.

Các hàm xét sau đây đều là hàm của biến số tự nhiên n > 0 Định nghĩa 1:

Ta nói hàm f(n) có cấp thấp hơn hay bằng hàm g(n) nếu tồn tại hằng số C >

0 và một số tự nhiên n0 sao cho:

Hàm f(n) được gọi là O(g(n)), có nghĩa là f(n) thỏa mãn quan hệ big-O với g(n) Theo định nghĩa này, g(n) là hàm đơn giản nhất đại diện cho sự biến thiên của f(n).

Khái niệm big-O, đã tồn tại trong toán học gần một thế kỷ, hiện nay được áp dụng phổ biến trong lĩnh vực tin học để phân tích thuật toán Paul Bachmann, một nhà toán học người Đức, là người đầu tiên giới thiệu khái niệm này vào năm 1892.

) 3 ( n  n là hàm bậc hai và hàm bậc hai đơn giản nhất là n 2 Ta có: f(n) 2

) 3 ( n  n  n 2 với mọi n  3 (C = 1, n0 = 3) Một cách tổng quát, nếu f(n) = akn k +ak-1n k-1 + +a1n+a0 thì f(n) = O(n k ) Thật vậy, với n > 1:

 n k (|a k |+|a k-1 |+ +|a 1 |+a 0 ) Điều này chứng tỏ |f(n)|  Cn k với mọi n > 1

Cho g(n) = 3n + 5nlog2n, ta có g(n) = O(nlog2n)

3n + 5nlog 2 n = n(3 + 5log 2 n)  n(log 2 n + 5log 2 n) = 6nlog 2 n với mọi n  8 (C = 6, n0 = 8)

Cho f1(n) = O(g1(n)) và f2(n) là O(g2(n)) Khi đó:

Theo giả thiết, tồn tại C 1 , C2, n1, n2 sao cho:

|f 1 (n)|  C 1 |g 1 (n)| và |f 2 (n)|  C 2 |g 2 (n)| với mọi n > n1 và mọi n > n2

|(f 1 + f 2 )(n)| = |f 1 (n) + f 2 (n)|  |f 1 (n)| + |f 2 (n)|  C 1 |g 1 (n)| + C 2 |g 2 (n)|  (C 1 +C 2 )g(n) với mọi n > n 0 = max(n1,n2), ở đây C = C 1 + C2 và g(n) = max(|g 1 (n)|, |g 2 (n)|)

|(f 1 f 2 )(n)| = |f 1 (n)||f 2 (n)|  C 1 |g 1 (n)|C 2 |g 2 (n)|  C 1 C 2 |(g 1 g 2 )(n)| với mọi n > n 0 = max(n 1 ,n 2 ) Định nghĩa 2: Nếu một thuật toán có độ phức tạp là f(n) với f(n) = O(g(n)) thì ta cũng nói thuật toán có độ phức tạp O(g(n))

Khi so sánh hai thuật toán giải cùng một bài toán, nếu thuật toán 1 có độ phức tạp O(g1(n)) với g1(n) thấp hơn g2(n) của thuật toán 2, thì thuật toán 1 được xem là hiệu quả và nhanh hơn thuật toán 2.

1.3.3 Đánh giá độ phức tạp của một thuật toán

1) Thuật toán tìm kiếm tuyến tính

Số nguyên và thuật toán

Phương pháp tính ước chung lớn nhất (ƯCLN) của hai số bằng cách phân tích thừa số nguyên tố không hiệu quả do thời gian tiêu tốn cho việc phân tích Một phương pháp hiệu quả hơn để tìm ƯCLN là thuật toán Euclide, đã được biết đến từ thời cổ đại Thuật toán này được đặt theo tên nhà toán học Hy Lạp Euclide, người đã mô tả nó trong cuốn sách nổi tiếng "Những yếu tố" Thuật toán Euclide dựa trên hai mệnh đề cơ bản.

Mệnh đề 1 (Thuật toán chia): Cho a và b là hai số nguyên và b  0 Khi đó tồn tại duy nhất hai số nguyên q và r sao cho: a = bq+r, 0  r < |b|

Trong đẳng thức trên, b đƣợc gọi là số chia, a đƣợc gọi là số bị chia, q đƣợc gọi là thương số và r được gọi là số dư

Khi b là nguyên dương, ta ký hiệu số dư r trong phép chia a cho b là a mod b

Mệnh đề 2: Cho a = bq + r, trong đó a, b, q, r là các số nguyên Khi đó:

(Ở đây UCLN(a,b) để chỉ ƣớc chung lớn nhất của a và b)

Giả sử a và b là hai số nguyên dương với a  b Đặt r0 = a và r1 = b Bằng cách áp dụng liên tiếp thuật toán chia, ta tìm đƣợc: r 0 = r 1 q 1 + r 2 0  r 2 < r 1 r 1 = r 2 q 2 + r 3 0  r 3 < r 2

Cuối cùng, số dư 0 sẽ xuất hiện trong dãy các phép chia liên tiếp, vì dãy các số dư a = r0 > r1 > r2 > ≥ 0 không thể chứa quá a số hạng Hơn nữa, từ Mệnh đề 2, ta có thể suy ra điều này.

UCLN(a,b) = UCLN(r 0 ,r 1 ) = UCLN(r 1 ,r 2 ) = = UCLN(r n-2 , r n-1 ) = UCLN(r n-1 ,r n ) = r n

Do đó, ƣớc chung lớn nhất là số dƣ khác không cuối cùng trong dãy các phép chia

Thí dụ 1.6: Dùng thuật toán Euclide tìm UCLN (414, 662)

Thuật toán Euclide được viết dưới dạng giả mã như sau: procedure ƢCLN (a,b: positive integers) x := a y := b while y  0 begin r := x mod y x := y y := r end

Trong thuật toán, giá trị khởi đầu của x và y lần lượt là a và b Ở mỗi bước, x được thay bằng y, và y được thay bằng x mod y Quá trình này tiếp tục cho đến khi y trở thành 0 Thuật toán kết thúc khi y = 0, và giá trị của x tại thời điểm này chính là ước chung lớn nhất của a và b.

1.4.2 Biểu diễn các số nguyên

Mệnh đề 3 khẳng định rằng với một số nguyên dương b lớn hơn 1, bất kỳ số nguyên dương n nào cũng có thể được biểu diễn duy nhất dưới dạng n = a_k b^k + a_{k-1} b^{k-1} + + a_1 b + a_0, trong đó k là số tự nhiên và a_0, a_1, , a_k là các số tự nhiên nhỏ hơn b với a_k khác 0 Biểu diễn này được gọi là khai triển của n theo cơ số b, ký hiệu là (a_k a_{k-1} a_1 a_0)_b Để xây dựng khai triển cơ số b cho một số nguyên n bất kỳ, trước tiên ta chia n cho b để tìm thương và số dư, tức là n = bq_0 + a_0, với điều kiện 0 ≤ a_0 < b.

Số dƣ a 0 chính là chữ số đứng bên phải cùng trong khai triển cơ số b của n Tiếp theo chia q0 cho b, ta đƣợc: q 0 = bq 1 + a 1 , 0  a 1 < b

Số dư a1 là chữ số thứ hai từ bên phải trong khai triển cơ số b của n Bằng cách tiếp tục chia các thương cho b, chúng ta sẽ thu được các chữ số tiếp theo trong khai triển cơ số b của n, tương ứng với các số dư Quá trình này sẽ dừng lại khi thương bằng 0.

Thí dụ 1.7: Tìm khai triển cơ số 8 của (12345) 10

The algorithm for finding the base-b expansion of a positive integer n is represented as follows: Initialize q with n and k with 0 While q is not equal to 0, calculate ak as the remainder of q when divided by b, update q by performing integer division of q by b, and increment k by 1 This process continues until q reaches 0, resulting in the base-b representation of the integer.

1.4.3 Thuật toán cho các phép tính số nguyên

Các thuật toán thực hiện phép tính với số nguyên thông qua khai triển nhị phân đóng vai trò quan trọng trong lĩnh vực số học máy tính.

Bài viết này sẽ mô tả các thuật toán cộng và nhân hai số nguyên trong biểu diễn nhị phân, đồng thời phân tích độ phức tạp tính toán của chúng dựa trên số phép toán bit thực tế được sử dụng Giả sử rằng hai số nguyên dương a và b có dạng nhị phân là: a = (a n-1 a n-2 a 1 a 0 ) 2 và b = (b n-1 b n-2 b 1 b 0 ) 2, với n bit cho mỗi số và có thể thêm các bit 0 ở đầu nếu cần thiết.

1) Phép cộng: Xét bài toán cộng hai số nguyên viết ở dạng nhị phân Thủ tục thực hiện phép cộng có thể dựa trên phương pháp thông thường là cộng cặp chữ số nhị phân với nhau (có nhớ) để tính tổng của hai số nguyên Để cộng a và b, trước hết cộng hai bit ở phải cùng của chúng, tức là: a 0 + b 0 = c 0 2 + s 0 Ở đây s0 là bit phải cùng trong khai triển nhị phân của a+b, c0 là số nhớ, nó có thể bằng 0 hoặc 1 Sau đó ta cộng hai bit tiếp theo và số nhớ: a 1 + b 1 + c 0 = c 1 2 + s 1 Ở đây s 1 là bit tiếp theo (tính từ bên phải) trong khai triển nhị phân của a+b và c1 là số nhớ Tiếp tục quá trình này bằng cách cộng các bit tương ứng trong hai khai triển nhị phân và số nhớ để xác định bit tiếp sau tính từ bên phải trong khai triển nhị phân của tổng a + b Ở giai đoạn cuối cùng, cộng a n-1 , bn-1 và cn-2 để nhận đƣợc c n-1 2+s n-1 Bit đứng đầu của tổng là s n = c n-1 Kết quả, thủ tục này tạo ra đƣợc khai triển nhị phân của tổng, cụ thể là a + b = (s n sn-1 sn-2 s1 s0)2

Thí dụ 1.8: Tìm tổng của a = (11011)2 và b = (10110)2 a 0 + b 0 = 1 + 0 = 0.2 + 1 (c 0 = 0, s 0 = 1), a 1 + b 1 + c 0 = 1 + 1 + 0

Thuật toán cộng có thể đƣợc mô tả bằng cách dùng đoạn giả mã nhƣ sau: procedure cộng (a, b: positive integers) c := 0 for j := 0 to n-1 begin d := 

{khai triển nhị phân của tổng là (sn sn-1 s1 s0) 2}

Tổng hai số nguyên được tính bằng cách cộng liên tiếp các cặp bit, kèm theo số nhớ nếu cần Việc cộng một cặp bit với số nhớ yêu cầu tối đa ba phép cộng bit Do đó, tổng số phép cộng bit sử dụng sẽ nhỏ hơn ba lần số bit trong khai triển nhị phân, dẫn đến độ phức tạp của thuật toán này là O(n).

2) Phép nhân: Xét bài toán nhân hai số nguyên viết ở dạng nhị phân Thuật toán thông thường tiến hành như sau Dùng luật phân phối, ta có: ab = a 

Để tính giá trị của ab, ta sử dụng phương trình đã nêu Đầu tiên, nếu b = 1 thì ab = a, và nếu b = 0 thì ab = 0 Mỗi lần nhân một số với 2, ta thực hiện dịch khai triển nhị phân của nó sang trái, tức là thêm một số 0 vào cuối khai triển Như vậy, (ab j )2 j có thể được tính bằng cách dịch khai triển nhị phân của abj đi j chỗ sang trái Cuối cùng, tích ab được tính bằng cách cộng các số nguyên ab j 2 j với j từ 0 đến n-1.

Thí dụ 1.9: Tìm tích của a = (110) 2 và b = (101) 2

Ta có: ab 0 2 0 = (110) 2 1.2 0 = (110) 2 , ab 1 2 1 = (110) 2 0.2 1 = (0000) 2 , ab 2 2 2

To find the product of two binary numbers (110)2 and (0000)2, we add them to obtain (11000)2 This results in ab = (11110)2 The procedure for this multiplication is outlined in the pseudocode: procedure multiply(a, b: positive integers) for j := 0 to n - 1 begin if bj = 1 then cj := a shifted j positions else cj := 0 end.

{c0, c1, , cn-1 là các tích riêng phần} p := 0 for j := 0 to n -1 p := p + c j {p là giá trị của tích ab}

Thuật toán này tính tích của hai số nguyên a và b bằng cách cộng các tích riêng phần c0, c1, c2, , cn-1 Khi bj = 1, tích riêng phần cj được tính bằng cách dịch khai triển nhị phân của a sang phải j bit Nếu bj = 0, không cần thực hiện dịch chuyển nào vì cj sẽ bằng 0.

= 0 Do đó, để tìm tất cả n số nguyên abj.2 j với j = 0, 1, , n - 1, đòi hỏi tối đa là:

Để thực hiện phép dịch chỗ trong thuật toán, số lượng dịch chuyển cần thiết là O(n²) Khi cộng các số nguyên từ ab j với j = 0 đến n - 1, ta cần thực hiện phép cộng với các số nguyên có độ dài từ n bit đến 2n bit Mỗi phép cộng này yêu cầu O(n) phép cộng bit, dẫn đến độ phức tạp tổng thể của thuật toán là O(n²).

Thuật toán đệ quy

1.5.1 Khái niệm đệ quy Đôi khi chúng ta có thể quy việc giải bài toán với tập các dữ liệu đầu vào xác định về việc giải cùng bài toán đó nhƣng với các giá trị đầu vào nhỏ hơn Chẳng hạn, bài toán tìm UCLN của hai số a, b với a > b có thể rút gọn về bài toán tìm ƢCLN của hai số nhỏ hơn, a mod b và b Khi việc rút gọn nhƣ vậy thực hiện đƣợc thì lời giải bài toán ban đầu có thể tìm đƣợc bằng một dãy các phép rút gọn cho tới những trường hợp mà ta có thể dễ dàng nhận được lời giải của bài toán

Các thuật toán đệ quy là những thuật toán giải quyết vấn đề bằng cách rút gọn liên tiếp bài toán ban đầu thành các bài toán nhỏ hơn với dữ liệu đầu vào giảm dần Chúng được áp dụng rộng rãi trong nhiều loại bài toán khác nhau.

Thí dụ 1.10: Tìm thuật toán đệ quy tính giá trị a n với a là số thực khác không và n là số nguyên không âm

Chúng ta xây dựng thuật toán đệ quy dựa trên định nghĩa đệ quy của a_n, trong đó a_n+1 = a * a_n với n > 0 và a_0 = 1 Để tính toán a_n, ta sẽ quy về các trường hợp với số mũ n nhỏ hơn, cho đến khi đạt n = 0 Cụ thể, quy trình được mô tả như sau: procedure power (a: số thực khác không; n: số nguyên không âm) nếu n = 0 thì power (a, n) := 1, ngược lại power (a, n) := a * power (a, n - 1).

Để tìm UCLN (ước chung lớn nhất) của hai số nguyên không âm a và b (với a > b) bằng thuật toán đệ quy, ta sử dụng quy tắc sau: Nếu b bằng 0, thì UCLN(a, b) bằng a Ngược lại, UCLN(a, b) được tính bằng UCLN(a mod b, b).

Thuật toán tìm kiếm tuyến tính có thể được biểu diễn dưới dạng đệ quy bằng cách so sánh giá trị x với từng phần tử trong dãy a1, a2, , an Trong bước thứ i, nếu x bằng ai, thì vị trí i là kết quả cần tìm Nếu không, quá trình tìm kiếm sẽ tiếp tục với dãy con a(i+1), , an, giảm số lượng phần tử cần kiểm tra.

Thủ tục tìm kiếm cho phép tìm số x trong dãy số từ a_i đến a_j Đầu vào của thủ tục là bộ ba (1, n, x) Quá trình tìm kiếm sẽ dừng lại khi số hạng đầu tiên của dãy là x hoặc khi dãy chỉ còn một phần tử khác x Nếu x không phải là số hạng đầu tiên và còn các số hạng khác, thủ tục sẽ tiếp tục áp dụng bằng cách xóa phần tử đầu tiên và tìm kiếm trong dãy còn lại Cụ thể, nếu a_i bằng x, vị trí của x sẽ được lưu lại, nếu không và dãy chỉ còn một phần tử, vị trí sẽ được gán là 0 Nếu dãy vẫn còn nhiều phần tử, thủ tục sẽ gọi lại chính nó với chỉ số bắt đầu tăng lên.

Thí dụ 1.13: Hãy xây dựng phiên bản đệ quy của thuật toán tìm kiếm nhị phân

Để định vị giá trị x trong dãy a1, a2, , an bằng phương pháp tìm kiếm nhị phân, ta bắt đầu bằng cách so sánh x với phần tử giữa a[(n+1)/2] Nếu hai giá trị bằng nhau, thuật toán dừng lại Ngược lại, nếu x nhỏ hơn giá trị giữa, ta tiếp tục tìm kiếm trong nửa đầu của dãy, còn nếu lớn hơn thì tìm trong nửa sau Qua đó, bài toán tìm kiếm được rút gọn thành bài toán tương tự nhưng trong dãy có độ dài giảm đi một nửa Quy trình tìm kiếm nhị phân được mô tả như sau: xác định chỉ số giữa m, so sánh x với am, và tiếp tục tìm kiếm trong khoảng thích hợp cho đến khi tìm thấy vị trí của x hoặc xác định không tồn tại.

Thí dụ 1.14: Thủ tục đệ quy sau đây cho ta giá trị của n! với n là số nguyên dương

Procedure factorial (n: positive integer) if n = 1 then factorial(n) := 1 else factorial (n) := n * factorial (n - 1)

Có thể tính hàm giai thừa của một số nguyên bằng cách sử dụng định nghĩa đệ quy Thay vì rút gọn các giá trị nhỏ hơn, ta bắt đầu từ giá trị hàm tại 1 và áp dụng định nghĩa đệ quy để tìm giá trị hàm cho các số nguyên lớn hơn Quy trình này được gọi là thủ tục lặp, với cú pháp như sau: procedure iterative factorial (n: số nguyên dương) x := 1; for i := 1 to n do x := i * x.

Để tính một dãy giá trị định nghĩa bằng đệ quy, phương pháp lặp thường ít phép tính hơn so với thuật toán đệ quy, trừ khi sử dụng máy đệ quy chuyên dụng Bài toán tính số hạng thứ n của dãy Fibonacci là một ví dụ điển hình Cụ thể, nếu n bằng 0, giá trị Fibonacci(n) là 0; nếu n bằng 1, giá trị Fibonacci(n) là 1; còn nếu n lớn hơn 1, giá trị Fibonacci(n) được tính bằng tổng của Fibonacci(n - 1) và Fibonacci(n - 2).

Theo thuật toán Fibonacci, để tính giá trị fn, ta sử dụng công thức fn = fn-1 + fn-2 Quá trình này tiếp tục bằng cách thay thế fn-1 và fn-2 bằng tổng của hai số Fibonacci bậc thấp hơn cho đến khi đạt được f0 và f1 Cuối cùng, f0 và f1 được thay thế bằng các giá trị định nghĩa của chúng Do đó, để tính fn, cần thực hiện fn+1 - 1 phép cộng.

Để tính giá trị của fn bằng phương pháp lặp, ta khởi tạo x với f0 = 0 và y với f1 = 1 Trong mỗi vòng lặp, tổng của x và y được lưu vào biến z Tiếp theo, x sẽ nhận giá trị của y, và y sẽ nhận giá trị của z Sau vòng lặp đầu tiên, ta có x = f1 và y = f0.

In the iterative Fibonacci procedure, when calculating the Fibonacci number for n greater than 1, only n-1 additions are necessary The algorithm initializes with x set to 0 and y set to 1 For each iteration from 1 to n-1, the next Fibonacci number is computed by summing x and y, then updating x to the previous value of y and y to the newly calculated sum If n equals 0, the result is directly set to 0.

Thuật toán đệ quy thường sử dụng nhiều phép toán hơn so với phương pháp lặp, nhưng vẫn được ưa chuộng trong một số trường hợp Điều này là do một số bài toán chỉ có thể giải quyết hiệu quả bằng thủ tục đệ quy, mặc dù nó có thể kém hiệu quả hơn so với thủ tục lặp.

CÂU HỎI VÀ BÀI TẬP CHƯƠNG 1

2 Định nghĩa Thuật toán đệ quy?

3 Khái niệm Độ phức tạp của thuật toán?

1 Tìm một số nguyên n nhỏ nhất sao cho f(x) là O(x n ) đối với các hàm f(x) sau: a) f(x) = 2x 3 + x 2 log x; b) f(x) = 2x 3 + (log x) 4 ; c) f(x) 1

2 Chứng minh rằng: a) x 2 + 4x + 7 là O(x 3 ), nhƣng x 3 không là O(x 2 +4x + 17); b) xlog x là O(x 2 ), nhƣng x 2 không là O(xlog x)

3 Cho một đánh giá big-O đối với các hàm cho dưới đây Đối với hàm g(x) trong đánh giá f(x) là O(g(x)), hãy chọn hàm đơn giản có bậc thấp nhất a) nlog(n 2 + 1) + n 2 logn; b) (nlogn + 1) 2 + (logn + 1)(n 2 + 1); c) n 2 n  n n 2

4 Cho Hn là số điều hoà thứ n:

Chứng minh rằng Hn là O(logn)

5 Lập một thuật toán tính tổng tất cả các số nguyên trong một bảng

6 Lập thuật toán tính x n với x là một số thực và n là một số nguyên

7 Mô tả thuật toán chèn một số nguyên x vào vị trí thích hợp trong dãy các số nguyên a 1 , a 2 , , a n xếp theo thứ tự tăng dần

8 Tìm thuật toán xác định vị trí gặp đầu tiên của phần tử lớn nhất trong bảng liệt kê các số nguyên, trong đó các số này không nhất thiết phải khác nhau

BÀI TOÁN ĐẾM

Cơ sở của phép đếm

2.1.1 Những nguyên lý đếm cơ bản

1) Quy tắc cộng: Giả sử có k công việc T 1 , T 2 , , T k Các việc này có thể làm tương ứng bằng n 1 , n 2 , , n k cách và giả sử không có hai việc nào có thể làm đồng thời Khi đó số cách làm một trong k việc đó là n 1 + n 2 + + n k

Một sinh viên có thể lựa chọn bài thực hành máy tính từ ba danh sách khác nhau, với số lượng bài là 23, 15 và 19 Theo quy tắc cộng, tổng số bài thực hành mà sinh viên có thể chọn là 23 + 15 + 19.

= 57 cách chọn bài thực hành b) Giá trị của biến m bằng bao nhiêu sau khi đoạn chương trình sau được thực hiện? m := 0 for i1 := 1 to n1 m := m + 1 for i2 := 1 to n2 m := m + 1 for ik := 1 to nk m := m + 1

Giá trị khởi tạo của m là 0, và khối lệnh này bao gồm k vòng lặp khác nhau Sau mỗi bước lặp của từng vòng lặp, giá trị của k sẽ được tăng lên một đơn vị.

Ti là quá trình thực hiện vòng lặp thứ i, với n i bước lặp Vì các vòng lặp không thể thực hiện đồng thời, giá trị cuối cùng của m được tính bằng tổng số cách thực hiện một trong các nhiệm vụ.

Quy tắc cộng trong lý thuyết tập hợp phát biểu rằng nếu A1, A2, , Ak là các tập hợp đôi một rời nhau, thì số phần tử của hợp các tập hợp này bằng tổng số phần tử của từng tập thành phần Cụ thể, nếu Ti là việc chọn một phần tử từ tập Ai với i = 1, 2, , k, thì có |Ai| cách thực hiện Ti và không có hai việc nào có thể diễn ra cùng lúc Do đó, số cách chọn một phần tử từ hợp các tập hợp này được tính bằng |A1| + |A2| + + |Ak|, theo quy tắc cộng.

2) Quy tắc nhân: Giả sử một nhiệm vụ nào đó đƣợc tách ra thành k việc

T1, T2, , Tk Nếu việc Ti có thể làm bằng ni cách sau khi các việc T1, T2, Ti-1 đã đƣợc làm, khi đó có n 1 n 2 n k cách thi hành nhiệm vụ đã cho

1) Người ta có thể ghi nhãn cho những chiếc ghế trong một giảng đường bằng một chữ cái và một số nguyên dương không vượt quá 100 Bằng cách như vậy, nhiều nhất có bao nhiêu chiếc ghế có thể đƣợc ghi nhãn khác nhau?

Thủ tục ghi nhãn cho ghế bao gồm hai bước: gán một trong 26 chữ cái và một trong 100 số nguyên dương Theo quy tắc nhân, tổng số cách gán nhãn cho một chiếc ghế là 26 x 100 = 2.600 Do đó, số ghế tối đa có thể được gán nhãn là 2.600 chiếc.

2) Có bao nhiêu xâu nhị phân có độ dài n

Mỗi bit trong xâu nhị phân có hai lựa chọn: 0 hoặc 1 Do đó, theo quy tắc nhân, tổng số xâu nhị phân khác nhau có độ dài n là 2^n.

3) Có thể tạo đƣợc bao nhiêu ánh xạ từ tập A có m phần tử vào tập B có n phần tử?

Một ánh xạ xác định từ tập hợp A đến tập hợp B là phép tương ứng mỗi phần tử của A với một phần tử của B Khi đã chọn được ảnh cho i - 1 phần tử đầu, việc chọn ảnh cho phần tử thứ i của A có n cách thực hiện Do đó, theo quy tắc nhân, tổng số ánh xạ xác định từ A đến B là n m.

4) Có bao nhiêu đơn ánh xác định trên tập A có m phần tử và nhận giá trị trên tập B có n phần tử?

Nếu số lượng phần tử trong tập A (m) lớn hơn số lượng phần tử trong tập B (n), thì sẽ có ít nhất hai phần tử trong A có cùng một ảnh, điều này chứng tỏ không tồn tại ánh xạ đơn ánh từ A đến B Ngược lại, khi m nhỏ hơn hoặc bằng n, ta có thể gán các phần tử của A là a1, a2, , am Đối với phần tử a1, có n cách chọn ảnh Vì ánh xạ là đơn ánh, phần tử a2 chỉ có n - 1 cách chọn ảnh khác với a1 Tổng quát, số cách chọn ảnh cho phần tử ak là n - k + 1 Áp dụng quy tắc nhân, ta có công thức: n(n - 1)(n - 2) (n - m + 1) = n^m.

! (  )! đơn ánh từ tập A đến tập B

5) Giá trị của biến k bằng bao nhiêu sau khi chương trình sau được thực hiện? m := 0 for i1 := 1 to n1 for i 2 := 1 to n 2 for i k := 1 to n k k := k + 1

Giá trị khởi tạo của k là 0, và k vòng lặp được lồng nhau Gọi T i là việc thực hiện vòng lặp thứ i, số lần đi qua vòng lặp tương ứng với số cách thực hiện các việc T 1, T 2, , T k Số cách thực hiện việc T j là n j (j = 1, 2, , k), với vòng lặp thứ j được duyệt qua mỗi giá trị nguyên i j từ 1 đến n j Theo quy tắc nhân, tổng số lần duyệt qua các vòng lặp lồng nhau là n 1 n 2 n k Do đó, giá trị cuối cùng của k là n 1 n 2 n k.

Nguyên lý nhân được diễn đạt bằng ngôn ngữ tập hợp như sau: Nếu A1, A2, , Ak là các tập hữu hạn, thì số phần tử của tích Descartes của các tập này bằng tích của số phần tử của từng tập thành phần Việc chọn một phần tử từ tích Descartes A1 x A2 x x Ak được thực hiện bằng cách lần lượt chọn một phần tử từ A1, một phần tử từ A2, và tiếp tục như vậy cho đến Ak.

Ak Theo quy tắc nhân ta có:

Khi hai công việc có thể thực hiện đồng thời, không thể áp dụng quy tắc cộng để tính số cách thực hiện cả hai nhiệm vụ Để xác định đúng số cách thực hiện, ta cần cộng số cách thực hiện từng công việc và sau đó trừ đi số cách thực hiện đồng thời cả hai Nguyên lý đếm này có thể được diễn đạt bằng ngôn ngữ tập hợp: cho hai tập hữu hạn A1 và A2.

Từ đó với ba tập hợp hữu hạn A1, A2, A3, ta có:

+ |A 1  A 2  A 3 | và bằng quy nạp, với k tập hữu hạn A 1 , A 2 , , A k ta có:

Trong đó, Nm (1  m  k) là tổng phần tử của tất cả các giao m tập lấy từ k tập đã cho, nghĩa là:

Để đồng nhất tập Am (1 ≤ m ≤ k) với tính chất Am trên tập vũ trụ hữu hạn U, chúng ta sẽ đếm số lượng phần tử trong U không thỏa mãn bất kỳ tính chất Am nào Gọi N là số phần tử cần đếm trong tập hợp này.

Nguyên lý bù trừ cho phép tính tổng Nm của các phần tử trong tập U thỏa mãn m tính chất từ k tính chất đã cho, giúp đơn giản hóa việc tính toán N khi các Nm dễ dàng hơn.

Nguyên lý dirichlet

Nếu một đàn chim bồ câu bay vào chuồng và số lượng chim vượt quá số ngăn của chuồng, thì ít nhất một ngăn sẽ chứa hơn một con chim Nguyên lý này có thể áp dụng cho nhiều đối tượng khác ngoài chim bồ câu và chuồng chim.

Mệnh đề (Nguyên lý): Nếu có k + 1 (hoặc nhiều hơn) đồ vật đƣợc đặt vào trong k hộp thì tồn tại một hộp có ít nhất hai đồ vật

Giả sử không có hộp nào trong k hộp chứa nhiều hơn một đồ vật, thì tổng số vật chứa trong các hộp tối đa chỉ là k Điều này mâu thuẫn với giả thiết có ít nhất k + 1 vật.

Nguyên lý Dirichlet, được đặt theo tên của nhà toán học người Đức thế kỷ 19, là một nguyên lý quan trọng mà ông đã thường xuyên áp dụng trong nghiên cứu của mình.

1) Trong bất kỳ một nhóm 367 người thế nào cũng có ít nhất hai người có ngày sinh nhật giống nhau bởi vì chỉ có tất cả 366 ngày sinh nhật khác nhau

2) Trong kỳ thi học sinh giỏi, điểm bài thi đƣợc đánh giá bởi một số nguyên trong khoảng từ 0 đến 100 Hỏi rằng ít nhất có bao nhiêu học sinh dự thi để cho chắc chắn tìm đƣợc hai học sinh có kết quả thi nhƣ nhau?

Theo nguyên lý Dirichlet, số học sinh cần tìm là 102, vì ta có 101 kết quả điểm thi khác nhau

3) Trong số những người có mặt trên trái đất, phải tìm được hai người có hàm răng giống nhau Nếu xem mỗi hàm răng gồm 32 cái nhƣ là một xâu nhị phân có chiều dài 32, trong đó răng còn ứng với bit 1 và răng mất ứng với bit

Có tổng cộng 4.294.967.296 hàm răng khác nhau, trong khi dân số thế giới đã vượt quá 5 tỷ người Theo nguyên lý Dirichlet, điều này dẫn đến một kết luận thú vị.

2.2.2 Nguyên lý Dirichlet tổng quát

Mệnh đề: Nếu có N đồ vật đƣợc đặt vào trong k hộp thì sẽ tồn tại một hộp chứa ít nhất ]N/k[ đồ vật

Giá trị của hàm trần tại số thực x, ký hiệu là ]x[, là số nguyên nhỏ nhất lớn hơn hoặc bằng x Khái niệm này đối ngẫu với giá trị của hàm sàn hay hàm phần nguyên tại x, ký hiệu là [x], là số nguyên lớn nhất nhỏ hơn hoặc bằng x.

Giả sử mỗi hộp chứa ít hơn ]N/k[ vật, tổng số đồ vật sẽ là  k (] N k [  1), dẫn đến k N k < N Điều này mâu thuẫn với giả thiết ban đầu rằng có N đồ vật cần được xếp.

1) Trong 100 người, có ít nhất 9 người sinh cùng một tháng

Xếp những người sinh cùng tháng vào một nhóm Có 12 tháng tất cả Vậy theo nguyên lý Dirichlet, tồn tại một nhóm có ít nhất ]100/12[ = 9 người

2) Có năm loại học bổng khác nhau Hỏi rằng phải có ít nhất bao nhiêu sinh viên để chắc chắn rằng có ít ra là 6 người cùng nhận học bổng như nhau

Gọi N là số sinh viên, khi đó ]N/5[ = 6 khi và chỉ khi 5 < N/5  6 hay 25 <

N  30 Vậy số N cần tìm là 26

3) Số mã vùng cần thiết nhỏ nhất phải là bao nhiêu để đảm bảo 25 triệu máy điện thoại trong nước có số điện thoại khác nhau, mỗi số có 9 chữ số (giả sử số điện thoại có dạng 0XX - 8XXXXX với X nhận các giá trị từ 0 đến 9)

Có 10 7 = 10.000.000 số điện thoại khác nhau có dạng 0XX - 8XXXXX Vì vậy, theo nguyên lý Dirichlet tổng quát, trong số 25 triệu máy điện thoại ít nhất có ]25.000.000/10.000.000[ = 3 có cùng một số Để đảm bảo mỗi máy có một số cần có ít nhất 3 mã vùng

2.2.3 Một số ứng dụng của nguyên lý Dirichlet

Nguyên lý Dirichlet có nhiều ứng dụng thú vị, trong đó việc lựa chọn đồ vật và hộp cần được thực hiện một cách khôn khéo Dưới đây là một số ví dụ minh họa cho khái niệm này.

1) Trong một phòng họp có n người, bao giờ cũng tìm được 2 người có số người quen trong số những người dự họp là như nhau

Số người quen của mỗi người trong phòng họp nhận các giá trị từ 0 đến n 

1 Rõ ràng trong phòng không thể đồng thời có người có số người quen là 0 (tức là không quen ai) và có người có số người quen là n  1 (tức là quen tất cả) Vì vậy, theo số lượng người quen, ta chỉ có thể phân n người ra thành n 1 nhóm Vậy theo nguyên lý Dirichlet tồn tai một nhóm có ít nhất 2 người, tức là luôn tìm được ít nhất 2 người có số người quen là như nhau

2) Trong một tháng gồm 30 ngày, một đội bóng chuyền thi đấu mỗi ngày ít nhất 1 trận nhƣng chơi không quá 45 trận Chứng minh rằng tìm đƣợc một giai đoạn gồm một số ngày liên tục nào đó trong tháng sao cho trong giai đoạn đó đội chơi đúng 14 trận

Gọi aj là số trận mà đội đã chơi từ ngày đầu tháng đến hết ngày j Khi đó:

Chỉnh hợp va tổ hợp suy rộng

Chỉnh hợp lặp chập k từ một tập n phần tử là cách sắp xếp có thứ tự k phần tử có thể lặp lại Nếu A là tập gồm n phần tử, thì mỗi chỉnh hợp lặp chập k là một phần tử của tập A k Hơn nữa, mỗi chỉnh hợp lặp chập k từ tập n phần tử có thể được xem như một hàm từ tập k phần tử vào tập n phần tử.

Vì vậy, số chỉnh hợp lặp chập k từ tập n phần tử là n k

Một tổ hợp lặp chập k của một tập hợp là việc chọn k phần tử không có thứ tự từ tập n phần tử, cho phép lặp lại các phần tử Điều này có nghĩa là số lượng phần tử k có thể lớn hơn n.

Mệnh đề 1: Số tổ hợp lặp chập k từ tập n phần tử bằng C n k  k  1

Mỗi tổ hợp lặp chập k từ tập n phần tử có thể được biểu diễn bằng n - 1 thanh đứng và k ngôi sao Các thanh đứng dùng để phân cách các ngăn, trong đó ngăn thứ i chứa thêm một ngôi sao mỗi khi phần tử thứ i xuất hiện trong tổ hợp Ví dụ, tổ hợp lặp chập 6 của 4 phần tử có thể được biểu diễn bằng cách sử dụng ký hiệu * * | * | | * * *, cho thấy có 2 phần tử thứ nhất, 1 phần tử thứ hai, không có phần tử thứ ba và 3 phần tử thứ tư.

Mỗi dãy n - 1 thanh và k ngôi sao tương ứng với một chuỗi nhị phân có độ dài n + k - 1 với k số 1 Số lượng các dãy n - 1 thanh và k ngôi sao chính là số tổ hợp chập k từ tập n + k - 1 phần tử, điều này cần được chứng minh.

1) Có bao nhiêu cách chọn 5 tờ giấy bạc từ một két đựng tiền gồm những tờ 1.000 đ, 2.000 đ, 5.000 đ, 10.000 đ, 20.000 đ, 50.000 đ, 100.000 đ Giả sử thứ tự mà các tờ tiền đƣợc chọn là không quan trọng, các tờ tiền cùng loại là không phân biệt và mỗi loại có ít nhất 5 tờ

Khi không xét đến thứ tự chọn tờ tiền và thực hiện đúng 5 lần, mỗi lần chọn một trong 7 loại tiền, ta có thể xem mỗi cách chọn 5 tờ tiền là một tổ hợp lặp chập 5 từ 7 phần tử Do đó, số cách chọn cần tìm là C(7+5-1, 5) = 462.

2) Phương trình x1 + x2 + x3 = 15 có bao nhiêu nghiệm nguyên không âm? Chúng ta nhận thấy mỗi nghiệm của phương trình ứng với một cách chọn

Trong bài toán này, chúng ta có 15 phần tử từ một tập hợp gồm 3 loại, với x1 phần tử loại 1, x2 phần tử loại 2 và x3 phần tử loại 3 Số nghiệm của bài toán được tính bằng số tổ hợp lặp chập 15 từ tập có 3 phần tử, tương ứng với công thức C(3, 15 + 15 - 1) = 136.

2.3.3 Hoán vị của tập hợp có các phần tử giống nhau

Trong bài toán đếm, một số phần tử có thể giống nhau Khi đó cần phải cẩn thận, tránh đếm chúng hơn một lần Ta xét thí dụ sau

Thí dụ 2.9: Có thể nhận đƣợc bao nhiêu xâu khác nhau bằng cách sắp xếp lại các chữ cái của từ SUCCESS?

Từ SUCCESS có 7 chữ cái, nhưng do có sự lặp lại của các chữ cái (3 chữ S, 2 chữ C, 1 chữ U và 1 chữ E), số hoán vị không phải là 7! mà được tính theo công thức C(7, 3) để chọn 3 vị trí cho chữ S Sau khi chọn xong, còn lại 4 vị trí trống, từ đó ta có C(4, 2) cách chọn 2 vị trí cho chữ C Chữ U và E có thể được sắp xếp lần lượt bằng C(2, 1) và C(1, 1) cách Theo nguyên lý nhân, tổng số xâu khác nhau có thể tạo ra từ từ SUCCESS là kết quả của các phép tính này.

Số hoán vị của n phần tử, trong đó có n₁ phần tử giống nhau thuộc loại 1, n₂ phần tử giống nhau thuộc loại 2, và nₖ phần tử giống nhau thuộc loại k, được tính bằng công thức: \(\frac{n!}{n_1! \cdot n_2! \cdot \cdot n_k!}\).

Chứng minh: Để xác định số hoán vị trước tiên chúng ta nhận thấy có n 1

C n cách giữ n1 chỗ cho n1 phần tử loại 1, còn lại n - n1 chỗ trống Sau đó có

Cách sắp xếp n phần tử, bao gồm n2 phần tử loại 2 và n - n1 - n2 chỗ trống, là một quá trình quan trọng trong hoán vị Tiếp theo, các phần tử thuộc loại 3, loại 4, và tiếp tục cho đến loại k - 1 sẽ được đặt vào các vị trí còn lại trong hoán vị Kết quả cuối cùng sẽ là một công thức thể hiện tổng số cách sắp xếp các phần tử này.

 cách đặt n k phần tử loại k vào hoán vị Theo quy tắc nhân tất cả các hoán vị có thể là: n 1

2.3.4 Sự phân bố các đồ vật vào trong hộp

Thí dụ 2.10: Có bao nhiêu cách chia những xấp bài 5 quân cho mỗi một trong 4 người chơi từ một cỗ bài chuẩn 52 quân?

Người đầu tiên có thể nhận được 5 quân bài từ bộ bài 52 quân với C(52, 5) cách Người thứ hai nhận 5 quân bài từ 47 quân còn lại với C(47, 5) cách Người thứ ba có thể nhận 5 quân bài từ 42 quân bài, tương ứng với C(42, 5) cách Cuối cùng, người thứ tư sẽ nhận được quân bài từ số quân bài còn lại.

5 quân bài bằng C 37 5 cách Vì vậy, theo nguyên lý nhân tổng cộng có:

5!.5!.5!.5!.32! cách chia cho 4 người mỗi người một xấp 5 quân bài

Bài toán này minh họa việc phân bố 52 quân bài vào 4 hộp cho 4 người chơi, trong khi số quân bài còn lại sẽ được để trên bàn Số cách sắp xếp các đồ vật vào hộp có thể được tính toán theo một mệnh đề cụ thể.

Mệnh đề 3: Số cách phân chia n đồ vật khác nhau vào trong k hộp khác nhau sao cho có ni vật đƣợc đặt vào trong hộp thứ i, với i = 1, 2, , k bằng:

Sinh các hoán vị và tổ hợp

Có nhiều thuật toán đã đƣợc phát triển để sinh ra n! hoán vị của tập {1, 2,

Phương pháp liệt kê các hoán vị của tập {1, 2, , n} theo thứ tự từ điển sẽ được mô tả trong bài viết này Một hoán vị a1 a2 an được coi là đi trước hoán vị b1 b2 bn nếu tồn tại một chỉ số k (1 ≤ k ≤ n) sao cho a1 = b1, a2 = b2, , ak-1.

Thuật toán sinh các hoán vị của tập {1, 2, , n} sử dụng phương pháp xây dựng hoán vị kế tiếp theo thứ tự từ điển từ một hoán vị cho trước Đầu tiên, nếu phần tử an-1 nhỏ hơn an, việc hoán đổi chúng sẽ tạo ra hoán vị mới ngay sau hoán vị đã cho Nếu tồn tại hai số nguyên aj và aj+1 sao cho aj < aj+1 và aj+1 > aj+2 > > an, ta cần tìm cặp số liền kề đầu tiên từ bên phải sang bên trái mà số đầu nhỏ hơn số sau Để tạo ra hoán vị kế tiếp, ta thay thế số tại vị trí j bằng số nhỏ nhất trong các số lớn hơn aj từ tập {aj+1, aj+2, , an}, sau đó sắp xếp các số còn lại theo thứ tự tăng dần vào các vị trí j + 1 đến n Như vậy, không có hoán vị nào nằm giữa hoán vị xuất phát và hoán vị mới tạo ra.

Thí dụ 2.11: Tìm hoán vị liền sau theo thứ tự từ điển của hoán vị 4736521

Cặp số nguyên đầu tiên từ phải qua trái có số trước nhỏ hơn số sau là a3 = 3 và a4 = 6 Số nhỏ nhất bên phải của 3 mà lớn hơn 3 là số 5, được đặt ở vị trí thứ 3 Các số 3, 6, 1, 2 được sắp xếp theo thứ tự tăng dần vào bốn vị trí còn lại Hoán vị liền sau của dãy số này là 4751236.

Để sắp xếp một hoán vị, đầu tiên xác định chỉ số j là vị trí lớn nhất mà a[j] < a[j+1] Sau đó, tìm chỉ số k sao cho a[j] > a[k], với a[k] là số nguyên nhỏ nhất bên phải a[j] Tiến hành hoán đổi a[j] và a[k] Cuối cùng, sắp xếp phần đuôi của hoán vị từ vị trí j+1 trở đi theo thứ tự tăng dần bằng cách hoán đổi các phần tử từ hai đầu của đoạn này cho đến khi r nhỏ hơn hoặc bằng s.

Làm thế nào để tạo ra tất cả các tổ hợp các phần tử của một tập hữu hạn?

Vì tổ hợp chính là một tập con, nên ta có thể dùng phép tương ứng 1 - 1 giữa các tập con của {a1, a2, , an} và xâu nhị phân độ dài n

Một xâu nhị phân độ dài n tương ứng với một số nguyên trong khoảng từ 0 đến 2^n - 1 Có tổng cộng 2^n xâu nhị phân có thể được sắp xếp theo thứ tự tăng dần dựa trên giá trị số nguyên của chúng Quy trình bắt đầu từ xâu nhị phân nhỏ nhất là 00 00 (với n số 0) Để tìm xâu nhị phân liền sau, ta xác định vị trí đầu tiên từ phải sang trái có giá trị 0, sau đó thay tất cả các số 1 bên phải vị trí đó thành 0 và đặt số 1 tại vị trí này Quy trình này được mô tả như sau: bắt đầu với xâu nhị phân khác (11 11), khởi tạo i bằng 0, và trong khi bi = 1, ta thay bi thành 0 và tăng i lên 1 Cuối cùng, ta đặt bi thành 1.

Chúng ta sẽ trình bày thuật toán tạo các tổ hợp chập k từ n phần tử {1, 2, , n} Mỗi tổ hợp chập k có thể được biểu diễn dưới dạng một xâu tăng và có thể được liệt kê theo thứ tự từ điển Để xây dựng tổ hợp liền sau tổ hợp a1a2 ak, trước tiên cần tìm phần tử đầu tiên ai trong dãy đã cho từ phải qua trái sao cho ai khác n - k + i Sau đó, thay ai bằng ai + 1 và điều chỉnh aj bằng ai + j - i + 1 với j = i + 1, i + 2, , k.

Thí dụ 2.12: Tìm tổ hợp chập 4 từ tập {1, 2, 3, 4, 5, 6} đi liền sau tổ hợp {1, 2, 5, 6}

Để tìm tổ hợp liền sau, ta bắt đầu với a2 = 2, là số hạng đầu tiên thỏa mãn điều kiện a i ≠ 6 - 4 + i Tiếp theo, ta tăng a2 lên 1 đơn vị, tức a2 = 3, và đặt a3 = 4, a4 = 5 Tổ hợp liền sau là {1, 3, 4, 5} Quy trình này được diễn đạt qua thuật toán: procedure Tổ hợp liền sau ({a1, a2, , ak}: tập con thực sự của tập {1, 2, , n} không bằng {n - k + 1, , n} với a1 < a2 < < ak) i := k, trong khi ai = n - k + i, i := i - 1, ai := ai + 1, và for j := i + 1 to k, aj := ai + j - i.

Hệ thức truy hồi

2.5.1 Khái niệm mở đầu và mô hình hóa bằng hệ thức truy hồi Đôi khi ta rất khó định nghĩa một đối tượng một cách tường minh Nhưng có thể dễ dàng định nghĩa đối tƣợng này qua chính nó Kỹ thuật này đƣợc gọi là đệ quy Định nghĩa đệ quy của một dãy số định rõ giá trị của một hay nhiều hơn các số hạng đầu tiên và quy tắc xác định các số hạng tiếp theo từ các số hạng đi trước Định nghĩa đệ quy có thể dùng để giải các bài toán đếm Khi đó quy tắc tìm các số hạng từ các số hạng đi trước được gọi là các hệ thức truy hồi Định nghĩa 1: Hệ thức truy hồi (hay công thức truy hồi) đối với dãy số

Công thức truy hồi a_n biểu diễn giá trị a_n thông qua một hoặc nhiều số hạng trước đó trong dãy Dãy số được xem là nghiệm của hệ thức truy hồi khi các số hạng của nó đáp ứng đúng hệ thức này.

1) Giả sử một người gửi 10.000 đô 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 11% mỗi năm Sau 30 năm anh ta có bao nhiêu tiền trong tài khoản của mình?

Tổng số tiền trong tài khoản sau n năm, ký hiệu là P n, được tính bằng số tiền có sau n - 1 năm cộng với lãi suất của năm thứ n Do đó, dãy {P n} thỏa mãn hệ thức truy hồi nhất định.

Pn = Pn-1 + 0,11Pn-1 = (1,11)Pn-1 với điều kiện đầu P0 = 10.000 đô la

Từ đó suy ra: Pn = (1,11) n 10.000 Thay n = 30 cho ta P30 = 228.922,97 đô la

2) Tìm hệ thức truy hồi và cho điều kiện đầu để tính số các xâu nhị phân độ dài n và không có hai số 0 liên tiếp Có bao nhiêu xâu nhị phân nhƣ thế có độ dài bằng 5?

Số các xâu nhị phân độ dài n không có hai số 0 liên tiếp được ký hiệu là a_n Để tìm ra hệ thức truy hồi cho {a_n}, ta áp dụng quy tắc cộng, cho thấy rằng số xâu nhị phân này bằng tổng số xâu kết thúc bằng 1 và số xâu kết thúc bằng 0 Đối với n ≥ 3, các xâu kết thúc bằng 1 tương ứng với a_(n-1), trong khi các xâu kết thúc bằng 0 yêu cầu bit thứ n-1 phải là 1, dẫn đến a_(n-2) Do đó, ta có công thức truy hồi a_n = a_(n-1) + a_(n-2) với điều kiện đầu a_1 = 2 và a_2 = 3.

2.5.2 Giải các hệ thức truy hồi Định nghĩa 2: 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: an = c1an-1 + c2an-2 + + ckan-k Trong đó: c 1 , c 2 , , c k là các số thực và c k  0

Theo nguyên lý quy nạp toán học, dãy số được xác định duy nhất bởi hệ thức truy hồi và k điều kiện đầu: a0 = C0, a1 = C1, , ak-1 = Ck-1.

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 a_n = r^n, với r là hằng số Nghiệm a_n = r^n tồn tại cho hệ thức truy hồi a_n = c_1 a_{n-1} + c_2 a_{n-2} + + c_k a_{n-k nếu và chỉ nếu r^n = c_1 r^{n-1} + c_2 r^{n-2} + + c_k r^{n-k Điều này dẫn đến phương trình đặc trưng r^k - c_1 r^{k-1} - c_2 r^{k-2} - - c_k = 0.

Phương trình này được gọi là phương trình đặc trưng của hệ thức truy hồi, nghiệm của nó gọi là nghiệm đặc trƣng của hệ thức truy hồi

Giả sử có các số thực c1, c2, , ck và phương trình đặc trưng rk - c1rk-1 - c2rk-2 - - ck-1r - ck = 0 có k nghiệm phân biệt r1, r2, , rk Dãy {an} là nghiệm của hệ thức truy hồi an = c1an-1 + c2an-2 + + ckan-k nếu và chỉ nếu an = α1r1^n + α2r2^n + + αkrk^n, với n = 1, 2, trong đó α1, α2, , αk là các hằng số.

1) Tìm công thức hiển của các số Fibonacci

Dãy các số Fibonacci thỏa mãn hệ thức fn = fn-1 + fn-2 và các điều kiện đầu f0 = 0 và f1 = 1 Các nghiệm đặc trƣng là r1 = 1 5

 Do đó, các số Fibonacci đƣợc cho bởi công thức f n = 1( 1 5

 ) n Các điều kiện ban đầu f 0 = 0 = 1 + 2 và f1 = 1 = 1( 1 5

 ) Từ hai phương trình này cho ta 1 = 1

5 Do đó, các số Fibonacci đƣợc cho bởi công thức hiển sau: f n = 1

2) Hãy tìm nghiệm của hệ thức truy hồi a n = 6an-1 - 11an-2 + 6an-3 với điều kiện ban đầu a 0 = 2, a1 = 5 và a2 = 15 Đa thức đặc trƣng của hệ thức truy hồi này là r 3 - 6r 2 + 11r - 6 Các nghiệm đặc trƣng là r = 1, r = 2, r = 3 Do vậy, nghiệm của hệ thức truy hồi có dạng: a n =  1 1 n +  2 2 n +  3 3 n

Các điều kiện ban đầu: a 0 = 2 =  1 +  2 +  3 a 1 = 5 =  1 +  2 2 +  3 3 a 2 = 15 =  1 +  2 4 +  3 9

Giải hệ phương trình, ta tìm được nghiệm duy nhất là 1 = 1, 2 = -1, và 3 = 2 Do đó, dãy số này thỏa mãn các điều kiện ban đầu của hệ thức truy hồi đã cho.

Quan hệ chia để trị

Các thuật toán đệ quy chia bài toán thành các bài toán nhỏ hơn, áp dụng liên tiếp cho đến khi tìm được lời giải dễ dàng Ví dụ, trong tìm kiếm nhị phân, việc tìm kiếm một phần tử trong danh sách được rút gọn đến việc tìm trong danh sách có độ dài giảm một nửa Tương tự, trong thủ tục nhân các số nguyên, bài toán được giảm xuống thành ba phép nhân với số bit giảm đi một nửa, tiếp tục cho đến khi còn lại các số nguyên có một bit Những thủ tục này được gọi là các thuật toán chia để trị.

2.6.2 Hệ thức chia để trị

Giả sử một thuật toán chia bài toán có kích thước n thành a bài toán nhỏ hơn, mỗi bài toán nhỏ có kích thước n/b, với g(n) là tổng số phép toán cần thiết để thực hiện việc phân chia Khi đó, số phép toán f(n) cần thiết để giải bài toán này sẽ thỏa mãn hệ thức truy hồi f(n) = af(n/b) + g(n).

Hệ thức này có tên là hệ thức truy hồi chia để trị

1) Thuật toán tìm kiếm nhị phân đƣa bài toán tìm kiếm cỡ n về bài toán tìm kiếm phần tử này trong dãy tìm kiếm cỡ n/2, khi n chẵn Khi thực hiện việc rút gọn cần hai phép so sánh Vì thế, nếu f(n) là số phép so sánh cần phải làm khi tìm kiếm một phần tử trong danh sách tìm kiếm cỡ n ta có f(n) = f(n/2) + 2, nếu n là số chẵn

2) Có các thuật toán hiệu quả hơn thuật toán thông thường để nhân hai số nguyên Ở đây ta sẽ có một trong các thuật toán nhƣ vậy Đó là thuật toán phân nhanh, có dùng kỹ thuật chia để trị Trước tiên ta phân chia mỗi một trong hai số nguyên 2n bit thành hai khối mỗi khối n bit Sau đó phép nhân hai số nguyên 2n bit ban đầu đƣợc thu về ba phép nhân các số nguyên n bit cộng với các phép dịch chuyển và các phép cộng

Giả sử: a và b là các số nguyên có các biểu diễn nhị phân độ dài 2n là: a = (a 2n-1 a 2n-2 a 1 a 0 ) 2 và b = (b 2n-1 b 2n-2 b 1 b 0 ) 2

Thuật toán nhân nhanh các số nguyên sử dụng đẳng thức ab = (2^2n + 2^n)A1B1 + 2^n(A1 - A0)(B0 - B1) + (2^(n + 1))A0B0 cho thấy rằng việc nhân hai số nguyên 2n bit có thể thực hiện bằng ba phép nhân các số nguyên n bit cùng với các phép cộng, trừ và dịch chuyển Điều này dẫn đến công thức f(n) = tổng các phép toán nhị phân cần thiết để nhân hai số nguyên n bit, từ đó có thể diễn đạt f(2n) = 3f(n) + Cn.

Phép nhân các số nguyên n bit yêu cầu 3f(n) phép toán nhị phân Mỗi phép cộng, trừ hoặc dịch chuyển cần một hằng số nhân với n lần các phép toán nhị phân, và Cn là tổng số phép toán nhị phân được sử dụng trong các phép toán này.

Giả sử f là một hàm tăng thỏa mãn hệ thức truy hồi f(n) = af(n/b) + c với mọi n chia hết cho b, trong đó a ≥ 1, b là số nguyên lớn hơn 1, và c là số thực dương Khi đó, hàm f(n) có thể được xác định theo công thức cụ thể.

Mệnh đề 2: Giả sử f là hàm tăng thoả mãn hệ thức truy hồi f(n) = af( n b ) + cn d với mọi n = b k , trong đó k là số nguyên dương, a  1, b là số nguyên lớn hơn

1, còn c và d là các số thực dương Khi đó: f(n) =

Thí dụ 2.16: Hãy ƣớc lƣợng số phép toán nhị phân cần dùng khi nhân hai số nguyên n bit bằng thuật toán nhân nhanh

Theo ví dụ 15.2, f(n) được xác định là 3f(n/2) + Cn khi n là số chẵn, từ đó suy ra rằng f(n) = O(n log₂3), với log₂3 ≈ 1,6 Thuật toán nhân thông thường yêu cầu O(n²) phép toán nhị phân, do đó, thuật toán nhân nhanh sẽ tỏ ra hiệu quả hơn khi xử lý các số nguyên lớn.

1 Trong tổng số 2.504 sinh viên của một khoa công nghệ thông tin, có 1.876 theo học môn ngôn ngữ lập trình Pascal, 999 học môn ngôn ngữ Fortran và 345 học ngôn ngữ C Ngoài ra còn biết 876 sinh viên học cả Pascal và Fortran, 232 học cả Fortran và C, 290 học cả Pascal và C Nếu 189 sinh viên học cả 3 môn Pascal, Fortran và C thì trong trường hợp đó có bao nhiêu sinh viên không học môn nào trong 3 môn ngôn ngữ lập trình kể trên

2 Một cuộc họp gồm 12 người tham dự để bàn về 3 vấn đề Có 8 người phát biểu về vấn đề I, 5 người phát biểu về vấn đề II và 7 người phát biểu về vấn đề III Ngoài ra, có đúng 1 người không phát biểu vấn đề nào Hỏi nhiều lắm là có bao nhiêu người phát biểu cả 3 vấn đề

3 Chỉ ra rằng có ít nhất 4 người trong số 25 triệu người có cùng tên họ viết tắt bằng 3 chữ cái sinh cùng ngày trong năm (không nhất thiết trong cùng một năm)

4 Một tay đô vật tham gia thi đấu giành chức vô địch trong 75 giờ Mỗi giờ anh ta có ít nhất một trận đấu, nhƣng toàn bộ anh ta có không quá 125 trận Chứng tỏ rằng có những giờ liên tiếp anh ta đã đấu đúng 24 trận

5 Cho n là số nguyên dương bất kỳ Chứng minh rằng luôn lấy ra được từ n số đã cho một số số hạng thích hợp sao cho tổng của chúng chia hết cho n

6 Trong một cuộc lấy ý kiến về 7 vấn đề, người được hỏi ghi vào một phiếu trả lời sẵn bằng cách để nguyên hoặc phủ định các câu trả lời tương ứng với 7 vấn đề đã nêu

Chứng minh rằng với 1.153 người được hỏi luôn tìm được 10 người trả lời giống hệt nhau

7 Có 17 nhà bác học viết thƣ cho nhau trao đổi 3 vấn đề Chứng minh rằng luôn tìm được 3 người cùng trao đổi một vấn đề

8 Trong kỳ thi kết thúc học phần toán học rời rạc có 10 câu hỏi Có bao nhiêu cách gán điểm cho các câu hỏi nếu tổng số điểm bằng 100 và mỗi câu ít nhất đƣợc 5 điểm

9 Phương trình x1 + x2 + x3 + x4 + x5 = 21 có bao nhiêu nghiệm nguyên không âm?

10 Có bao nhiêu xâu khác nhau có thể lập đƣợc từ các chữ cái trong từ

MISSISSIPI, yêu cầu phải dùng tất cả các chữ?

ĐỒ THỊ

ĐỒ THỊ EULER VÀ ĐỒ THỊ HAMILTON

MỘT SỐ BÀI TOÁN TỐI ƯU TRÊN ĐỒ THỊ

CÂY

ĐỒ THỊ PHẲNG VÀ TÔ MÀU ĐỒ THỊ

ĐẠI SỐ BOOLE

Ngày đăng: 28/06/2021, 20:01

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Nguyễn Cam, Chu Đức Khánh (1999). Lý thuyết đồ thị. Nxb Thành phố Hồ Chí Minh Sách, tạp chí
Tiêu đề: Lý thuyết đồ thị
Tác giả: Nguyễn Cam, Chu Đức Khánh
Nhà XB: Nxb Thành phố Hồ Chí Minh
Năm: 1999
2. Hoàng Chúng (1997). Đại cương về toán học hữu hạn. Nxb Giáo dục Sách, tạp chí
Tiêu đề: Đại cương về toán học hữu hạn
Tác giả: Hoàng Chúng
Nhà XB: Nxb Giáo dục
Năm: 1997
3. Phan Đình Diệu (1977). Lý thuyết Ô-tô-mat và thuật toán. Nxb Đại học và Trung học chuyên nghiệp Sách, tạp chí
Tiêu đề: Lý thuyết Ô-tô-mat và thuật toán
Tác giả: Phan Đình Diệu
Nhà XB: Nxb Đại học và Trung học chuyên nghiệp
Năm: 1977
4. Đỗ Đức Giáo (2000). Toán rời rạc. Nxb Đại học Quốc Gia, Hà Nội Sách, tạp chí
Tiêu đề: Toán rời rạc
Tác giả: Đỗ Đức Giáo
Nhà XB: Nxb Đại học Quốc Gia
Năm: 2000
5. Nguyễn Xuân Quỳnh (1995). Cơ sở toán rời rạc và ứng dụng. Nxb Giáo dục Sách, tạp chí
Tiêu đề: Cơ sở toán rời rạc và ứng dụng
Tác giả: Nguyễn Xuân Quỳnh
Nhà XB: Nxb Giáo dục
Năm: 1995
6. Đặng Huy Ruận (2000). Lý thuyết đồ thị và ứng dụng. Nxb Khoa học và Kỹ thuật Sách, tạp chí
Tiêu đề: Lý thuyết đồ thị và ứng dụng
Tác giả: Đặng Huy Ruận
Nhà XB: Nxb Khoa học và Kỹ thuật
Năm: 2000
7. Nguyễn Tô Thành, Nguyễn Đức Nghĩa (1997). Toán rời rạc. Nxb Giáo dục Sách, tạp chí
Tiêu đề: Toán rời rạc
Tác giả: Nguyễn Tô Thành, Nguyễn Đức Nghĩa
Nhà XB: Nxb Giáo dục
Năm: 1997
8. Claude Berge (1963). Théorie des graphes et ses applications. Dunod, Paris Sách, tạp chí
Tiêu đề: Théorie des graphes et ses applications
Tác giả: Claude Berge
Nhà XB: Dunod
Năm: 1963
9. Richard Johnsonbaugh (1992). Discrete Mathematics. Macmillan Publishing Company, New york Sách, tạp chí
Tiêu đề: Discrete Mathematics
Tác giả: Richard Johnsonbaugh
Nhà XB: Macmillan Publishing Company
Năm: 1992

HÌNH ẢNH LIÊN QUAN

Để tìm số nguyê nx trong bảng liệt kê a1, a2,..., an với a1 &lt; a2 &lt; ... &lt; an, ta bắt đầu bằng việc so sánh x với số hạng a m  ở giữa của dãy, với m = [(n+1)/2] - Bài giảng toán rời rạc   đh lâm nghiệp
t ìm số nguyê nx trong bảng liệt kê a1, a2,..., an với a1 &lt; a2 &lt; ... &lt; an, ta bắt đầu bằng việc so sánh x với số hạng a m ở giữa của dãy, với m = [(n+1)/2] (Trang 14)
5. Lập một thuật toán tính tổng tất cả các số nguyên trong một bảng. 6. Lập thuật toán tính x n với x là một số thực và n là một số nguyên - Bài giảng toán rời rạc   đh lâm nghiệp
5. Lập một thuật toán tính tổng tất cả các số nguyên trong một bảng. 6. Lập thuật toán tính x n với x là một số thực và n là một số nguyên (Trang 30)
Cấu trúc hình sao Cấu trúc vòng tròn Cấu trúc hỗn hợp - Bài giảng toán rời rạc   đh lâm nghiệp
u trúc hình sao Cấu trúc vòng tròn Cấu trúc hỗn hợp (Trang 57)
1) Đồ thị Hamilton (hình thập nhị diện đều biểu diẽn trong mặt phẳng) với chu trình Hamilton A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, A  (đƣờng tô đậm) - Bài giảng toán rời rạc   đh lâm nghiệp
1 Đồ thị Hamilton (hình thập nhị diện đều biểu diẽn trong mặt phẳng) với chu trình Hamilton A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, A (đƣờng tô đậm) (Trang 77)
8. Đồ thị cho trong hình sau gọi là đồ thị Peterson P. - Bài giảng toán rời rạc   đh lâm nghiệp
8. Đồ thị cho trong hình sau gọi là đồ thị Peterson P (Trang 84)
Thí dụ 5.3: Cho mạng vận tải nhƣ hình dƣới đây với khả năng thông qua đƣợc đặt trong khuyên tròn, luồng đƣợc ghi trên các cung - Bài giảng toán rời rạc   đh lâm nghiệp
h í dụ 5.3: Cho mạng vận tải nhƣ hình dƣới đây với khả năng thông qua đƣợc đặt trong khuyên tròn, luồng đƣợc ghi trên các cung (Trang 96)
nhƣ là một bài toán vận tải đặc biệt dƣới dạng bảng. Nhƣ vậy thì trong bảng (ma trận trọng số hoặc ma trận rút gọn) ta phải có đúng n ô chọn, mỗi ô chọn tƣợng  trƣng cho một cặp thành phố trên hành trình cần tìm, trên mỗi dòng và mỗi cột có  đúng một ô ch - Bài giảng toán rời rạc   đh lâm nghiệp
nh ƣ là một bài toán vận tải đặc biệt dƣới dạng bảng. Nhƣ vậy thì trong bảng (ma trận trọng số hoặc ma trận rút gọn) ta phải có đúng n ô chọn, mỗi ô chọn tƣợng trƣng cho một cặp thành phố trên hành trình cần tìm, trên mỗi dòng và mỗi cột có đúng một ô ch (Trang 100)
Thí dụ 5.5: Xét bài toán với 6 thành phố, các số liệu cho theo bảng sau: M =   595523548274612181825162105351320253011472630164327 - Bài giảng toán rời rạc   đh lâm nghiệp
h í dụ 5.5: Xét bài toán với 6 thành phố, các số liệu cho theo bảng sau: M =  595523548274612181825162105351320253011472630164327 (Trang 103)
3. Cho đồ thị có trọng số nhƣ hình dƣới đây. Hãy tìm đƣờng đi ngắn nhất từ đỉnh A đến đỉnh N - Bài giảng toán rời rạc   đh lâm nghiệp
3. Cho đồ thị có trọng số nhƣ hình dƣới đây. Hãy tìm đƣờng đi ngắn nhất từ đỉnh A đến đỉnh N (Trang 105)
BÀI TẬP CHƢƠN G5 - Bài giảng toán rời rạc   đh lâm nghiệp
5 (Trang 105)
Cây có gốc ở hình trên thƣờng đƣợc vẽ nhƣ trong hình dƣới đây để làm rõ mức của các đỉnh - Bài giảng toán rời rạc   đh lâm nghiệp
y có gốc ở hình trên thƣờng đƣợc vẽ nhƣ trong hình dƣới đây để làm rõ mức của các đỉnh (Trang 115)
Duyệt cây nhị phân T(a) trong hình trên theo hậu thứ tự: 1. Duyệt T(b)  - Bài giảng toán rời rạc   đh lâm nghiệp
uy ệt cây nhị phân T(a) trong hình trên theo hậu thứ tự: 1. Duyệt T(b) (Trang 120)
Ta vẽ một cây nhị phân nhƣ hình dƣới đây, trong đó mỗi đỉnh trong mang dấu của một phép tính trong (1), gốc của cây mang phép tính sau cùng trong (1), ở  đây là dấu nhân, ký hiệu là , mỗi lá mang một số hoặc một chữ đại diện cho số - Bài giảng toán rời rạc   đh lâm nghiệp
a vẽ một cây nhị phân nhƣ hình dƣới đây, trong đó mỗi đỉnh trong mang dấu của một phép tính trong (1), gốc của cây mang phép tính sau cùng trong (1), ở đây là dấu nhân, ký hiệu là , mỗi lá mang một số hoặc một chữ đại diện cho số (Trang 121)
Đối với cây trong hình thứ nhất, nếu duyệt theo tiền thứ tự, ta có: - Bài giảng toán rời rạc   đh lâm nghiệp
i với cây trong hình thứ nhất, nếu duyệt theo tiền thứ tự, ta có: (Trang 122)
Hình 1 Hình 2 Hình 3 - Bài giảng toán rời rạc   đh lâm nghiệp
Hình 1 Hình 2 Hình 3 (Trang 131)
Hình 1 Hình 2 Hình 3 - Bài giảng toán rời rạc   đh lâm nghiệp
Hình 1 Hình 2 Hình 3 (Trang 134)
Có thể giải bài toán lập lịch thi bằng mô hình đồ thị, với các đỉnh là các môn thi, có một cạnh nối hai đỉnh nếu có sinh viên phải thi cả hai môn đƣợc biểu diễn  bằng hai đỉnh này - Bài giảng toán rời rạc   đh lâm nghiệp
th ể giải bài toán lập lịch thi bằng mô hình đồ thị, với các đỉnh là các môn thi, có một cạnh nối hai đỉnh nếu có sinh viên phải thi cả hai môn đƣợc biểu diễn bằng hai đỉnh này (Trang 135)
7. Trong các đồ thị ở hình dƣới đây, đồ thị nào là phẳng, đồ thị nào không phẳng? Nếu đồ thị là phẳng thì có thể kẻ thêm ít nhất là bao nhiêu cạnh để đƣợc  đồ thị không phẳng?  - Bài giảng toán rời rạc   đh lâm nghiệp
7. Trong các đồ thị ở hình dƣới đây, đồ thị nào là phẳng, đồ thị nào không phẳng? Nếu đồ thị là phẳng thì có thể kẻ thêm ít nhất là bao nhiêu cạnh để đƣợc đồ thị không phẳng? (Trang 137)
Bảng sau cho giá trị của 16 hàm Boole bậ c2 phân biệt: - Bài giảng toán rời rạc   đh lâm nghiệp
Bảng sau cho giá trị của 16 hàm Boole bậ c2 phân biệt: (Trang 144)
Xét một thiết bị nhƣ hình trên, có một số đƣờng vào (dẫn tín hiệu vào) và chỉ có một đƣờng ra (phát tín hiệu ra) - Bài giảng toán rời rạc   đh lâm nghiệp
t một thiết bị nhƣ hình trên, có một số đƣờng vào (dẫn tín hiệu vào) và chỉ có một đƣờng ra (phát tín hiệu ra) (Trang 147)
Thí dụ 8.6: Xây dựng một mạch lôgic thực hiện hàm Boole cho bởi bảng sau: - Bài giảng toán rời rạc   đh lâm nghiệp
h í dụ 8.6: Xây dựng một mạch lôgic thực hiện hàm Boole cho bởi bảng sau: (Trang 149)
Theo bảng này, hàm F có dạng tổng (tuyển) chuẩn tắc hoàn toàn là: - Bài giảng toán rời rạc   đh lâm nghiệp
heo bảng này, hàm F có dạng tổng (tuyển) chuẩn tắc hoàn toàn là: (Trang 149)
nhƣ hình dƣới đây, mạch này là ghép nối của hai mạch cộng bán phần (DA) và một cổng OR - Bài giảng toán rời rạc   đh lâm nghiệp
nh ƣ hình dƣới đây, mạch này là ghép nối của hai mạch cộng bán phần (DA) và một cổng OR (Trang 152)
Từ bảng này, dễ dàng thấy rằng: s x y z. - Bài giảng toán rời rạc   đh lâm nghiệp
b ảng này, dễ dàng thấy rằng: s x y z (Trang 152)
Bản đồ Karnaugh ba biến là một hình chữ nhật đƣợc chia thành tám ô. Các ô đó biểu diễn tám hội sơ cấp có đƣợc - Bài giảng toán rời rạc   đh lâm nghiệp
n đồ Karnaugh ba biến là một hình chữ nhật đƣợc chia thành tám ô. Các ô đó biểu diễn tám hội sơ cấp có đƣợc (Trang 155)
x xyz xyz xyz - Bài giảng toán rời rạc   đh lâm nghiệp
x xyz xyz xyz (Trang 155)
Bản đồ Karnaugh bốn biến là một hình vuông đƣợc chia làm 16 ô. Cá cô này  biểu  diễn  16  hội  sơ  cấp  có  đƣợc - Bài giảng toán rời rạc   đh lâm nghiệp
n đồ Karnaugh bốn biến là một hình vuông đƣợc chia làm 16 ô. Cá cô này biểu diễn 16 hội sơ cấp có đƣợc (Trang 156)
Thuật toán đƣợc tiến hành nhƣ sau: Lập một bảng gồm nhiều cột để ghi các kết quả dán. Sau đó lần lƣợt thực hiện các bƣớc sau:  - Bài giảng toán rời rạc   đh lâm nghiệp
hu ật toán đƣợc tiến hành nhƣ sau: Lập một bảng gồm nhiều cột để ghi các kết quả dán. Sau đó lần lƣợt thực hiện các bƣớc sau: (Trang 158)
- Bƣớc 1: Viết vào cột thứ nhất các biểu diễn của các nguyên nhân hạn gn - Bài giảng toán rời rạc   đh lâm nghiệp
c 1: Viết vào cột thứ nhất các biểu diễn của các nguyên nhân hạn gn (Trang 158)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w