Hãy xem xét vấn đề sau:
Đặt một -wheel được định nghĩa là một danh sách các số nguyên được liên kết theo chỉ mục . Ví dụ…
{3, 4, 9, -1, 6}
Khoan là một bánh xe 5 bánh với 3 ở vị trí 0, 4 ở vị trí 1, v.v. Một bánh xe hỗ trợ hoạt động của vòng quay, do đó vòng quay một bước sẽ biến bánh xe trên thành trục
{6, 3, 4, 9, -1}
Bây giờ với 6 ở vị trí 0, 3 ở vị trí 1, v.v. Đặt là một tập hợp có của các khác nhau . Cho một số và một số nguyên , tìm một chuỗi các phép quay sao cho
Nói cách khác, nếu bạn đặt các bánh xe dưới dạng ma trận, tổng của mỗi cột sẽ là . Giả sử rằng được xây dựng sao cho giải pháp là duy nhất cho phép quay của mọi phần tử (nghĩa là có chính xác giải pháp duy nhất bao gồm lấy một giải pháp, sau đó xoay mọi bánh xe trong theo cùng một số bước).
Giải pháp tầm thường cho vấn đề này chỉ đơn giản là kiểm tra mọi vòng quay có thể. Đây là một số mã giả cho điều đó:
function solve(wheels, index)
if wheels are solved:
return true
if index >= wheels.num_wheels:
return false
for each position 1..k:
if solve(index + 1) is true:
return true
else:
rotate wheels[index] by 1
solve(wheels, 0)
Đây là một giải pháp khá chậm (một cái gì đó như ). Tôi tự hỏi liệu có thể làm vấn đề này nhanh hơn không, và nếu có một cái tên cho nó.