L3 MIASHS, Algorithme et Programmation 3, année 2022
Ceci est un DM facultatif.
La date de rendu est le 16 décembre.
L’objectif est d’implémenter une structure de donnée
MutableMapping via un arbre binaire équilibré.
Arbre simple
- Créer une classe
Noeudtel que:
- Chaque instance possède un fils droit et un fils gauche et une valeur
- Par défaut les fils droit et gauche sont soit
Nonesoit des instances deNoeud.
Si les deux fils d’un noeud sont None, on dit que le noeud est une feuille.
- Ajouter un propriété
feuillequi retourne si un noeud est une feuille
- Créer une classe
Arbrequi surchargeMutableSetet qui:
- possède une racine qui est une soit une instance de
Noeudsoit None si l’arbre est vide - possède deux propriétés
ArbreGaucheetArbreDroitqui sont des arbres dont les racine sont les fils gauche et droit du noeud racine.
La profondeur d’un arbre est définit ainsi:
Si la racine est None, sa profondeur est 0
Sinon, la profondeur est le max de la profondeur de
ArbreGaucheetArbreDroit.Ajoutez une propriété
profondeurqui retourne la profondeur de l’arbre.Faites en sorte que la taille et la profondeur soit en complexité \(O(1)\) (par exemple en les stockant et en les mettant à jour).
Arbre monotone
- Un
Arbreest dit monotone si:
- le hash de la valeur maximale de l’arbre gauche est plus petite que le hash de la valeur de la racine
- le hash de la valeur minimale de l’arbre droit est plus petite que le hash de la valeur minimal de l’arbre de droite.
Le hash d’une valeur se calcul hash(value).
Surcharger la classe Arbre en une classe
ArbreMonotone
Écrire des propriétés:
minqui retourne le plus petit hash de toutes les valeurs de l’arbremaxqui retourne le plus grand hash de toutes les valeurs de l’arbremonotonequi retourne si l’arbre est monotone
Faites en sorte que la méthode add préserve la propriété
monotone.
Surcharger
__contains__pour réaliser une implémentation enO(d)où d est la profondeur de l’abre.Trouver des exemples de taille arbitraire d’
ArbreMonotoneoù la taille de l’arbre et sa profondeur sont égale.
Arbre monotone équilibrés
Lire la page wikipedia sur les rotations dans les arbres binaires de recherche
Un arbre est dit équilibré si l’arbre gauche et l’arbre droit ont le même nombre de noeud (plus ou moins un noeud).
- Surcharger la classe
ArbreMonotoneen une classeArbreEquilibreen ajoutant des opérations deRotationGaucheetRotationDroiteen place.
Ajouter une méthode RotationDroite et
RotationGauche qui modifie en place
l’arbre après ces opérations.
Surcharger l’opération
addet l’opérationdiscardpour garantir que votre arbre est toujours équilibréFaites une analyse de complexité de votre structure de données
Compiled the: ven. 05 sept. 2025 16:27:42 CEST