Specialized School book in Informatics Bài toán liệt kê Lê Minh Hoàng 1 MỤC LỤC §0 GIỚI THIỆU 2 §1 NHẮC LẠI MỘT SỐ KIẾN THỨC ĐẠI SỐ TỔ HỢP 3 I CHỈNH HỢP LẶP 3 II CHỈNH HỢP KHÔNG LẶP 3 III HOÁN VỊ 3 IV[.]
Bài tốn liệt kê \ 1[ MỤC LỤC §0 GIỚI THIỆU §1 NHẮC LẠI MỘT SỐ KIẾN THỨC ĐẠI SỐ TỔ HỢP I CHỈNH HỢP LẶP II CHỈNH HỢP KHÔNG LẶP III HOÁN VỊ IV TỔ HỢP .3 §2 PHƯƠNG PHÁP SINH (GENERATE) I SINH CÁC DÃY NHỊ PHÂN ĐỘ DÀI N .6 II LIỆT KÊ CÁC TẬP CON K PHẦN TỬ III LIỆT KÊ CÁC HOÁN VỊ .9 §3 THUẬT TOÁN QUAY LUI 12 I LIỆT KÊ CÁC DÃY NHỊ PHÂN ĐỘ DÀI N .13 II LIỆT KÊ CÁC TẬP CON K PHẦN TỬ 14 III LIỆT KÊ CÁC CHỈNH HỢP KHÔNG LẶP CHẬP K 15 IV BÀI TỐN PHÂN TÍCH SỐ .16 V BÀI TOÁN XẾP HẬU .18 §4 KỸ THUẬT NHÁNH CẬN 22 I BÀI TOÁN TỐI ƯU 22 II SỰ BÙNG NỔ TỔ HỢP .22 III MƠ HÌNH KỸ THUẬT NHÁNH CẬN 22 IV BÀI TOÁN NGƯỜI DU LỊCH 23 V DÃY ABC 25 Lê Minh Hồng Bài tốn liệt kê \ 2[ §0 GIỚI THIỆU Trong thực tế, có số toán yêu cầu rõ: tập đối tượng cho trước có đối tượng thoả mãn điều kiện định Bài tốn gọi tốn đếm cấu hình tổ hợp Trong lớp tốn đếm, có tốn cịn u cầu rõ cấu hình tìm thoả mãn điều kiện cho cấu hình Bài tốn u cầu đưa danh sách cấu hình có gọi tốn liệt kê tổ hợp Để giải toán liệt kê, cần phải xác định thuật tốn để theo xây dựng tất cấu hình quan tâm Có nhiều phương pháp liệt kê, chúng cần phải đáp ứng hai yêu cầu đây: • Khơng lặp lại cấu hình • Khơng bỏ sót cấu hình Có thể nói rằng, phương pháp liệt kê phương kế cuối để giải số toán tổ hợp Khó khăn phương pháp bùng nổ tổ hợp Để xây dựng tỷ cấu hình (con số khơng phải lớn tốn tổ hợp - Ví dụ liệt kê cách xếp n≥13 người quanh bàn tròn) giả thiết thao tác xây dựng khoảng giây, ta phải quãng 31 năm giải xong Tuy nhiên với phát triển máy tính điện tử, phương pháp liệt kê, nhiều tốn tổ hợp tìm thấy lời giải Qua đó, ta nên biết nên dùng phương pháp liệt kê khơng cịn phương pháp khác tìm lời giải Chính nỗ lực giải tốn thực tế khơng dùng phương pháp liệt kê thúc đẩy phát triển nhiều ngành toán học Cuối cùng, tên gọi sau đây, nghĩa đồng nhất, số trường hợp người ta dùng lẫn nghĩa Đó là: • Phương pháp liệt kê • Phương pháp vét cạn tập phương án • Phương pháp duyệt tồn Lê Minh Hồng Bài tốn liệt kê \ 3[ §1 NHẮC LẠI MỘT SỐ KIẾN THỨC ĐẠI SỐ TỔ HỢP Cho S tập hữu hạn gồm n phần tử k số tự nhiên Gọi X tập số nguyên dương từ đến k: X = {1, 2, , k} I CHỈNH HỢP LẶP Mỗi ánh xạ f: X → S Cho tương ứng với i ∈ X, phần tử f(i) ∈ S Được gọi chỉnh hợp lặp chập k S Nhưng X tập hữu hạn (k phần tử) nên ánh xạ f xác định qua bảng giá trị f(1), f(2), , f(k) Ví dụ: S = {A, B, C, D, E, F}; k = Một ánh xạ f cho sau: i f(i) E C E Nên người ta đồng f với dãy giá trị (f(1), f(2), , f(k)) coi dãy giá trị chỉnh hợp lặp chập k S Như ví dụ (E, C, E) chỉnh hợp lặp chập S Dễ dàng chứng minh kết sau quy nạp phương pháp đánh giá khả lựa chọn: Số chỉnh hợp lặp chập k tập gồm n phần tử: k An = nk II CHỈNH HỢP KHÔNG LẶP Khi f đơn ánh có nghĩa với ∀i, j ∈ X ta có f(i) = f(j) ⇔ i = j Nói cách dễ hiểu, dãy giá trị f(1), f(2), , f(k) gồm phần tử thuộc S khác đôi f gọi chỉnh hợp khơng lặp chập k S Ví dụ chỉnh hợp khơng lặp (C, A, E): i f(i) C A E Số chỉnh hợp không lặp chập k tập gồm n phần tử: n! A kn = n (n − 1)(n − 2) (n − k + 1) = (n − k )! III HOÁN VỊ Khi k = n Một chỉnh hợp không lặp chập n S gọi hoán vị phần tử S Ví dụ: hốn vị: (A, D, C, E, B, F) S = {A, B, C, D, E, F} i f(i) A D C E B F Để ý k = n số phần tử tập X = {1, 2, , n} số phần tử S Do tính chất đơi khác nên dãy f(1), f(2), , f(n) liệt kê hết phần tử S Như f toàn ánh Mặt khác giả thiết f chỉnh hợp khơng lặp nên f đơn ánh Ta có tương ứng 1-1 phần tử X S, f song ánh Vậy nên ta định nghĩa hoán vị S song ánh {1, 2, , n} S Số hoán vị tập gồm n phần tử = số chỉnh hợp không lặp chập n: Pn = n! IV TỔ HỢP Một tập gồm k phần tử S gọi tổ hợp chập k S Lê Minh Hồng Bài tốn liệt kê \ 4[ Lấy tập k phần tử S, xét tất k! hoán vị tập Dễ thấy hốn vị chỉnh hợp khơng lặp chập k S Ví dụ lấy tập {A, B, C} tập tập S ví dụ thì: (A, B, C), (C, A, B), (B, C, A), chỉnh hợp không lặp chập S Điều tức liệt kê tất chỉnh hợp không lặp chập k tổ hợp chập k tính k! lần Vậy: Số tổ hợp chập k tập gồm n phần tử: A kn n! C = = k! k!(n − k )! k n Số tập tập n phần tử: C 0n + C1n + + C nn = (1 + 1) n = n Lê Minh Hồng Bài tốn liệt kê \ 5[ §2 PHƯƠNG PHÁP SINH (GENERATE) Phương pháp sinh áp dụng để giải toán liệt kê tổ hợp đặt hai điều kiện sau thoả mãn: Có thể xác định thứ tự tập cấu hình tổ hợp cần liệt kê Từ xác định cấu hình cấu hình cuối thứ tự xác định Xây dựng thuật tốn từ cấu hình chưa phải cấu hình cuối, sinh cấu hình Phương pháp sinh mơ tả sau: ; repeat ; ; until ; Thứ tự từ điển Trên kiểu liệu đơn giản chuẩn, người ta thường nói tới khái niệm thứ tự Ví dụ kiểu số có quan hệ: < 2; < 3; < 10; , kiểu ký tự Char có quan hệ 'A' < 'B'; 'C' < 'c' Xét quan hệ thứ tự toàn phần "nhỏ bằng" ký hiệu "≤" tập hợp S, quan hệ hai ngơi thoả mãn bốn tính chất: Với ∀a, b, c ∈ S • Tính phổ biến: Hoặc a ≤ b, b ≤ a; • Tính phản xạ: a ≤ a • Tính phản đối xứng: Nếu a ≤ b b ≤ a bắt buộc a = b • Tính bắc cầu: Nếu có a ≤ b b ≤ c a ≤ c Trong trường hợp a ≤ b a ≠ b, ta dùng ký hiệu "