Compter les arbres d'analyse
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 30 — Grammaires non contextuelles
Énoncé
Soit la grammaire .
- Combien d'arbres d'analyse pour
n+n+n? pourn+n+n+n? - Reconnaître la suite obtenue.
- Pourquoi cela ne se voit-il pas sur la valeur calculée ?
Corrigé
1. Deux arbres pour n+n+n — selon que le de la racine est le premier ou le second. Cinq pour n+n+n+n.
2. On compte, par programmation dynamique sur les intervalles du mot :
| Mot | `n` | `n+n` | `n+n+n` | termes | |||
|---|---|---|---|---|---|---|---|
| Arbres |
Ce sont les nombres de Catalan , où est le nombre de . Ce n'est pas un hasard : un arbre d'analyse est ici un arbre binaire à nœuds internes — l'objet du chapitre chap:arbres —, et compter ces arbres, c'est compter les parenthésages de termes, exactement comme au chapitre chap:dynamique pour le produit de matrices. L'accord a été vérifié jusqu'à : arbres pour six .
3. Parce que l'addition est associative : et valent tous deux . La grammaire est ambiguë, mais l'ambiguïté n'a pas de conséquence observable sur la valeur.
C'est précisément ce qui rend le défaut dangereux. Remplaçons par : la même grammaire donne encore deux arbres pour 8-3-2, mais ils valent et . Une grammaire ambiguë ne devient un bogue que le jour où l'opérateur cesse d'être associatif — et ce jour-là, le bogue est déjà en production. On ne teste pas une grammaire sur l'addition.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.