L'entrée de ce problème est un tableau A[1...n]
de nombres réels. Votre besoin de trouver quelle est la valeur la plus élevée peut être obtenu en additionnant tous les nombres d'une sous-séquence contiguë A[i],A[i+1],...A[j]
de A
. Si A
ne contient pas de nombres négatifs, le problème est trivial et peut être résolu en additionnant tous les éléments de A
. Il devient plus difficile quand A
contient un mélange de nombres positifs et négatifs bien. Par exemple, pour A = [-2,11,-4,13,-5,-3]
, la solution est 20
(11-4 + 13 = 20). Pour A = [-2,1,-3,4,-1,2,1,-5,4]
, la solution est 6
(4-1 + 2 + 1 = 6). La somme des nombres d'une sous-séquence vide est 0
.L'algorithme de sous-séquence contiguë de valeur maximale
Il existe une solution de force brute qui permet de résoudre ce problème dans O (n^3), mais il est également possible de résoudre le problème dans le temps linéaire.
- Concevoir un algorithme qui résout le problème décrit ci-dessus en temps linéaire. Présentez votre algorithme en pseudo-code.
- Expliquez brièvement comment et pourquoi votre algorithme fonctionne.
- Donnez une brève explication de la raison pour laquelle votre algorithme s'exécute en temps linéaire.