Exercice 5 · Bac Numérique et Sciences Informatiques Métropole Candidat libre 2021 (sujet 2)
Thème : Programmation dynamique · Tiré du sujet Métropole Candidat libre 2 (2021)
Énoncé
EXERCICE 5 (4 points)
Cet exercice porte sur la programmation en général.
Étant donné un tableau non vide de nombres entiers relatifs, on appelle sous-séquence une suite non vide d'éléments voisins de ce tableau. On cherche dans cet exercice à déterminer la plus grande somme possible obtenue en additionnant les éléments d'une sous-séquence.
Par exemple, pour le tableau ci-dessous, la somme maximale vaut 18. Elle est obtenue en additionnant les éléments de la sous-séquence encadrée en gras ci-dessous (6; 8; -6; 10).
1. a.
Quelle est la solution du problème si les éléments du tableau sont tous positifs ?
1. b.
Quelle est la solution du problème si tous les éléments sont négatifs ?
2. Dans cette question, on examine toutes les sous-séquences possibles.
2. a.
Écrire le code Python d'une fonction somme_sous_sequence(lst, i, j) qui prend en argument une liste et deux entiers i, j et renvoie la somme de la sous-séquence délimitée par les indices i et j (inclus).
def somme_sous_sequence(lst, i, j):
2. b.
La fonction pgsp ci-dessous permet de déterminer la plus grande des sommes obtenues en additionnant les éléments de toutes les sous-séquences possibles du tableau lst.
def pgsp(lst):
n = len(lst)
somme_max = lst[0]
for i in range(n):
for j in range(i, n):
s = somme_sous_sequence(lst, i, j)
if s > somme_max:
somme_max = s
return somme_max
Parmi les quatre choix suivants, quel est le nombre de comparaisons effectuées par cette fonction si le tableau lst passé en paramètre contient 10 éléments ?
2. c.
Recopier et modifier la fonction pgsp pour qu'elle renvoie un tuple contenant la somme maximale et les indices qui délimitent la sous-séquence correspondant à cette somme maximale.
3. On considère dans cette question une approche plus élaborée. Son principe consiste, pour toutes les valeurs possibles de l'indice i, à déterminer la somme maximale des sous-séquences qui se terminent à l'indice i.
En désignant par lst[i] l'élément de lst d'indice i, on peut vérifier que:
et pour :
si ;
si .
3. a.
Compléter le tableau ci-dessous avec les valeurs de pour la liste considérée en exemple.
0
1
2
3
4
5
6
7
lst[]
-8
-4
6
8
-6
10
-4
-4
3. b.
La solution au problème étant la plus grande valeur des , on demande de compléter la fonction pgsp2 ci-dessous, de sorte que la variable sommes_max contienne la liste des valeurs .
def pgsp2(lst):
sommes_max = [lst[0]]
for i in range(1, len(lst)):
# à compléter
return max(sommes_max)
3. c.
En quoi la solution obtenue par cette approche est-elle plus avantageuse que celle de la question 2.b. ?

Corrigé
Corrigé proposé par AprenAI (non officiel)
1. a. Quelle est la solution du problème si les éléments du tableau sont tous positifs ?
Réponse : La somme de tous les éléments du tableau (le tableau entier)
1. b. Quelle est la solution du problème si tous les éléments sont négatifs ?
Réponse : Le plus grand élément du tableau (la valeur maximale)
2. a. Écrire le code Python d'une fonction somme_sous_sequence(lst, i, j)
Réponse : ```python def somme_sous_sequence(lst, i, j): s = 0 for k in range(i, j + 1): s += lst[k] return s ``` ```python def somme_sous_sequence(lst, i, j): return sum(lst[i:j + 1]) ```
2. b. Quel est le nombre de comparaisons effectuées par cette fonction si le tableau contient 10 éléments ?
Réponse : 55
2. c. Recopier et modifier la fonction pgsp pour qu'elle renvoie un tuple contenant la somme maximale et les indices qui délimitent la sous-séquence
Réponse : ```python def pgsp(lst): n = len(lst) somme_max = lst[0] i_max, j_max = 0, 0 for i in range(n): for j in range(i, n): s = somme_sous_sequence(lst, i, j) if s > somme_max: somme_max = s i_max = i j_max = j return (somme_max, i_max, j_max) ```
3. a. Valeur de S(0)
Réponse : -8
3. a. Valeur de S(1)
Réponse : -4
3. a. Valeur de S(2)
Réponse : 6
Les réponses des 7 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium
Résous-le ici : correction automatique, indices et corrigé détaillé.
‹ Exercice 2 · Métropole 1 remplacement 2025