Adloun

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

Sous-séquence croissante de somme maximum

Graphes sans circuit et ordonnancement de projets · niveau 2

Énoncé

Parmi les sous-séquences croissantes de , on cherche une sous-séquence de somme maximum (et non plus de longueur maximum).

  • On note la somme maximum d'une sous-séquence croissante finissant à l'indice . Donner la récurrence.
  • Écrire le programme, et l'exécuter sur la séquence de l'exercice 7.11 puis sur .
  • Sur , la sous-séquence de somme maximum est-elle une plus longue sous-séquence croissante ?

Corrigé

  • Avec (les valeurs sont positives ou nulles) : base, si ; hérédité, sinon.
  • On remplace « longueur » par « somme » :

static int[][] calculerPA(int[] S) { int n = S.length;
    int[] P = new int[n], A = new int[n];
    for (int j = 0; j < n; j++) {
        P[j] = S[j]; A[j] = -1;                  // base : S[j] seul
        for (int i = 0; i < j; i++)
            if (S[i] < S[j] && P[i] + S[j] > P[j]) { P[j] = P[i] + S[j]; A[j] = i; }
    }
    return new int[][] {P, A};
}

P = [6, 5, 1, 3, 6, 10, 15, 3, 22, 21, 30, 0, 1]
somme max = 30 : 1 2 3 4 5 7 8
T : longueur 5, somme max = 106 : 1 2 3 100

nom : S
valeurs : 6 5 1 2 3 4 5 2 7 6 8 0 1
vert : 2..6 8 10
fleches : 2->3 3->4 4->5 5->6 6->8 8->10
legende : somme maximum 1 + 2 + 3 + 4 + 5 + 7 + 8 = 30 ; flèches de a(j) vers j
  • Non : sur , la plssc a pour longueur et pour somme , alors que (longueur ) a pour somme . Les deux critères donnent des solutions différentes.

nom : T
valeurs : 1 101 2 3 100 4 5
vert : 0 2 3 5 6
legende : plus longue, somme 15

nom : T
valeurs : 1 101 2 3 100 4 5
vert : 0 2 3 4
legende : somme maximum : 106

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →