Adloun

algorithmique (école d'ingénieur) · Chapitre 10 · Application directe du cours

Sommes préfixes

Complexité des programmes · niveau 1 (application)

Énoncé

Étant donné un tableau , on veut le tableau de terme général (somme du -préfixe).

  • Un premier programme calcule chaque par une boucle sur . Combien d'additions fait-il ? Quelle est sa complexité ?
  • Écrire un programme en , en remarquant que .
  • À quoi servent ces sommes ? Montrer qu'avec , la somme de n'importe quel sous-tableau se calcule en temps constant.

Corrigé

  • Le calcul de fait additions, d'où additions : .
  • On calcule les par croissants, chacun à partir du précédent :

static int[] sommesPrefixes(int[] T) { int n = T.length;
    int[] S = new int[n + 1];             // S[0] = 0 : somme du 0-préfixe
    for (int k = 0; k < n; k++)           // S[0:k+1] est calculé
        S[k + 1] = S[k] + T[k];           // somme de T[0:k+1]
    return S;                             // S[0:n+1] est calculé
}

Exactement additions : . Sur :


naif     : [0, 3, 2, 6, 7, 2, 11]  additions = 21
lineaire : [0, 3, 2, 6, 7, 2, 11]  additions = 6
n =  1000 : naif 500500 additions, lineaire 1000 additions
n = 10000 : naif 50005000 additions, lineaire 10000 additions

nom : S
valeurs : 0 3 2 6 7 2 11
fleches : 0->1:+3 1->2:-1 2->3:+4 3->4:+1 4->5:-5 5->6:+9
legende : S[k+1] = S[k] + T[k] : une addition par case
  • : une soustraction. Après un précalcul en , chaque somme de sous-tableau coûte un temps constant. C'est une petite programmation dynamique : la récurrence évite de recalculer les sommes des préfixes.

nom : T
valeurs : 3 -1 4 1 -5 9
vert : 1..3
zone : 1..3 somme 4
legende : T[1] + T[2] + T[3] = S[4] - S[1] = 7 - 3 = 4

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →