Cho một mảng có kích thước n, cho mỗi k từ 1 đến n, tìm số tiền tối đa của mảng con tiếp giáp có kích thước k.Số tiền tối đa của tất cả các mảng phụ có kích thước k cho mỗi k = 1..n
Sự cố này có giải pháp rõ ràng với độ phức tạp thời gian O (N) và không gian O (1). Mã Lua:
array = {7, 1, 3, 1, 4, 5, 1, 3, 6}
n = #array
function maxArray(k)
ksum = 0
for i = 1, k do
ksum = ksum + array[i]
end
max_ksum = ksum
for i = k + 1, n do
add_index = i
sub_index = i - k
ksum = ksum + array[add_index] - array[sub_index]
max_ksum = math.max(ksum, max_ksum)
end
return max_ksum
end
for k = 1, n do
print(k, maxArray(k))
end
Có thuật toán nào có độ phức tạp thấp hơn không? Ví dụ, O (N log N) + bộ nhớ bổ sung.
chủ đề liên quan:
Đó là 'O (n^2logn)' khi thực hiện nó cho mỗi 'k = 1, ...., n'. Thấp hơn giải pháp của OP. Tìm số tiền cao nhất của k yếu tố lân cận được thực hiện trong O (n) bằng cách sử dụng cửa sổ trượt. Không cần giải pháp cây 'O (nlogk)' cho việc này. – amit
-1. Tôi có thể giải quyết subproblem cho cố định k trong O (N). Điểm mấu chốt của vấn đề là k-subarray của số tiền tối đa là cần thiết ** cho mỗi k từ 1 đến n **. – starius