Exercice 2 · Bac Numérique et Sciences Informatiques Sujets zéro et spécimens sujet 2021 (sujet 1)
Thème : Programmation dynamique · Tiré du sujet Sujet 1 (2021)
Énoncé
Exercice 2
Cet exercice porte sur la programmation en général et la récursivité en particulier.
On considère un tableau de nombres de lignes et colonnes.
Les lignes sont numérotées de à et les colonnes sont numérotées de à . La case en haut à gauche est repérée par et la case en bas à droite par .
On appelle chemin une succession de cases allant de la case à la case , en n'autorisant que des déplacements case par case: soit vers la droite, soit vers le bas.
On appelle somme d'un chemin la somme des entiers situés sur ce chemin.
Par exemple, pour le tableau T suivant:
4
1
1
3
2
0
2
1
3
1
5
1
Un chemin est (en gras sur le tableau);
La somme du chemin précédent est 14.
n'est pas un chemin.
L'objectif de cet exercice est de déterminer la somme maximale pour tous les chemins possibles allant de la case à la case .
Question 1
On considère tous les chemins allant de la case à la case du tableau T donné en exemple.
1.
Un tel chemin comprend nécessairement 3 déplacements vers la droite. Combien de déplacements vers le bas comprend-il ?
déplacements vers le bas
2.
La longueur d'un chemin est égale au nombre de cases de ce chemin. Justifier que tous les chemins allant de à ont une longueur égale à 6.
Question 2
En listant tous les chemins possibles allant de à du tableau T, déterminer un chemin qui permet d'obtenir la somme maximale et la valeur de cette somme.
Question 3
On veut créer le tableau T' où chaque élément T'[i][j] est la somme maximale pour tous les chemins possibles allant de à .
1.
Compléter le tableau T' associé au tableau T ci-dessous en remplaçant les points d'interrogation:
4
5
6
6
8
10
9
10
16
2.
Justifier que si j est différent de 0, alors: T'[0][j] = T[0][j] + T'[0][j-1].
Question 4
Justifier que si i et j sont différents de 0, alors: T'[i][j] = T[i][j] + max(T'[i-1][j], T'[i][j-1]).
Question 5
On veut créer la fonction récursive somme_max ayant pour paramètres un tableau T, un entier i et un entier j. Cette fonction renvoie la somme maximale pour tous les chemins possibles allant de la case à la case .
1.
Quel est le cas de base, à savoir le cas qui est traité directement sans faire appel à la fonction somme_max ? Que renvoie-t-on dans ce cas ?
2.
À l'aide de la question précédente, écrire en Python la fonction récursive somme_max.
def somme_max(T, i, j):
3.
Quel appel de fonction doit-on faire pour résoudre le problème initial ?

Corrigé
Corrigé proposé par AprenAI (non officiel)
1.1. Combien de déplacements vers le bas comprend-il ?
Réponse : 2
1.2. Justifier que tous les chemins allant de (0, 0) à (2, 3) ont une longueur égale à 6.
Réponse : Chaque chemin comprend la case de départ (0,0), suivie de 3 déplacements vers la droite et 2 déplacements vers le bas, soit déplacements au total. Comme chaque déplacement ajoute une nouvelle case, le chemin compte cases.
Question 2 : déterminer un chemin qui permet d'obtenir la somme maximale
Réponse : (0,0), (1,0), (2,0), (2,1), (2,2), (2,3)
Question 2 : valeur de cette somme maximale
Réponse : 16
3.1. Valeur de T'[0][3]
Réponse : 9
3.1. Valeur de T'[1][1]
Réponse : 6
Les réponses des 6 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 1 · Sujets zéro et spécimens sujet 2024 (sujet 2)