Structures arborescentes
Arbre d'appel¶
Soit la fonction f
dont on donne le code python ci-dessous :
1 2 3 4 5 6 7 8 |
|
-
Pourquoi cette fonction peut-elle être qualifiée de récursive ? Justifier précisément votre réponse.
-
-
Dresser l'arbre d'appel associé à l'exécution de l'instruction
f(4)
. -
Quel affichage est réalisé lors de l'appel
f(4)
?
-
-
Soit \(x\) un entier positif. On note \(h\) le nombre de "niveaux" de l'arbre d'appel associé à l'instruction
f(x)
et \(N\) le nombre de nœuds de cet arbre.-
Déterminer \(h\) et \(N\) lorsque \(x = 4\).
-
Dans le cas général, exprimer \(h\) et \(N\) en fonction de \(x\). Comparer \(h\) et \(N\).
-
-
Reprendre les questions 2 et 3 avec la fonction
g
dont on donne le code ci-dessous :1 2 3 4 5 6 7 8
def g(x): """ int -> None """ if x <= 1: print("*") else: print(g(x - 1)) print(g(x - 2)) print("*"*x)
HTML¶
On peut représenter le code source d'une page HTML à l'aide d'un arbre. On donne ci-dessous la structure arborescente correspondante au code source d'une page HTML.
On appelle "bloc" une chaîne de caractère du type <balise> ... </balise>
.
1 2 3 4 5 6 7 8 |
|
-
Proposer un code HTML dont la structure correspond à l'arbre ci-dessus.
-
-
Quelle est la balise du nœud racine de cet arbre ?
-
Quelles sont blocs de la page html qui ne contiennent aucune balise interne ?
-
De combien de blocs est composée la page html au total ? Quels sont les blocs directement imbriqués dans le bloc
article
? -
Quel est le nœud de l'arbre qui a le plus d'enfants ?
-
Combien de paires de balises ouvrantes/fermantes entourent le bloc
<h2> ... </h2>
de votre code HTML ? Quelles sont-elles ? -
Au maximum, combien de balises sont-elles imbriquées les unes dans les autres ?
-
Arbre de syntaxe¶
Une phrase en français se fonde sur une structure hiérarchisée, donc non linéaire, et compte différents niveaux d'organisation (des mots, des groupes de mots, de la phrase). Ainsi, dans une première approximation, on peut dire :
-
une phrase
Ph
est constituée d'un groupe nominalGN
suivi d'un groupe verbalGV
. -
un groupe verbal
GV
est constitué d'un verbeV
puis d'un groupe nominal optionnel(GN)
puis d'un groupe prépositionnel optionnel(GP)
. -
un groupe nominal
GN
est constitué d'un déterminant optionnel(D)
suivi d'un nomN
et d'un groupe prépositionnel optionnel(GP)
. -
un groupe prépositionnel
GP
est composé d'une prépositionP
suivie d'un groupe nominalGN
.
On synthétise ces règles en (les éléments entre parenthèses sont optionnels) :
Ph = GN + GV
GV = V + (GN) + (GP)
GN = (D) + N + (GP)
GP = P + GN
La représentation en arbre permet de voir comment les mots et les groupes de mots s'articulent entre eux.
-
Indiquer sur chaque nœud interne de l'arbre ci-dessus le numéro de la règle de grammaire utilisée.
-
Déterminer les arbres de syntaxe des phrases suivantes :
-
Son chien mange un os dans la cuisine.
-
Le professeur de mathématiques corrige le contrôle avec ses élèves.
Remarque. "son", "un", "la", "cette", "le", "ses" sont des déterminants. "dans", "à" "avec", "de", sont des prépositions.
-
-
On considère la phrase : John voit l'homme sur la montagne avec un télescope.
-
Déterminer deux arbres de syntaxe distincts pour représenter cette phrase.
-
Pourquoi peut-on dire que cette phrase est ambigüe ?
Grammaticalement, à quoi cela est-il dû ?
-
Arbre d'expression arithmétique¶
On peut utiliser des arbres pour représenter et manipuler des expressions mathématiques.
Par exemple, l'expression \(\dfrac{1 + x^2}{1 - 2x}\) peut être représentée par l'arbre ci-contre.
Pour évaluer une expression représentée sous forme d'arbre, on applique l'algorithme suivant :
-
si la racine de l'arbre est une feuille, on renvoie la valeur stockée à la racine ;
-
sinon, la racine est un opérateur \(\square\) parmi \(+\), \(-\), \(\times\), \(\div\), \(\wedge\). On évalue récursivement le sous-arbre gauche en le nombre \(g\), puis on évalue récursivement le sous-arbre droite en le nombre \(d\). Le résultat de l'évaluation de l'arbre est le résultat de \(g \;\square\; d\).
-
-
Évaluer les arbres \(\mathcal{A}_1\) et \(\mathcal{A}_2\). À quelle expression mathématique correspondent-ils ?
-
À quelle expression mathématique correspond le troisième arbre ? Déterminer un arbre \(\mathcal{A}'_3\) dont le résultat de l'évaluation est le même que le résultat de l'évaluation de l'arbre \(\mathcal{A}_3\), pour toute valeur de \(a\), \(b\), \(c\), \(d\).
-
-
À quels arbres correspondent les expressions mathématiques suivantes :
- \(1 - 3\times 8 + 7\)
- \(1 - 3\times (8 + 7)\)
- \((1 - 3)\times 8 + 7\)
- \((1 - 3)\times( 8 + 7)\)
Que constate-t-on ?
-
La notation polonaise inverse est un système d'écriture des expressions mathématiques qui utilise un système de pile.
Pour évaluer une expression, on la parcourt de gauche à droite en plaçant les symboles dans la pile. Si le symbole est un nombre, on ne fait rien de plus. Si le symbole est un opérateur binaire \(\square\), on consomme les deux nombres précédents de la pile \(g\) et \(d\) et on place au sommet de la pile le résultat de \(g\; \square\; d\). À la fin du calcul le résultat de l'opération est le nombre au sommet de la pile.
-
En précisant les états successifs de la pile à chaque étape du calcul, évaluer les expressions suivantes :
4 7 + 3 *
4 7 3 * +
4 7 3 + *
2 4 3 × + 7 -
-
Déterminer une expression écrite en notation polonaise inverse pour chacun des arbres des arbres \(\mathcal{A}_1\), \(\mathcal{A}_2\), et \(\mathcal{A}_3\).
-
Déterminer une notation polonaise inverse des expressions de la question 2..
-
Quel est l'avantage de la notation polonaise inverse par rapport à la notation "usuelle" des calculs ?
-
-
-
En utilisant le constructeur
Arbre
vu en TP, instancier trois variablesa1
,a2
eta3
représentant respectivement les arbres \(\mathcal{A}_1\), $ \mathcal{A}_2$, et \(\mathcal{A}_3\). -
À quel parcours d'arbre correspond l'écriture en notation polonaise inverse d'une expression arithmétique ?
-
Écrire le code python d'une fonction
affiche_npi
qui étant donné un arbrea
représentant une expression arithmétique en affiche la notation polonaise inverse correspondante. -
Écrire le code python d'une fonction
affiche_infixe
qui étant donné un arbrea
représentant une expression arithmétique en affiche la représentation "usuelle" (avec des parenthèses).
-
Arborescence de fichiers¶
On considère une liste de dossiers et de fichiers ordonnés suivant l'arborescence ci-après.
-
home
dossier1
dossier11
dossier12
dossier2
dossier21
fichier211
fichier212
dossier22
-
Représenter cette arborescence sous forme d'arbre étiqueté.
-
On souhaite afficher cette arborescence à l'aide d'un algorithme. Quel type de parcours d'arbre doit-on utiliser ?
-
Proposer un code Python qui stocke l'arborescence dans une variable
A
de typeArbre
, puis qui en réalise un affichage similaire à celui de l'énoncé. Exécuter votre algorithme à la main puis l'implémenter et le tester.
Arbre généalogique¶
-
Réaliser votre arbre généalogique jusqu'à la génération de vos grands-parents inclus.
-
On souhaite obtenir l'affichage ci-contre.
Quel type de parcours d'arbre doit-on alors réaliser ?
Moi : ... Parent : ..., ... Grand-parents : ..., ..., ..., ...
-
Proposer un code Python qui stocke votre arbre généalogique dans une variable de type
Arbre
puis qui en réalise un affichage similaire à celui demandé. Exécuter votre algoritme à la main puis l'implémenter et le tester.