Xem xét một hoán vị của các giá trị nguyên từ 1
đến N
. Ví dụ: ví dụ này cho N = 4
:
[1, 3, 4, 2]
Chúng tôi sẽ xem danh sách này là tuần hoàn, như vậy 1
và 2
được coi là liền kề. Một đại lượng chúng ta có thể tính toán cho một danh sách như vậy là tổng chênh lệch bình phương của các giá trị liền kề:
(1-3)² + (3-4)² + (4-2)² + (2-1)² = 10
Nhiệm vụ của bạn là tìm một hoán vị tối đa hóa đại lượng này, với một số nguyên dương N
. Trong trường hợp N = 4
ví dụ trên là không tối ưu (trên thực tế, nó là tối thiểu). Chúng ta có thể đạt được sự khác biệt tổng bình phương 18
với hoán vị sau (cũng như một số khác):
[1, 4, 2, 3]
Thuật toán của bạn phải chạy trong thời gian đa thức (của N
). Cụ thể, bạn không thể đơn giản tính tổng chênh lệch bình phương của tất cả các hoán vị.
Bạn có thể viết chương trình hoặc hàm, lấy đầu vào qua STDIN (hoặc thay thế gần nhất), đối số dòng lệnh hoặc đối số hàm và xuất kết quả qua tham số STDOUT (hoặc thay thế gần nhất), tham số trả về hàm hoặc tham số hàm (out).
Đầu ra có thể ở bất kỳ định dạng thuận tiện, rõ ràng, danh sách phẳng hoặc chuỗi. Bạn có thể chọn để trả về một danh sách với giá trị từ 0
để N-1
thay vì 1
để N
.
Luật golf tiêu chuẩn được áp dụng.
Kiểm tra dữ liệu
Có một giải pháp phân tích tốt cho vấn đề này. Ví dụ: tất cả các giải pháp hợp lệ cho N = 10
tương đương với danh sách sau đây (tối đa thay đổi theo chu kỳ và đảo ngược):
[7, 5, 6, 4, 8, 2, 10, 1, 9, 3]
Tôi không muốn tiết lộ quá nhiều về điều đó (mặc dù có thể đủ để tìm ra mô hình), vì vậy thay vì đưa ra bất kỳ ví dụ nào khác, bạn có thể kiểm tra xem kết quả của bạn có tổng số khác biệt bình phương nào sau đây không N
:
N Total squared difference
1 0
2 2
3 6
4 18
5 36
6 66
7 106
8 162
9 232
10 322
33 11936
100 333202
333 12308236
1000 333332002
Đây là mục AE484842 của OEIS (cũng chứa tài liệu tham khảo cho một bài viết với giải pháp cho thách thức này nếu bạn bị mắc kẹt).
(i<n/2||n%2)^i%2?i+1:n-i
.