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 : 106100 % gratuit
La suite du chapitre est sur Adloun
- 11 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
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.