Có lẽ các cận cũng được đặt như bài toán người du lịch.Thủ tục Attemp(i) là thủ tục tìm cách đặt 1 yêu cầu nào đó chưa được đặt vào vị trí thứ i... 2 cận chính cho thủ tục duyệt là:[r]
(1)Một số toán duyệt
Duyệt đệ quy chiến lược để giải nhiều toán, đặc biệt tốn địi hỏi liệt kê cấu hình thoả mãn Thuật toán đệ quy vần đề xung quanh đệ quy nhiều tác giả đề cập đến Trong viết này, trở lại với chủ đề đệ quy, đệ quy quay lui Chúng ta xét vài toán để thấy sức mạnh thuật toán DUYỆT
Bài tốn 1:
Có N người tham dự thi vấn đáp BB tổ chức Có tất M câu trả lời.Mỗi người BB hỏi K câu
Sau họ biết số câu trả lời Nhưng BB khơng nói cho họ biết đáp án
Vốn tò mò nên CC muốn tìm xem đáp án K câu hỏi Nhiệm vụ bạn giúp CC tìm đáp án CC yêu cầu Biết rằng:
Đáp án câu hỏi không trùng
Chỉ cần đua đáp án không cần thứ tự trả lời K câu hỏi Dữ liệu vào:
D1: N, M, K N dòng Dòng thứ J
Mỗi dòng gồm K+1 số.Số thứ i số hiệu câu trả lời i người J Số cuối số câu trả lời người thứ J
Dữ liệu ra: Gồm số dòng
Mỗi dòng gồm K số.Số thứ I đáp án câu hỏi thứ I SOLUTION:
Đây toán đệ quy quay lui
Bạn cần lập thủ tục ATTEMP(I) thủ tục đệ quy tìm đáp án thứ I Để cải tiến tốc độ chương trình ta cần vài cận:
Nếu Result[i] = k k phải chưa đáp án câu hỏi Với giả thiết cần đưa đáp án ta có thêm cận:
Result[i] < Result[j] Nếu i < j
Thêm cận là: Những ngươì không trả lời câu hỏi ta loại tất câu trả lời họ khỏi đáp án
(2)Có phịng (đánh số từ đến 9) quét vôi với mầu trắng, xanh vàng Có robot (được đánh số từ đến 9) phụ trách việc quét vơi phịng Mỗi robot qt vơi số phịng định Việc qt vơi thực nhờ chương trình cài sẵn theo quy tắc sau:
- Nếu phịng có màu trắng qt màu xanh - Nếu phịng có màu xanh qt màu vàng - Nếu phịng có màu vàng quét màu trắng
Cần phải gọi số robot quét vôi (mỗi lần robot, robot gọi nhiều lần khơng gọi Robot gọi qt vơi tất phịng mà phụ trách) Hãy tìm phương án vậy, cho lượng vơi phải qt Giả thiết lượng vơi cho lượt quét với phòng
Dữ liệu vào: ROBOT.INP
9 dòng liệt kê danh sách phòng (viết liền nhau) mà robot thứ i (i= 9) phụ trách
Dòng cuối mơ tả màu vơi ba đầu phịng với quy ước: X- xanh; V − vàng; T - trắng
Kết quả:
Ghi file ″ROBOT.OUT″ gồm dịng dạng: - Nếu khơng có phương án ghi ″0″
- Ngược lại ghi dãy thứ tự Robot gọi Ví dụ:
ROBOT.INP 159
123 257 147 369 456 789 258
(3)1: Màu xanh 2: Màu vàng
Ta có nhận xét phịng qt lần trở màu ban đầu Hay:
Màu phịng = số lần qt phịng Mod Gọi Xi1, Xi2, Xik robot quét phịng thứ i
Để phịng thứ I có màu trắng thì: (Xi1 + Xi2 +….+ Xik) Mod =
Chỉ cần quan tâm đến số lần quét phịng i hay số lần robot có khả qt phịng i qt khơng cần quan tâm đến thứ tự gọi robot ta có thuật tốn DUYỆT cấp độ O(3^9)
BÀI TỐN 3:
Cho xâu kí tự số Number = '123456789'
Bằng phép toán '+' '-' bạn điền vào xâu Number cho: Sau điền xong thực phép tốn ta kết Rx Chỉ u cầu tìm cách thơng báo khơng có
Ví dụ:
Rx = 45 -> 1+2+3+4+5+6+7+8+9 Rx = 125 -> 12+34-5+67+8+9 Rx = 457 -> 12-3 +456-7+8-9 SOLUTION:
Đây toán đơn giản
Để điền dấu vào xâu ta cần điền loại kí tự sau vào số liên tiếp xâu Number:
: '' : '+' : '-'
Sau điền xong ta kiểm tra O(9) Có tất khe điền -> Thuật tốn có cấp độ O(3^8)
BÀI TỐN 4:
Có n phiếu Mỗi đề có hình dạng hình vng Trên phiếu có k * k hình trịn đánh dấu
Các hình trịn bị đục thủng mà khơng Ta phép xoay phiếu góc 90, 180, 270 theo chiều kim đồng hồ
Tìm cách xoay số phiếu cho:
Sau xoay phiếu tạo thành k * k cột ứng với k * k hình trịn Sao cho: Mỗi cột có bị đục thủng
SOLUTION:
Lập thủ tục Attemp(i) cách xoay phiếu thứ i Có thể khơng xoay xoay 90, 180, 270 độ
Ta kí hiệu là: 0, 1, 2, Thêm vài cận để tăng tốc độ
(4)Số lần xoay phiếu phải nhỏ số lần xoay phiếu có
Số bị đục thủng phiếu chưa xét phải >= cột chưa có bị đục thủng sau xét i phiếu
Nếu bạn muốn đặt cận chặt xét xem ô làm phức tạp có lẽ cận tốc độ chương trình tạm ổn
BÀI TỐN 5:
Cho tới nay, Aladdin sống đất nước Iraq đau thương Tồn gia sản, có đèn thần bị chiến tranh hủy hoại Để nuôi mẹ, Aladdin lại dệt thảm Một hôm, anh nhận đơn đặt hàng dệt thảm hình vng thỏa mãn điều kiện sau:
- Thảm gồm N dòng N cột tạo thành N × N ô vuông đơn vị Các ô vuông đơn vị có màu đen trắng
- Với hình vng có độ dài cạnh 2, người ta quy định trước số màu đen phải có
- Người đặt hàng khẳng định nhìn thấy thảm Input:ALADDIN.INP
- Dòng đầu ghi số nguyên N
- N – dòng sau, dòng ghi N – số phạm vi
- Số thứ V dòng thứ U N – dòng số ô đen hình vuông gồm ô (U,V), (U+1,V), (U,V+1), (U+1,V+1)
Output: ALADDIN.OUT
Gồm N dòng, dòng ghi N số tương ứng với ô không màu trắng màu đen Nếu có nhiều kết thỏa mãn, cần đưa kết
Ví dụ:
ALADDIN.INP ALADDIN.OUT
4 3 3
1 1 1 1 0 0 Solution:
Gọi Fx(i,j) số màu đen hình vng cạnh 2: Chứa ô (I,j) (i+1,j) (I,j+1) (i+1,j+1)
(5)A(I,j)=1 ơ(I,j) có màu đen A(I,j)=0 ơ(I,j) có màu trắng Hình 1:
Lần duyệt đầu tiên: Duyệt (1,1):
Khi đó: Fx(1,1) = Fx(1,1) - a(1,1)
Tiến hành duyệt tiếp cặp (1,2) (2,1) Hình 2:
Khi đó:
Fx(1,1) = Fx(1,1) - a(1,2) Fx(1,1) = Fx(1,1) - a(2,1) Fx(1,2) = Fx(1,2) - a(1,2) Fx(2,1) = Fx(2,1) - a(2,1)
Sau biết ô (1,1) (1,2) (2,1) ta suy (2,2) bắng cơng thức: a(2,2)=Fx(1,1)
Hình 3: Sau suy ô (2,2)
Tiến hành duyệt cặp (1,3) (3,1) Hình 4:
Tiếp đó:
Với (1,3) (3,1) ta trừ Fx chứa Tổng quát
Nhận ô(i,j) thì:
Các ô (i,j) (i-1,j) (i,j-1) (i-1,j-1) Phải bị trừ lượng a(i,j) Sau biết ô (2,1) (3,1) (2,1) ta suy ô (3,2) công thức: a(3,2) = Fx(2,1)
(6)Tương tự suy (2,3) Hình 6:
Rồi từ ô (2,3) (3,2) (2,2) suy ô (3,3) Hình 7:
Duyệt cặp ô (1,4) (4, 1)
Ta suy cặp ô (2,4) (4, 2) Rồi từ cặp ô suy tiếp cặp ô (4,3) (3,4) Tiếp đến suy ô (4,4)
Quan sát hình vẽ:
Dưới bước suy cặp ô :
Lời giải tổng quát:
Mỗi duyệt cặp ô (1, i) (i,1) ta suy hoàn tốn hình vng i*i
Tập giá trị cặp ô (1,i) (i,1) là: (1,1) or (0,0) or (1,0) or (0,1)
Duyệt ô (i,j) ô bị giảm giá trị:
4 ô (i,j) (i-1,j) (i,j-1) (i-1,j-1) nằm bảng bị giảm lượng a(i,j)
(7)Sau duyệt cặp ô (i,1) (1,i) (i > 1) -> (2,i) (i,2)
-> (3,i) (i,3)
Cuối suy ô(i,i)
Cơng thức tính (i,j) a(i,j) = Fx(i-1,j-1) (i > 1, j > 1)
Sau duyệt hết hình vng n*n ta có lời giải cho tốn ALADDIN Bài tốn 6:
Một tồ nhà gồm có N tầng đánh số từ đến N (N≤100), có thang máy để phục vụ Trong ngày, có tất M yêu cầu vận chuyển thang máy (M≤100), yêu cầu mô tả số a, b cho biết cần vận chuyển hàng từ tầng a đến tầng b Do yêu cầu vận chuyển nên thang máy phục vụ yêu cầu lúc mà phải xong yêu cầu đến yêu cầu khác Tuy nhiên người ta thay đổi thứ tự thực u cầu Bài tốn đặt tìm thứ tự thực yêu cầu cho tổng quãng đường thang máy phải
Thang máy ban đầu xuất phát từ tầng Input:
Cho file text Elevator.dat : Dòng đầu số N, M
M dòng tiếp theo, dòng thứ i ghi số a, b mô tả yêu cầu thứ i Output:
File Elevator.out có cấu trúc:
Dịng đầu tổng qng đường tìm
Dịng thứ hai mô tả thứ tự thực yêu cầu hoán vị 1, 2, , M
Ví dụ:
INP : OUT : - > 3
5
SOLUTION:
Một cách giải toán duyệt Tuy nhiên duyệt đặt cận
(8)2 cận cho thủ tục duyệt là:
Yêu cầu thứ i chưa đặt vào vị trí 1,2,3, i
Tổng chi phí đặt yêu cầu J vào vị trí i phải nhỏ chi phí đặt m yêu cầu
Thuật tốn có cấp độ cỡ O(n!) nhiên việc đặt cận làm tốc độ chương trình cải thiện đáng kể
Bài toán 6:
Trên mảnh sân hình chữ nhật kích thước M * N người ta trồng loại Mai Đào.Trên sân người ta quy định sẵn ô phép trồng
Nhiệm vụ bạn là:
Trồng loại Mai Đào vào cần trồng cho số Mai Đào dòng cột chênh không Dữ liệu vào:
Dòng 1: M, N M dòng tiếp theo:
Mỗi dòng gồm N số để phép trồng không phép trồng
Dữ liệu ra: Gồm M dòng Mỗi dòng N số
Số không trồng Số trồng Mai Số trồng Đào SOLUTION:
Bài tốn có nhiều cách để giải phạm vi viết nói phương pháp DUYỆT để giải tốn
Lưu cần duyệt vào mảng để hạn chế số bước lặp không cần thiết Để cho việc duyệt tốt bước trước đặt Mai sau ưu tiên đặt Đào trước tối ưu dòng
Mỗi bước duyệt có dịng cột có số thay đổi ta cần kiểm tra xemcó thoả mãn điùe kiện tốn hay khơng
Bài tốn u cầu tìm nghiệm nên tìm thấy nghiệm ta ngắt chương trình để đảm bảo mặt thời gian
Bài toán 7:
Bản đồ mê cung hình chữ nhật chia thành lưới vng kích thước mxn, (i, j) ghi ký tự aij:
· aij = '.' ô an tồn
(9)"E"
· aij = 'X' nguy hiểm
Tại thời điểm, nhà thám hiểm di chuyển sang an tồn kề cạnh với ô đứng
Yêu cầu: Hãy tìm hành trình di chuyển giúp cho nhà thám hiểm nằm biên mê cung
Dữ liệu: Vào từ file văn ESCAPE.INP
· Dòng 1: Chứa hai số m, n cách dấu cách (1 £ m, n £ 100) · m dòng tiếp theo, dòng thứ i chứa n ký tự, ký tự thứ j aij
Kết quả: Ghi file văn ESCAPE.OUT
· Dịng 1: Ghi từ YES hay NO tuỳ theo có tồn đường khỏi mê cung hay khơng
· Nếu dòng ghi từ YES, dòng tiếp theo, dòng ghi số hàng số cột hành trình cách dấu cách Các ô đường phải liệt kê theo thứ tự qua, ô mà nhà thám hiểm đứng tới biên kết thúc hành trình
Ví dụ:
ESCAPE.IN P
ESCAPE.OU T
10 10
XXXXXXX XXX
XXXXXXX XXX
XX XXX XX.XXX.X XX
XX.EXX X XXXXXX.X X
X.X XXXXXXX X.X
(10)X XXXXXXX XXX
7 7 7 7 SOLUTION:
Đây toán đơn giải tìm đưịng ma trận.Thuật tốn tốt cho toán BFS(duyệt theo chiều rộng) với cấp độ ổn định O(N^2)
Tuy nhiên ta giải tốn thuật tốn DUYỆT có tên DFS (duyệt theo chiều sâu)
Thuật tốn có tinh chất ổn định mạt thời gian xét tình trạng Mê cung yêu cầu tìm nghiệm mê cung có khơng qua nhiều vật cản thuật toán DFS đưa lời giả thời gian nhanh theo chiều sâu có lợi mê cung
Thuật toán miêu tả thủ tục Attemp(I, J) có nghĩa tìm đường biên từ ô(I, J)
Mỗi bước cần thử ô xung quanh: Attemp(i, j + 1)
Attemp(i + 1, j) Attemp(i - 1, j) Attemp(i, j - 1)