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
Noeud
tel 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
None
soit des instances deNoeud
.
Si les deux fils d’un noeud sont None, on dit que le noeud est une feuille.
- Ajouter un propriété
feuille
qui retourne si un noeud est une feuille
- Créer une classe
Arbre
qui surchargeMutableSet
et qui:
- possède une racine qui est une soit une instance de
Noeud
soit None si l’arbre est vide - possède deux propriétés
ArbreGauche
etArbreDroit
qui 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
ArbreGauche
etArbreDroit
.Ajoutez une propriété
profondeur
qui 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
Arbre
est 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:
min
qui retourne le plus petit hash de toutes les valeurs de l’arbremax
qui retourne le plus grand hash de toutes les valeurs de l’arbremonotone
qui 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’
ArbreMonotone
où 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
ArbreMonotone
en une classeArbreEquilibre
en ajoutant des opérations deRotationGauche
etRotationDroite
en place.
Ajouter une méthode RotationDroite
et
RotationGauche
qui modifie en place
l’arbre après ces opérations.
Surcharger l’opération
add
et l’opérationdiscard
pour garantir que votre arbre est toujours équilibréFaites une analyse de complexité de votre structure de données
Compiled the: mer. 04 sept. 2024 12:49:53 CEST