Adloun

algorithmique (école d'ingénieur) · Chapitre 10 · Exercice de TD

Sous-tableau de somme maximum : trois algorithmes

Complexité des programmes · niveau 2

Énoncé

On cherche la somme maximum d'un sous-tableau de (chapitre 11), le sous-tableau vide étant de somme .

  • Écrire un programme qui calcule la somme de chaque sous-tableau par une boucle sur . Donner le nombre exact d'additions.
  • Améliorer le programme en remarquant que la somme de s'obtient à partir de celle de . Nombre d'additions ?
  • Mesurer les deux programmes pour , , et comparer au programme en du chapitre 11.

Corrigé

-


static int cubique(int[] T) { int n = T.length, best = 0;  // sous-tableau vide : 0
    for (int d = 0; d < n; d++)
        for (int f = d + 1; f < n + 1; f++) {
            int s = 0;
            for (int i = d; i < f; i++) s = s + T[i];      // s = somme de T[d:f]
            if (s > best) best = s;
        }
    return best;
}

Le nombre d'additions est .

  • On conserve la somme courante quand augmente :

static int quadratique(int[] T) { int n = T.length, best = 0;
    for (int d = 0; d < n; d++) {
        int s = 0;                          // s = somme de T[d:d]
        for (int f = d + 1; f < n + 1; f++) {
            s = s + T[f - 1];               // s = somme de T[d:f]
            if (s > best) best = s;
        }
    }
    return best;
}

additions : .

  • Sur le tableau du chapitre 11 (), les deux programmes trouvent , avec et additions. Sur des tableaux aléatoires (programme SommeMaxNaive.java) :

n =  500 : cubique 1739 en 8 ms (20958500 add.), quadratique 1739 en 1 ms (125250 add.)
n = 1000 : cubique 1263 en 48 ms (167167000 add.), quadratique 1263 en 0 ms (500500 add.)
n = 2000 : cubique 3722 en 432 ms (1335334000 add.), quadratique 3722 en 0 ms (2001000 add.)

Quand double, les additions du programme cubique sont multipliées par , celles du programme quadratique par . Le programme du chapitre 11 fait tours de boucle : tours pour . (Les temps mesurés dépendent de la machine.)

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 →