bài giảng các chuyên đề phần 1 pps

25 283 0
bài giảng các chuyên đề phần 1 pps

Đ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 toán liệt kê 9 III LIỆT KÊ CÁC HOÁN VỊ Ta sẽ lập chương trình liệt kê các hoán vị của {1, 2, , n} theo thứ tự từ điển Ví dụ với n = 4, ta phải liệt kê đủ 24 hoán vị: 1. 1234 7. 213 4 13 . 312 4 19 . 412 3 2 .12 43 8. 214 3 14 . 314 2 20. 413 2 3 .13 24 9.2 314 15 .3 214 21. 4 213 4 .13 42 10 .23 41 16.32 41 22.42 31 5 .14 23 11 .2 413 17 .3 412 23.4 312 6 .14 32 12 .24 31 18.34 21 24.43 21 Như vậy hoán vị đầu tiên sẽ là (1, 2, ,... Try (1) ; {Thử các cách chọn giá trị x1} Close(Input); Close(Output); end Ví dụ: Khi n = 3, cây tìm kiếm quay lui như sau: Try (1) x1 := 0 x1 := 1 Try(2) x2 := 0 Try(3) x3 := 0 000 x3 := 1 0 01 Try(2) x2 := 1 x2 := 0 Try(3) x3 := 0 010 Try(3) x3 := 1 011 x3 := 0 10 0 x2 := 1 Try(3) x3 := 1 1 01 x3 := 0 x3 := 1 110 Hình 2: Cây tìm kiếm quay lui trong bài toán liệt kê dãy nhị phân Lê Minh Hoàng 11 1 result Bài. .. ANALYSE.OUT ghi các cách phân tích số n ANALYSE.INP 6 ANALYSE.OUT 6 = 1+ 1 +1+ 1 +1+ 1 6 = 1+ 1 +1+ 1+2 6 = 1+ 1 +1+ 3 6 = 1+ 1+2+2 6 = 1+ 1+4 6 = 1+ 2+3 6 = 1+ 5 6 = 2+2+2 6 = 2+4 6 = 3+3 6 = 6 PROG03_4.PAS * Thuật toán quay lui liệt kê các cách phân tích số program Analyses; const max = 30; var n: Integer; x: array[0 max] of Integer; t: array[0 max] of Integer; procedure Init; begin ReadLn(n); x[0] := 1; t[0] := 0;... result Bài toán liệt kê 14 II LIỆT KÊ CÁC TẬP CON K PHẦN TỬ Input/Output có khuôn dạng như trong PROG02_2.PAS Để liệt kê các tập con k phần tử của tập S = {1, 2, , n} ta có thể đưa về liệt kê các cấu hình (x1, x2, , xk) ở đây các xi ∈ S và x1 < x2 < < xk Ta có nhận xét: • xk ≤ n • xk -1 ≤ xk - 1 ≤ n - 1 • • xi ≤ n - k + i • • x1 ≤ n - k + 1 Từ đó suy ra xi -1 + 1 ≤ xi ≤ n - k + i (1 ≤ i ≤ k) ở đây ta... nào ăn quân nào chính là bài toán liệt kê hoán vị Input: file văn bản QUEENS.INP chứa số nguyên dương n ≤ 12 Output: file văn bản QUEENS.OUT, mỗi dòng ghi một cách đặt n quân hậu Lê Minh Hoàng Bài toán liệt kê 20 QUEENS.INP 5 QUEENS.OUT (1, 1) ; (2, (1, 1) ; (2, (1, 2); (2, (1, 2); (2, (1, 3); (2, (1, 3); (2, (1, 4); (2, (1, 4); (2, (1, 5); (2, (1, 5); (2, 3); 4); 4); 5); 1) ; 5); 1) ; 2); 2); 3); (3, (3,... xi (xi ≥ xi - 1) 5 Khi nào thì in kết quả và khi nào thì gọi đệ quy tìm tiếp ? Lưu ý rằng ti - 1 là tổng của tất cả các phần tử từ x1 đến xi -1 do đó • Khi ti = n tức là (xi = n - ti - 1) thì in kết quả • Khi tìm tiếp, xi +1 sẽ phải lớn hơn hoặc bằng xi Mặt khác ti +1 là tổng của các số từ x1 tới xi +1 không được vượt quá n Vậy ta có ti +1 ≤ n ⇔ ti -1 + xi + xi +1 ≤ n ⇔ xi + xi + 1 ≤ n - ti - 1 tức là xi Lê... cuối giảm dần (từ xi +1 đến xk) trở thành tăng dần Input: file văn bản PERMUTE.INP chứa số nguyên dương n ≤ 12 Output: file văn bản PERMUTE.OUT các hoán vị của dãy (1, 2, , n) PERMUTE.INP 3 Lê Minh Hoàng PERMUTE.OUT 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 Bài toán liệt kê 10 PROG02_3.PAS * Thuật toán sinh liệt kê hoán vị program Permute; const max = 12 ; var n, i, k, a, b: Integer; x: array [1 max] of Integer;... sau: ti sẽ là tổng các phần tử trong mảng x từ x1 đến xi: ti := x1 + x2 + + xi 2 Khi liệt kê các dãy x có tổng các phần tử đúng bằng n, để tránh sự trùng lặp ta đưa thêm ràng buộc xi -1 ≤ xi 3 Vì số phần tử thực sự của mảng x là không cố định nên thủ tục PrintResult dùng để in ra 1 cách phân tích phải có thêm tham số cho biết sẽ in ra bao nhiêu phần tử 4 Thủ tục đệ quy Try(i) sẽ thử các giá trị có thể... tập {1, 2, , n} đến tập các tên người Ví dụ xây dựng một mảng Tên: Tên [1] := 'Nguyễn văn A'; Tên[2] := 'Trần thị B'; sau đó liệt kê tất cả các tập con k phần tử Lê Minh Hoàng Bài toán liệt kê 11 của tập {1, 2, , n} Chỉ có điều khi in tập con, ta không in giá trị số {1, 3, 5} mà thay vào đó sẽ in ra {Tên [1] , Tên [3], Tên[5]} Tức là in ra ảnh của các giá trị tìm được qua ánh xạ 5 Liệt kê tất cả các tập... có thêm một số x0 = 0 khi xét i = 1 Như vậy ta sẽ xét tất cả các cách chọn x1 từ 1 (=x0 + 1) đến n - k + 1, với mỗi giá trị đó, xét tiếp tất cả các cách chọn x2 từ x1 + 1 đến n - k + 2, cứ như vậy khi chọn được đến xk thì ta có một cấu hình cần liệt kê Chương trình liệt kê bằng thuật toán quay lui như sau: PROG03_2.PAS * Thuật toán quay lui liệt kê các tập con k phần tử program Combinations; const . vị: 1. 1234 2 .12 43 3 .13 24 4 .13 42 5 .14 23 6 .14 32 7. 213 4 8. 214 3 9.2 314 10 .23 41 11. 2 413 12 .24 31 13. 312 4 14 . 314 2 15 .3 214 16 .32 41 17.3 412 18 .34 21 19. 412 3 20. 413 2 21. 4 213 22.42 31 23.4 312 24.43 21 Như. 30 Output: file văn bản ANALYSE.OUT ghi các cách phân tích số n. ANALYSE.INP ANALYSE.OUT 6 6 = 1+ 1 +1+ 1 +1+ 1 6 = 1+ 1 +1+ 1+2 6 = 1+ 1 +1+ 3 6 = 1+ 1+2+2 6 = 1+ 1+4 6 = 1+ 2+3 6 = 1+ 5 6 = 2+2+2 6 = 2+4 6 = 3+3 6. 0 x 2 := 1 x 2 := 0 x 2 := 1 x 3 := 0 x 3 := 1 x 3 := 0 x 3 := 1 x 3 := 0 x 3 := 1 x 3 := 0 x 3 := 1 000 0 01 010 011 10 0 10 1 11 0 11 1 result Hình 2: Cây tìm kiếm quay lui trong bài toán

Ngày đăng: 23/07/2014, 13:20

Từ khóa liên quan

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

Tài liệu liên quan