NSI Lycée Louis de Foix
Correction des exercices débranchés Exercice 1
a. b. c. d.
3
6 1
2 5 4
4
3 5
1 7 2
1 6
a. Taille : 1 ; Hauteur : 0 ; Feuille : 1 b. Taille : 6 ; Hauteur : 5 ; Feuille : 1 c. Taille : 6 ; Hauteur : 2 ; Feuille : 3 d. Taille : 7 ; Hauteur : 2 ; Feuille : 4 Exercice 2
1.
5
2 6
4 7
1
2. [8, 4, 3, 2, 1, 9, Δ, 7, 5, Δ, Δ, 6, 4]
Exercice 3
1. a. Dans le cas d’un arbre filiforme, son nombre de feuilles est égal à 1. Un arbre complet a 1 nœud à la racine, 2 au deuxième niveau, 4 au troisième, 8 au quatrième et 16 au cinquième, donc 16 feuilles.
b. La taille de l’arbre varie donc entre 5 (un nœud par niveau) et 1 + 2 + 4 + 8 + 16 = 31.
2. On généralise le résultat précédent. Le nombre de feuilles de l’arbre est compris entre 1 et 2h (le nombre de nœuds doublant à chaque niveau).
La taille de l’arbre varie entre h + 1 (un nœud par niveau) et 1 + 2 + 4 + 8 + … + 2h = 1−21−2ℎ+1 = 2h+1 – 1.
Somme de termes d’une suite géométrique : 1er terme × 1−𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑑𝑑𝑛𝑛 𝑡𝑡𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑡𝑡 1−𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑛𝑛 .
2
1 4
5 3
2
NSI Lycée Louis de Foix
Ceux qui ne sont pas amis avec les suites géométriques peuvent procéder différemment. On numérote chaque nœud de l’arbre en binaire. La racine a le numéro 1. Le numéro d’un nœud fils s’obtient en rajoutant un 0 au numéro du père s’il s’agit du fils gauche, et en rajoutant un 1 s’il s’agit du fils droit. La taille d’un arbre binaire complet de hauteur h est égal au plus grand nombre binaire à h + 1 chiffres, soit 2h+1 – 1.
3. Un arbre binaire de taille 10 a une hauteur comprise entre 9 (arbre filiforme) et 3.
En effet, un arbre binaire complet de hauteur 2 n’a que 7 nœuds et un arbre complet de hauteur 3 en a 15.
Un arbre binaire de taille 100 a une hauteur comprise entre 99 et 6. Hauteur 4 → 31 nœuds, hauteur 5 → 63 nœuds, hauteur 6 → 127 nœuds.
Un arbre binaire de taille t peut avoir une hauteur au plus égale à t – 1 (cas de l’arbre filiforme).
Comme un arbre binaire complet de hauteur h a une taille de 2h+1 – 1, on doit résoudre : 2h+1 – 1 ≥ t ⇔ 2h+1 ≥ t + 1 ⇔ h + 1 ≥ log2(t + 1) ⇔ h ≥ log2(t + 1) – 1
Donc la hauteur d’un arbre binaire de taille t est entre log2(t + 1) – 1 et t – 1.
Exercice 4
On affiche les sommets de l’arbre de l’exercice 2 en suivant un parcours en profondeur. Dans quel ordre vont-ils s’afficher :
a. 7 – 2 – 5 – 4 – 1 – 8 – 6 – 9 – 4 – 3 b. 8 – 4 – 2 – 7 – 5 – 1 – 3 – 9 – 6 – 4 c. 7 – 5 – 2 – 1 – 4 – 6 – 4 – 9 – 3 – 8 Exercice 5
b
a c
a
c b
a
b c
c
a b
c
b a
Exercice 6
On prend n’importe quel arbre binaire avec le bon nombre de nœuds et on écrit les lettres dans l’ordre du parcours. Le plus simple serait un arbre filiforme, mais ce n’est pas très formateur !
É
P V
R I
E
E R
R
N U
E I E
I
N G
F
A R
U F E
G
1
10 11
101 110 111
100
NSI Lycée Louis de Foix Exercice 7
+
* /
+ 5 –
5 7 25 7
3
Parcours infixe : 5 + 7 * 5 + 25 – 7 / 3
Parcours préfixe : + * + 5 7 5 / - 25 7 3 (notation polonaise)
Parcours suffixe : 5 7 + 5 * 25 7 – 3 7 + (notation polonaise inversée) Le parcours infixe renvoie l’affichage classique.
En rajoutant les parenthèses, on obtient : (5 + 7) * 5 + (25 – 7) / 3
Le compte est bon 2. b. parcours préfixe 3.
a. parcours postfixe b. parcours infixe
e. Certaines solutions ne conviennent pas car elles passent par des nombres négatives ou effectuent des divisions non entières. On doit éliminer ces cas. On peut aussi chercher à éliminer les doublons.
On peut explorer deux pistes : éliminer les cas de trop lors de la création de l’arbre des expressions ou bien lors de l’exécution de la fonction resoudre. Intuitivement, il me semble plus simple d’éliminer les cas non valables lors de la création des expressions et d’éliminer les doublons lors de l’exécution de la fonction resoudre. On peut par exemple associer à chaque solution sa liste de calculs tels qu’affichés dans la question 3.c. que l’on ordonne afin d’éliminer les solutions effectuant les mêmes calculs.
5.
a. L’ajout de l’expression à la liste s’effectue ligne 70 dans le fichier compteEstBonEleve.py non modifié : if len(cards) == 1:
expressionTree_list.append(cards[0])
Il suffit d’écrire un test pour ajouter l’expression à la liste si et seulement si la valeur de l’expression est égale à l’objectif goal.
b. La méthode indiquée ci-dessus ne teste que les expressions utilisant toutes les cartes. Or, certaines solutions peuvent n’utiliser qu’une partie des cartes.
Il est donc plus intéressant de tester chaque expression intermédiaire newcard lors de sa construction (fait à la ligne 110 du fichier compteEstBonEleveCorrigeQ5.py).