Moralit´e : par rapport `a ce qu’on a dit au tout premier paragraphe, les arbres binaires de
recherche ´equilibr´es ont l’avantage qu’aussi bien la recherche que l’ajout d’une donn´ee sont en
O(log(n)).
2 Une classe python fabriqu´ee suivant les principes du §1 :
les dictionnaires python
La classe dictionary n’est pas au programme, dans une ´epreuve d’´ecrit on devrait vous la pr´esenter !
a) Au §1, on a expliqu´e (modulo le probl`eme d’´equilibrage des arbres !) comment fabriquer une
structure qui permet de g´erer un dictionnaire de nmots avec une complexit´e en O(log(n)) pour la
recherche et l’ajout d’un mot. En python, il existe une structure qui fait exactement cela, la classe
dict.
Par exemple dico={’red’: ’rouge’, ’blue’: ’bleu’, ’yellow’ : ’jaune’}sera un dic-
tionnaire avec trois entr´ees, les mots en anglais ici seront les cl´es qui servent `a acc´eder aux valeurs
qu’elles r´ef´erencent (ici les mots en fran¸cais).
Voici quelques commandes de cette classe :
a={} # cr´eation d’un dictionnaire vide appel´e a
a[’truc’]=12 # cr´eation d’une entr´ee du dictionnaire avec la valeur 12 et `a la cl´e ’truc’
# eh oui c’est exactement ce qu’on ne peut pas faire avec les listes.. pas de out of range ici !
a[’truc’] # va renvoyer la valeur 12.
dico[’red’] # va renvoyer ’rouge’
’yellow’ in dico # va renvoyer True
’black’ in dico # va renvoyer False
Question (exemple) ´ecrire une fonction freq qui prend en param`etre une chaˆıne de ca-
ract`eres comme ’CABBAA’ et renvoie un dictionnaire o`u les lettres sont les cl´es et le nombre d’oc-
currence de chaque lettre est la valeur stock´ee pour chaque cl´es. Ainsi freq(’CABBAA’) renverra
{’A’: 3, ’B’: 2, ’C’: 1}. Noter qu’il n’y a pas d’ordre d´efini entre les cl´es d’un dictionnaire.
b) Quelque pr´ecision sur le parcours des dictionnaires :
(i) Avec dico comme ci-dessus, que donne le code :
for a in dico:
print(a)
(ii) Comment faire alors pour voir `a la fois les cl´es et les valeurs qu’elles r´ef´erencent dans
le dictionnaire dico ? Cr´eer une fonction ListeCouple qui prend en argument un dictionnaire et
renvoie une liste des couples (cl´e,valeur). Par exemple ListeCouple(dico) renverra (`a l’ordre
pr`es) :
[(’blue’, ’bleu’), (’red’, ’rouge’), (’yellow’, ’jaune’)]
3 Tri avec la construction d’un arbre binaire de recherche
On a vu au §1.3 comment on pouvait transformer une liste en arbre binaire de recherche.
Explicitement, `a l’aide de la fonction ajout d´efinie dans ce paragraphe, ´ecrire une fonction ABR qui
fabrique un tel arbre `a partir d’une liste. Ainsi pour L=[34,2,667,1,4,20],ABR(L) donnera :
[34, [2, [1, [], []], [4, [], [20, [], []]]], [667, [], []]]
Expliquer ce que fait alors la fonction suivante, appliqu´ee la variable arbre ci-dessus, et `a la
liste vide t=[] :
def parcoursProfondeur(arbre,t):
if arbre!=[]:
t=parcoursProfondeur(filsGauche(arbre),t)
4