Universit´e Paris Diderot L2 Informatique Ann´ee 2015–2016
3. ´
Ecrire un algorithme CptFeuille qui ´etant donn´e un arbre aretourne le nombre
de feuilles de l’arbre a.
NB : Sur l’exemple, on doit renvoyer 4.
Profil : entier CptFeuille(arbre a)
Quelle valeur retourne votre algorithme sur l’arbre test ?
4. Ecrire un algorithme CptOcc qui ´etant donn´e un arbre aet un entier xretourne le
nombre d’occurrences de xdans l’arbre de racine a.
NB : Sur l’exemple et avec x=4,ondoitrenvoyer2.
Profil sugg´er´e : entier CptOcc(arbre a, entier x)
Quelle valeur retourne votre algorithme sur l’arbre test avec x=4?
5. Ecrire un algorithme Hauteur qui ´etant donn´e un arbre aretourne la hauteur de
l’arbre (la longueur du plus long chemin direct entre la racine et une feuille, et par
convention on prendra -1 comme hauteur pour l’arbre vide).
NB : Sur l’exemple, on doit renvoyer 3.
Profil sugg´er´e : entier Hauteur(arbre a)
Quelle valeur retourne votre algorithme sur l’arbre test ?
Exercice 4 : Backtracking - 6 points
On s’int´eresse ici aux mots construits `a partir d’un alphabet ⌃(un ensemble fini de
lettres). Par exemple, si ⌃={a, b, c}, alors les mots aaab,abc,abbbbbaaaab sont des mots
possibles. Le mot vide est not´e "et il est aussi un mot possible (de longueur 0). Mais le
mot abbdaab n’est pas possible car dn’appartient pas `a ⌃.
Dans cet exercice, on pourra utiliser toutes les fonctions classiques sur les chaˆınes de
caract`eres : concat´enation (+), acc`es au i-`eme caract`ere (w[i]), longueur (|w|), la r´ep´etition
d’une lettre ifois (i*’a’). . .
1. Etant donn´e un alphabet ⌃repr´esent´e par un tableau Tde taille n(T[i] est la
i-`eme lettre) et un entier k,´ecrire un algorithme qui affiche tous les mots
de longueur kpossibles avec ⌃.
NB : Avec l’alphabet ⌃={a, b, c}et k= 2, l’algorithme devra afficher:aa,ab,
ac,ba,bb,bc,ca,cb,cc.
Appliquer votre algorithme `a l’alphabet ⌃={a, b}(donc T=[a,b] et k=3.
On d´ecrira avec pr´ecision le d´eroul´e de l’algorithme.
Profil sugg´er´e si algorithme r´ecursif : void GenererMot(T,k,w) o`u west le mot en
cours de construction (mot vide au premier appel). Et profil sugg´er´e pour version
it´erative : void GenererMot(T,k).
2. On reprend la question pr´ec´edente mais cette fois, on remplace l’argument kpar
un tableau de caract`eres m[-] de longueur kqui va imposer un motif particulier
aux mots recherch´es : soit m[i] est une lettre de ⌃et alors tous les mots affich´es
par l’algorithme devront avoir cette lettre `a la position i,soitm[i] est *et alors
n’importe quelle lettre de ⌃peut se trouver `a la position i.´
Ecrire un algorithme
pour r´esoudre ce probl`eme.
NB : Avec l’alphabet ⌃={a, b, c}et m=[a,*], l’algorithme devra afficher:aa,ab,
3/4