2017-02-08 3 views
1

Je veux tout savoir la somme des sous-réseau continu de longueur K pour un tableau donné de longueur n étant donné que k < n. Par exemple, laissez le tableau donné être arr[6]={1,2,3,4,5,6} et k=3, puis la réponse est (6,9,12,15). Il peut être obtenu que:Pour trouver la somme de tous les sous-ensemble consécutif de longueur k dans un tableau donné

(1+2+3)=6, 
(2+3+4)=9, 
(3+4+5)=12, 
(4+5+6)=15. 

Je l'ai essayé en utilisant la fenêtre coulissante de longueur k, mais sa complexité de temps est O(n) .est une solution qui prend encore moins de temps tels que O(log n).

+3

Non. Pensez-y, vous devez analyser l'ensemble du tableau. Vous ne pouvez pas aller mieux que O (n). Vous pouvez uniquement optimiser le coefficient de l'exécution linéaire. – StoryTeller

+4

Vous ne pouvez pas regarder les nombres 'n' en moins de' O (n) 'temps. –

+1

Si je veux juste savoir la valeur maximale de la somme de la réponse obtenue? – Enigma

Répondre

7

Si vous ne connaissez pas certaines propriétés spécifiques du tableau (par exemple, l'ordre des éléments, la plage des éléments inclus dans le tableau, etc.), vous devez vérifier chaque valeur, ce qui entraîne une complexité O(n).

Si, par exemple, vous saviez que la somme des valeurs du tableau étaient T (peut-être parce que vous saviez T lui-même ou a été donné la plage), vous pouvez alors considérer que tous les éléments sauf le premier et le dernier (K-1) éléments seraient inclus dans K sommes différentes. Cela signifierait une somme de T.K moins une certaine quantité, et vous pourriez réduire les valeurs de la première et la dernière K valeurs appropriées quantité de fois, ce qui entraîne un algorithme de complexité O(K).

Mais notez que, pour réaliser une stratégie similaire à celle-ci, vous devriez connaître d'autres informations spécifiques concernant les valeurs dans le tableau, que ce soit leur portée ou leur somme.

+1

Si je veux juste trouver la valeur maximum de la réponse obtenue? – Enigma

+0

Valeur @Enigma max dans le tableau, ou la somme max parmi les sommes des sous-réseaux consécutifs? En fait, grattez ce que je viens de demander, car dans les deux cas, vous devrez à nouveau avoir des informations supplémentaires pour éviter de vérifier chaque valeur dans le tableau, ce qui signifie que vous aurez besoin de 'O (n)' si vous ne le faites pas avoir des informations supplémentaires concernant le tableau ou les valeurs qui y sont incluses. – ilim

+1

Valeur maximale de la somme. – Enigma

1

Vous pouvez utiliser la structure de données Arborescence de segments, bien que sa construction prenne O (n log n), mais que vous puissiez trouver la somme de tout intervalle dans O (log n) et modifier chaque élément de tableau dans O log n) https://en.wikipedia.org/wiki/Segment_tree