1. Trang chủ
  2. » Công Nghệ Thông Tin

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

25 284 0

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 25
Dung lượng 5,42 MB

Nội dung

[...].. .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