Bài giảng Toán rời rạc - Bài 3: Bài toán liệt kê tổ hợp

14 116 0
Bài giảng Toán rời rạc - Bài 3: Bài toán liệt kê tổ hợp

Đ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

Bài giảng Toán rời rạc - Bài 3: Bài toán liệt kê tổ hợp giới thiệu bài toán liệt kê tổ hợp; trình bày thuật toán quay lui; liệt kê một số cấu hình cơ bản. Để nắm chi tiết hơn nội dung kiến thức, mời các bạn cùng tham khảo bài giảng.

Bài 3: Bài toán liệt kê tổ hợp BÀI 3: BÀI TOÁN LIỆT KÊ TỔ HỢP Giới thiệu Bài học trình bày nội dung tốn liệt kê tổ hợp, toán quan tâm đến tất cấu hình có, lời giải cần biểu diễn dạng thuật tốn “vét cạn” tất cấu hình Lời giải trường hợp cụ thể máy tính giải nhờ chạy chương trình cài đặt theo thuật tốn tìm Bài tốn liệt kê thường “làm nền” cho nhiều toán khác Hiện nay, số tốn tổ hợp chưa có cách giải ngồi cách giải liệt kê Khó khăn cách giải có q nhiều cấu hình, nhiên tính khả thi phương pháp liệt kê ngày nâng cao nhờ tiến nhanh chóng chất lượng máy tính điện tử Nội dung Mục tiêu  Giới thiệu toán liệt kê tổ hợp Sau học này, bạn có thể:  Nắm yêu cầu toán liệt kê tổ hợp  Sử dụng thuật toán quay lui việc thực toán liệt kê tổ hợp  Liệt kê số câu hình như: liệt kê dãy nhị phân, liệt kê hoán vị, liệt kê tổ hợp Sử dụng kiến thức toán liệt kê việc giải số tình thực tế  Trình bày thuật tốn quay lui  Liệt kê số cấu hình Thời lượng học  tiết v1.0 69 Bài 3: Bài toán liệt kê tổ hợp TÌNH HUỐNG DẪN NHẬP Tình “Tìm cách xếp quân Hậu bàn cờ Vua cho khơng có qn ăn qn nào” Câu hỏi Có cách xếp hậu thỏa mãn yêu cầu tốn cách nào? 70 v1.0 Bài 3: Bài toán liệt kê tổ hợp 3.1 Giới thiệu toán Bài toán liệt kê tổ hợp nhằm đưa cấu hình cho khơng bỏ sót khơng trùng lặp Như vậy, khác với cách giải thơng thường, trình bày lập luận, chứng minh, hay tính tốn qua cơng thức, lời giải tốn phải trình bày dạng thuật tốn, bước xây dựng cấu hình thỏa mãn điều kiện nêu Vào thời chưa có máy tính, máy tính cịn dạng sơ khai, việc liệt kê chủ yếu nhờ vào sức thủ cơng, kết hạn chế Khi đó, việc liệt kê thực tốn kích thước không đáng kể, nhằm minh họa số khái niệm hay kiểm chứng vài kết đơn giản Hiện nay, với phát triển mạnh mẽ máy tính, tốc độ lên tới hàng triệu phép tính giây, việc liệt kê nhờ máy tính ngày khả thi giải pháp liệt kê ngày ý, nhờ mà số toán tồn đọng hàng kỷ giải Với hỗ trợ máy tính, tốn liệt kê thường làm để giải toán tổ hợp khác (các toán đếm, tồn tại, tối ưu) tình khơng cịn lựa chọn tốt Khó khăn tốn số cấu hình thường lớn mà việc chờ đợi kết vượt khả thực thi máy tính Để khắc phục khó khăn này, mặt người cố gắng xây dựng thuật toán hữu hiệu, mặt nâng cao khả xử lý máy tính Việc nghiên cứu chế tạo máy tính có nhiều xử lý đồng thời với việc phát triển giải thuật song song chắn nâng cao tính khả thi tốn liệt kê lên nhiều Bài giới thiệu thuật tốn mang tính phổ dụng tốn hữu hạn cho phép liệt kê cấu hình cách cài đặt chương trình máy tính 3.2 Thuật tốn quay lui Thuật tốn quay lui thực chất thuật toán duyệt tất khả xây dựng cấu hình cho khơng bỏ sót khơng trùng lặp Thơng thường cấu hình biểu diễn dạng có thứ tự (x1, x2, , xn), thành phần xác định từ tập giá trị (hữu hạn) đấy, thỏa mãn điều kiện đề Nội dung thuật toán quay lui xác định thành phần cấu hình thành phần Để xác định thành phần, ta thử tất giá trị cho trạng thái thành phần trước xác định Vì thế, thích hợp phát biểu thuật toán quy nạp Giả sử xác định thành phần x1, x2, , xi − Dưới bước xác định thành phần xi (bước thử thứ i) Gọi Si tập giá trị thử cho xi (gọi tập đề cử, xác định từ điều kiện cấu hình) Duyệt tất giá trị j thuộc Si thử cho xi Xảy hai tình huống:  Có j mà việc thử cho xi chấp nhận (dựa vào điều kiện cấu hình) Khi gán j cho xi Nếu i = n (xi thành phần cuối) liệt kê cấu hình (sau duyệt j tiếp, hết, lùi lại bước trước để thử giá trị khác cho xn − 1), trái lại sang bước i + để xác định thành phần  Mọi j thuộc Si khơng chấp nhận Khi lùi bước trước để thử giá trị khác cho xi − v1.0 71 Bài 3: Bài toán liệt kê tổ hợp Để khơng bỏ sót, tập giá trị đề cử Si cho xi cần phải xem xét cách cẩn thận, giá trị đề cử chấp nhận được, bỏ sót giá trị đề cử dẫn đến bỏ sót cấu hình Để khơng trùng lặp, bước tìm kiếm, ta phải lưu lại thông tin cần thiết để lùi lại, không thử giá trị thử Những thông tin cần cất giữ theo chế vào sau, trước (ngăn xếp) Để cài đặt, tốt dùng ngơn ngữ lập trình cho phép gọi đệ quy Với ngôn ngữ này, ta tận dụng chế ngăn xếp việc đệ quy mà tự tổ chức lấy ngăn xếp Điều làm việc viết chương trình trở nên đơn giản nhiều Hiện ngôn ngữ thuật tốn cài đặt máy tính C, Pascal có khả Nội dung thuật tốn quay lui mơ tả qua thủ tục đệ quy (viết mô theo ngôn ngữ Pascal): Thuật toán quay lui PROCEDURE TRY (i: INTEGER); VAR j: INTEGER; BEGIN FOR (j thuộc Si) DO IF (chấp nhận j) THEN BEGIN xi := j; IF (i = n) THEN TRY(i+1); END; END; (ghi nhận cấu hình) ELSE Thủ tục TRY(i) xác định xi cách duyệt tất giá trị đề cử cho (vịng lặp FOR) Trong thủ tục có khai báo biến địa phương j dùng để duyệt giá trị đề cử (không tính tổng qt, ta giả thiết giá trị nguyên) Khi xác định xong xi, việc tiến hành bước tiếp thực lời gọi đệ quy TRY(i+1) Khi xong vòng lặp duyệt, thủ tục TRY(i) kết thúc, trở vòng lặp duyệt TRY(i−1) để tiếp tục thử giá trị đề cử khác cho xi−1 Vòng lặp đệ quy lồng TRY(i) 72 v1.0 Bài 3: Bài toán liệt kê tổ hợp Trong TRY(i), mệnh đề (chấp nhận j) biểu thức lôgic, phụ thuộc j mà nhiều tình cịn phụ thuộc vào giá trị thử bước trước, để tính biểu thức này, ta cần tổ chức thêm biến phụ (được khai báo toàn cục) ghi nhận thay đổi trạng thái toán sau bước tìm kiếm (vì biến gọi biến trạng thái) Độ phức tạp biến phụ thuộc vào độ phức tạp cấu hình cần liệt kê Nếu có mặt biến vậy, TRY(i) cần thêm vào khối lệnh (ghi nhận trạng thái mới), (trả trạng thái cũ), nhằm cập nhật lại giá trị biến nơi thích hợp, đề nghị đây: Vịng lặp đệ quy lồng Try(i) PROCEDURE TRY (i: INTEGER); VAR j: INTEGER; BEGIN FOR (j thuộc Si) DO IF (chấp nhận j) THEN BEGIN xi := j; (ghi nhận trạng thái mới); IF (i = n) THEN (ghi nhận cấu hình) ELSE TRY(i+1); (trả trạng thái cũ); END; END; TRY(i) khởi động lời gọi TRY(1) chương trình Khi TRY(1) kết thúc, q trình liệt kê hoàn tất Dĩ nhiên, trước gọi TRY(1), chương trình cần phải gọi thủ tục nhập liệu khởi gán giá trị ban đầu Cũng nên thiết kế thủ tục làm nhiệm vụ (ghi nhận cấu hình) gọi TRY(i), nhằm xử lý cấu hình nhận cho phù hợp với u cầu tốn (có thể đưa hình, ghi file, áp dụng thao tác cấu hình này) Chẳng hạn, dùng liệt kê để giải tốn đếm, thủ tục đơn giản tăng biến đếm lên đơn vị (biến đếm cần khởi gán 0), cần chứng minh có cấu hình (bài tốn tồn tại), nhận cấu hình đầu tiên, ta kết thúc Thứ tự liệt kê cấu hình phụ thuộc vào thứ tự duyệt giá trị đề cử cho thành phần Thông thường giá trị đề cử xếp tăng dần, biểu diễn cấu hình xếp theo thứ tự từ điển Tên gọi thuật toán quay lui, xuất phát từ nội dung Thuật toán biết đến với tên gọi thuật toán thử-sai Cũng ý rằng, mơ hình có tính chất định hướng cho việc xây dựng chương trình thực thuật tốn quay lui Nội dung cụ thể phụ thuộc vào kết phân tích cấu hình, việc tổ chức liệu để mơ tả cấu hình, việc xác định tập đề cử, việc xây dựng biến trạng thái biểu thức kiểm tra giá trị thử, đóng vai trò quan trọng việc định chất lượng chương trình Ngồi việc nắm vững ngơn ngữ dùng, người lập trình cần phải có kiến thức toán học định, liên quan đến vấn đề xét v1.0 73 Bài 3: Bài toán liệt kê tổ hợp Mục đưa số thí dụ minh họa việc dùng thuật toán quay lui để liệt kê số cấu hình đơn giản, chương trình cài đặt theo khn dạng sau: Ví dụ: Thuật tốn quay lui PROCEDURE INIT; PROCEDURE OUT; PROCEDURE TRY(i: INTEGER); BEGIN (* chương trình chính*) INIT; TRY(1); END Thủ tục INIT nhập liệu khởi gán giá trị ban đầu, thủ tục OUT đếm đưa cấu hình x1, x2, , xn xây dựng xong, thủ tục TRY(i) thực việc xác định xi đệ quy Trong thủ tục trên, thủ tục TRY(i) quan trọng Vì thí dụ minh họa, chủ yếu chúng tơi trình bày việc phân tích thiết kế thủ tục 3.3 Liệt kê số cấu hình đơn giản 3.3.1 Liệt kê dãy nhị phân Một dãy nhị phân độ dài n (còn gọi chuỗi n bit) có thứ tự gồm n thành phần (x1, x2, , xn) thành phần xi nhận hai giá trị 0, Trong toán đếm ta biết số dãy nhị phân độ dài n 2n, ta giải toán liệt kê tất dãy nhị phân độ dài n cách viết chương trình theo mơ hình cài đặt Theo định nghĩa dãy nhị phân, giá trị đề cử cho xi {0, 1}, việc chọn giá trị hay cho thành phần chấp nhận, không phụ thuộc vào giá trị thành phần trước Đây trường hợp mà TRY(i) có dạng đơn giản nhất, khơng có khối (chấp nhận j), (ghi nhận trạng thái mới), (trả trạng thái cũ) Thuật tốn tìm kiếm quay lui dãy nhị phân PROCEDURE TRY (i: INTEGER); VAR j: INTEGER; BEGIN FOR j := TO DO BEGIN xi := j; IF (i = n) THEN OUT ELSE TRY(i+1); END; END; 74 v1.0 Bài 3: Bài toán liệt kê tổ hợp Các bước tìm kiếm quay lui dãy nhị phân độ dài mơ tả liệt kê đây: 0 1 1 1 Kết chạy chương trình với n = 3, ta 23 = dãy nhị phân theo thứ tự sau: 1) 0 5) 0 2) 0 7) 1 3) 8) 1 4) 1 9) 1 3.3.2 Liệt kê hoán vị Một hoán vị phần tử 1, 2, , n cách xếp thứ tự phần tử Như ta biểu diễn hốn vị xét có thứ tự gồm n thành phần (x1, x2, , xn) thành phần xi lấy giá trị khác tập {1, 2, , n} Từ nhận tập đề cử cho xi {1, 2, , n} điều kiện chấp nhận j cho xi j không trùng với giá trị gán cho thành phần trước (j chưa dùng) Để kiểm tra điều kiện này, ta xây dựng biến lôgic bj (j = 1, 2, , n), đóng vai trị biến trạng thái, biến bj kiểm sốt trạng thái j với quy ước bj TRUE j chưa dùng bj FALSE trái lại Khi đó, mệnh đề (chấp nhận j) (bj) câu lệnh (ghi nhận trạng thái mới), (trả trạng thái cũ) tương ứng với lệnh gán (bj := FALSE) (bj := TRUE) Các biến trạng thái bj cần phải khởi gán tất TRUE trước gọi TRY(1) Thuật tốn tìm kiếm quay lui hoán vị PROCEDURE TRY (i: INTEGER); VAR j: INTEGER; BEGIN FOR j := TO n DO IF (bj) THEN BEGIN xi := j; bj := FALSE; IF (i = n) THEN OUT ELSE TRY(i+1); bj := TRUE; END; END; Các bước tìm kiếm quay lui hốn vị độ dài mơ tả liệt kê đây: v1.0 75 Bài 3: Bài toán liệt kê tổ hợp 2 3 3 Kết chạy chương trình với n = 3, ta 3! = hoán vị theo thứ tự sau: 1) 4) 2) 5) 3) 7) 3.3.3 Liệt kê tổ hợp Một tổ hợp chập m n phần tử {1, 2, , n} (m ≤ n) tập m phần tử tập cho Mỗi tập biểu diễn dạng không kể thứ tự (x1, x2, , xm) gồm m thành phần nhận giá trị khác từ tập {1, 2, , n} Như thành phần phải ràng buộc thêm điều kiện: ≤ x1 < x2 < < xm ≤ n Nhận xét để điều kiện thỏa mãn, cần đủ bước thử thứ i (i = 1, 2, , m) giá trị xi phải thỏa mãn: xi−1+1 ≤ xi ≤ n−m+i (bổ sung x0 = 0) từ nhận tập đề cử cho xi {xi−1+1, , n−m+i} giá trị thuộc tập chấp nhận Với tập đề cử chọn, TRY(i) trở thành đơn giản giống trường hợp liệt kê dãy nhị phân PROCEDURE TRY (i: INTEGER); VAR j: INTEGER; BEGIN FOR j := xi−1+1 TO n−m+i DO BEGIN xi := j; IF (i = m) THEN OUT ELSE TRY(i+1); END; END; Các bước tìm kiếm quay lui tổ hợp chập mơ tả liệt kê đây: 3 4 Kết chạy chương trình với m = 2, n = ta C42  tổ hợp theo thứ tự sau: 1) 2) 3) 76 4) 5) 6) v1.0 Bài 3: Bài toán liệt kê tổ hợp 3.4 Một số liệt kê khác Trong mục này, ta xét số tốn liệt kê có liên quan đến quân cờ mà việc xây dựng cấu hình chúng thí dụ điển hình thuật tốn quay lui 3.4.1 Bài toán xếp Hậu Nội dung tốn sau: “Tìm cách xếp qn Hậu bàn cờ Vua cho khơng có qn ăn quân nào” Lời giải tìm kiếm cách xếp dần quân Hậu, cho quân Hậu xếp khơng nằm vị trí bị qn Hậu xếp khống chế Nếu khơng tìm vị trí vậy, cần xếp lại quân Hậu trước Thực chất cách giải thử tất vị trí để xếp Hậu cần thiết quay lui Rõ ràng cách giải áp dụng cho kích thước n (bàn cờ n×n n quân Hậu) đưa tất cách xếp Ta lập chương trình, theo mơ hình quay lui trình bày, liệt kê tất cách xếp Hậu, thỏa mãn điều kiện nêu, với kích thước n cho trước Đầu tiên việc biểu diễn cách xếp Hậu Đánh số cột dòng bàn cờ từ đến n Vì qn Hậu ăn theo dịng nên dịng xếp quân Hậu (quân Hậu i bầy vào dòng i, i = 1, 2, , n) Như vị trí quân Hậu xác định biết tọa độ cột chúng Điều gợi ý biểu diễn cách xếp Hậu có thứ tự (x1, x2, , xn) xi tọa độ cột quân Hậu i Khi đó, tập đề cử cho xi {1, 2, , n} Giá trị j thử cho xi chấp nhận ô (i, j) không bị quân Hậu trước chiếu đến (còn tự do) Trạng thái ô (i, j) cần xác định trước thử giá trị j cho xi Điều thực cách tổ chức biến trạng thái thích hợp, suy từ luật ăn quân quân Hậu (ngang, dọc hai đường chéo): j n đường chéo x+y = i+j i ● đường chéo x−y = i−j n Các ô bị khống chế quân Hậu ô (i, j) Để ô (i, j) tự do, cần hội điều kiện: dòng i tự do, cột j tự hai đường chéo qua (i, j) tự Các dịng khơng cần xét dịng có quân Hậu Để kiểm soát cột, ta đưa vào biến lơgic a1, a2, , an aj TRUE cột j tự FALSE trái lại Các đường chéo có hai dạng: phương trình x + y = k phương trình x − y = k (x tọa độ dòng, y tọa độ cột, k số) Với đường chéo dạng x + y = k, giá trị k biến thiên từ đến 2n, để kiểm soát đưa vào biến lơgic b2, b3, , b2n bk TRUE đường chéo tự FALSE trái lại Với đường chéo dạng x − y = k, v1.0 77 Bài 3: Bài toán liệt kê tổ hợp giá trị k biến thiên từ − n đến n − 1, để kiểm sốt đưa vào biến lơgic c1−n, c2−n, , cn−1 (chú ý giá trị số âm) ck TRUE đường chéo tự FALSE trái lại Khi điều kiện (chấp nhận j cho xi) biểu thức lôgic (aj AND bi+j AND ci−j), câu lệnh (ghi nhận trạng thái mới) lệnh gán (aj: = FALSE; bi+j: = FALSE; ci−j: = FALSE) câu lệnh (trả trạng thái cũ) lệnh gán (aj: = TRUE; bi+j: = TRUE; ci−j: = TRUE) Các biến trạng thái aj (j = 1, , n), bk (k = 2, , 2n), ck (k = 1−n, , n−1) cần khởi gán TRUE trước gọi TRY(1) PROCEDURE TRY (i: INTEGER); VAR j: INTEGER; BEGIN FOR j := TO n DO IF (aj AND bi+j AND ci−j) THEN BEGIN xi := j; aj := FALSE; bi+j := FALSE; ci−j := FALSE; IF (i = n) THEN OUT ELSE TRY(i+1); aj := TRUE; bi+j := TRUE; ci−j := TRUE; END; END; Các bước tìm kiếm quay lui cách xếp quân Hậu bàn cờ kích thước mơ tả liệt kê đây: 2 1 4 Kết chạy chương trình với n = ta cách xếp Hậu theo thứ tự sau: ● ● ● ● ● ● ● ● 1) (2, 4, 1, 3) 2) (3, 1, 4, 2) Với n = (bàn cờ thơng thường), chương trình cho 92 lời giải Cách xếp tìm là: 78 v1.0 Bài 3: Bài toán liệt kê tổ hợp ● ● ● ● ● ● ● ● (1, 5, 8, 6, 3, 7, 2, 4) Nếu quan tâm đến số cách xếp Hậu, ta chạy chương trình với số giá trị n kết đây: 3.4.2 n 10 11 12 13 14 số cách 10 40 92 352 724 2680 14200 73712 365596 Bài toán Mã tuần Một hành trình quân Mã gọi tuần hành trình đó, Mã qua tất ô bàn cờ, ô lần Hãy liệt kê tất hành trình tuần Mã bàn cờ kích thước n với ô xuất phát (u, v) Biểu diễn hành trình Mã ma trận vng h kích thước n, h(i, j), 1≤ i, j ≤ n, k bước thứ k, Mã nhảy đến ô (i, j) (xem bước thứ nhất, Mã đứng ô xuất phát) ● 8 vị trí mà Mã nhảy đến Từ ơ, Mã nhẩy đến vị trí xung quanh hình vẽ, ta phải thử Ô nhẩy đến chấp nhận nằm phạm vi bàn cờ Mã chưa qua Ta kiểm sốt trạng thái việc khởi gán h(i, j) với 1≤ i, j ≤ n ngoại trừ h(u, v) (ô xuất phát), ngồi ta viền xung quanh bàn cờ cột bên trái (j = 0, −1), cột bên phải (j = n, n + 1), dòng bên (i = 0, −1) dòng bên (i = n, n + 1) ô “giả” h gán giá trị khác (chẳng hạn 1) Khi điều kiện chấp nhận ô (x, y) cho Mã h(x, y) v1.0 79 Bài 3: Bài toán liệt kê tổ hợp Thủ tục đệ quy TRY cần tổ chức tham số: (x, y) vị trí Mã đứng k số thứ tự ô mà Mã định nhẩy đến Thủ tục xác định vị trí Mã tương ứng với giá trị k Khi k = n2 Mã hồn tất hành trình Lời gọi khởi động thủ tục TRY chương trình TRY(u, v, 2) Các vị trí mà Mã nhẩy đến từ (x, y) tính theo độ lệch dịng dx = (dx1, dx2, , dx8), độ lệch cột dy = (dy1, dy2, , dy8) thành phần chúng số xác định trước Chẳng hạn, theo cách đánh số hình vẽ, ta có dx = (−1, −2, −2, −1, 1, 2, 2, 1) dy = (2, 1, −1, −2, −2, −1, 1, 2) PROCEDURE TRY (x, y, k: INTEGER); VAR j: INTEGER; BEGIN FOR j := TO DO IF h(x + dxj, y + dyj) = THEN BEGIN h(x + dxj, y + dyj) = k; IF (k = n*n) THEN OUT ELSE TRY(x + dxj, y + dyj, k + 1); h(x + dxj, y + dyj) = 0; END; END; Khi chạy chương trình với n = 4, ta nhận kết khơng có hành trình Mã tuần với vị trí xuất phát Hành trình Mã tuần tìm (theo thứ tự duyệt đánh số hình vẽ) với n = vị trí xuất phát (1, 1) là: 18 21 10 17 20 13 22 19 16 11 24 14 25 15 12 23 Với vị trí xuất phát khác nhau, ta nhận số hành trình Mã tuần khác Dưới số hành trình Mã tuần bàn cờ kích thước n = tương ứng với vị trí xuất phát mà chương trình tính được: 304 56 304 56 56 56 64 56 56 56 304 56 304 Chú ý: Do tính đối xứng ta cần tính vị trí thuộc 1/8 bảng (nửa đường chéo góc phần tư thứ nhất) 80 v1.0 Bài 3: Bài tốn liệt kê tổ hợp TĨM LƯỢC CUỐI BÀI Qua học, bạn nắm nét tốn liệt kê tổ hợp Các bạn cần ghi nhớ vấn đề sau :  Các yêu cầu toán liệt kê tổ hợp  Thuật toán quay lui  Liệt kê số cấu hình (liệt kê dãy nhị phân; liệt kê hoán vị; liệt kê tổ hợp)  Một số ứng dụng toán liệt kê v1.0 81 Bài 3: Bài toán liệt kê tổ hợp BÀI TẬP Các tập liệt kê từ đến dựa thuật tốn quay lui, trình tự liệt kê theo thứ tự từ điển (các giá trị đề cử xếp tăng dần) Kết đếm cần so sánh với kết đếm biết công thức Liệt kê đếm chuỗi n bit thưa (là chuỗi n bit không chứa hai bit liên tiếp – xem tập 26, 2) a) thực thủ cơng với n = b) lập trình với n nhập từ bàn phím Cho k, n số nguyên dương (k ≤ n) Liệt kê đếm nghiệm nguyên dương phương trình: x1 + x2 + + xk = n a) thực thủ công với k = n = b) lập trình với n, k nhập từ bàn phím Một thứ tự {1, 2, , n} hoán vị (x1, x2, , xn) {1, 2, , n} thỏa mãn xi ≠ i với i (xem toán bỏ thư 2) Liệt kê đếm thứ tự {1, 2, , n} với n cho trước a) thực thủ công với n = b) lập trình với n nhập từ bàn phím Một phân bố {1, 2, , n} hoán vị (x1, x2, , xn) {1, 2, , n} thỏa mãn xi ≠ i xi ≠ i + với i (chú ý i = n i + = 1, xem toán xếp khách 2) Liệt kê đếm phân bố {1, 2, , n} với n cho trước a) thực thủ công với n = b) lập trình với n nhập từ bàn phím Liệt kê đếm tất xâu ký tự độ dài n lập từ k chữ bảng chữ tiếng Anh {A, B, }, k ≤ n ≤ 26, chữ xuất lần a) thực thủ công với n = 3, k = b) lập trình với n, k nhập từ bàn phím Một xâu ký tự lập từ n chữ bảng chữ tiếng Anh {A, B, }, n ≤ 26, chữ thứ i xuất ki lần (1 ≤ ki ≤ 9, i = 1, 2, , n) Liệt kê đếm hoán vị xâu cho a) thực thủ công với n = 3, k1 = 2, k2 = 3, k3 = b) lập trình với n ki (i = 1, 2, , n) nhập từ bàn phím Cho họ gồm m tập S1, S2, , Sm tập {1, 2, , n} (m ≤ n) Liệt kê đếm hệ đại diện phân biệt họ tập cho a) thực thủ công với m = 4, n = S1 = {1, 2}, S2 = {1, 2, 3}, S3 = {2, 3, 4}, S4 = {3, 4} b) lập trình với m, n Si nhập từ bàn phím, Si xác định ma trận nhị phân T gồm m dòng, n cột sau: 1 j  Si ≤i ≤ m, ≤ j ≤ n T(i, j)   0 j  Si Các tập dùng liệt kê để khẳng định tồn hay không tồn cấu hình a) Viết chương trình chứng tỏ rẳng xếp quân Hậu (không quân ăn quân nào) khống chế toàn bàn cờ kích thước 5, tìm cách xếp quân Hậu thỏa mãn điều kiện b) Từ chương trình trên, viết chương trình tìm số quân Hậu để xếp chúng bàn cờ kích thước n (khơng qn ăn qn nào), cho toàn bàn cờ bị khống chế Một hành trình Mã tuần mà từ cuối cùng, Mã nhẩy xuất phát gọi chu trình Mã tuần Viết chương trình chứng tỏ với bàn cờ kích thước khơng tồn chu trình Mã tuần, chu trình Mã tuần với bàn cờ kích thước CÂU HỎI THƯỜNG GẶP Nhiệm vụ tốn liệt kê tổ hợp? Bản chất thuật tốn quay lui gì? Hạn chế tốn liệt kê gì? 82 v1.0 ... (liệt kê dãy nhị phân; liệt kê hoán vị; liệt kê tổ hợp)  Một số ứng dụng toán liệt kê v1.0 81 Bài 3: Bài toán liệt kê tổ hợp BÀI TẬP Các tập liệt kê từ đến dựa thuật tốn quay lui, trình tự liệt. .. v1.0 Bài 3: Bài toán liệt kê tổ hợp TÓM LƯỢC CUỐI BÀI Qua học, bạn nắm nét toán liệt kê tổ hợp Các bạn cần ghi nhớ vấn đề sau :  Các yêu cầu toán liệt kê tổ hợp  Thuật toán quay lui  Liệt kê. .. dài mô tả liệt kê đây: v1.0 75 Bài 3: Bài toán liệt kê tổ hợp 2 3 3 Kết chạy chương trình với n = 3, ta 3! = hoán vị theo thứ tự sau: 1) 4) 2) 5) 3) 7) 3.3.3 Liệt kê tổ hợp Một tổ hợp chập m

Ngày đăng: 27/02/2021, 09:36

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan