Gegeben ein Array der Größe n, für jedes k von 1 bis n, finden Sie die maximale Summe zusammenhängender Subarrays der Größe k.Maximale Summe aller Unterfelder der Größe k für jedes k = 1..n
Dieses Problem hat eine offensichtliche Lösung mit Zeitkomplexität O (N) und O (1) Raum. Lua-Code:
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
Gibt es einen Algorithmus mit geringerer zeitlicher Komplexität? Zum Beispiel O (N log N) + zusätzlicher Speicher.
Verwandte Themen:
Was ist "O (n^2logn)", wenn Sie es für jedes 'k = 1, ...., n 'tun. Unterlegen von der OP-Lösung. Das Finden der höchsten Summe von k benachbarten Elementen erfolgt in O (n) unter Verwendung eines Gleitfensters. Keine Notwendigkeit für 'O (nlogk) 'Baum Lösung dafür. – amit
-1. Ich kann Teilproblem für festes k in O (N) lösen. Der Kernpunkt des Problems ist, dass ein k-Subarray der maximalen Summe ** für jedes k von 1 bis n ** benötigt wird. – starius