Biorąc pod uwagę tablicę o rozmiarze n, dla każdego k od 1 do n, znajdź maksymalną sumę sąsiadujących podprzestrzeni o rozmiarze k. Ten problem ma oczywiste rozwiązanie o złożoności czasowej O (N) i O (1) spacji. Kod Lua:Maksymalna suma wszystkich podarunków o rozmiarze k dla każdego k = 1.nn.
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
Czy istnieje algorytm o mniejszej złożoności czasu? Na przykład O (N log N) + dodatkowa pamięć.
Powiązane tematy:
Co to jest 'O (n^2logn)', gdy robi się to dla każdego 'k = 1, ...., n'. Gorszy od rozwiązania OP. Znalezienie najwyższej sumy k sąsiednich elementów odbywa się w O (n) za pomocą przesuwanego okna. Nie ma potrzeby stosowania rozwiązania drzewa 'O (nlogk)'. – amit
-1. Potrafię rozwiązać podproblem dla stałej k w O (N). Kluczowym problemem jest to, że potrzebna jest k-podmara sumy maks. ** dla każdego k od 1 do n **. – starius