On souhaite créer une classe qui ressemble à celle des arbres binaires de recherche, mais qui gère des intervalles comme objet de donnée. On propose ici une méthode simple.
Les bornes sont incluses dans les intervalles d'entiers, ainsi (7, 13) désignera la liste d'entiers 7, 8, 9, 10, 11, 12, 13.
Exemples d'application
Pour les besoins de cet exercice, on imagine que lorsqu'on envoie un satellite dans l'espace, celui-ci réclame une bande d'altitudes pour rester seul en sécurité.
On stocke les intervalles utilisés et on souhaite vérifier si le prochain envoi est compatible.
Dans le futur, on décide d'attribuer les fréquences (une bande d'un certain intervalle d'entiers) à des opérateurs par une méthode spéciale expérimentale due au hasard (et certainement très mauvaise). Chaque opérateur prépare une liste de 10 souhaits d'intervalle de fréquences entre \(0\) et \(10^6\) avec un total de largeur proposée égal à \(10^6\).
Tous les souhaits des opérateurs sont rangés dans l'ordre du plus fin au plus large. Ils sont proposés alors dans cet ordre-là. (Mélange en cas d'égalité).
Le premier est accepté, les suivants peut-être pas ! Les bandes ne doivent pas s'intersecter !
Chaque opérateur espère obtenir le total le plus élevé et voudrait tester des simulations de stratégie face à ses concurrents.
Envoyer votre idée à l'auteur, la plus plaisante sera insérée ici avec votre nom ou pseudo.
On vous demande d'écrire une classe ABRI pour aider à résoudre cette situation...
Description du test
🐍 Script Python
abri=ABRI()assertabri.est_vide()isTrue
On crée abri de la classe ABRI.
On vérifie que abri est vide.
graph TB
R("(7, 13)")
R --> R0(" ")
R --> R1(" ")
On tente l'insertion de (7, 13) ; c'est un succès. On obtient True.
graph TB
R("(7, 13)")
R --> R0(" ")
R --> R1(" ")
On tente l'insertion de (10, 23) ; c'est un échec. On obtient False.
en effet, il y a intersection ; 10 est déjà dans l'intervalle (7, 13)
graph TB
R("(7, 13)")
R --> R0(" ")
R --> R1(" ")
On tente l'insertion de (5, 10) ; c'est un échec. On obtient False.
en effet, il y a intersection ; 10 est déjà dans l'intervalle (7, 13)
graph TB
R("(7, 13)")
R --> R0("(2, 5)")
R0 --> R00(" ")
R0 --> R01(" ")
R --> R1(" ")
On tente l'insertion de (2, 5) ; c'est un succès. On obtient True.
On tente l'insertion de (15, 25) ; c'est un succès. On obtient True.
Exercice
Coder une méthode insertion de la classe ABRI qui prend a et b en paramètres, deux entiers, et qui tente d'insérer l'intervalle (a, b) dans la structure.
Si a > b, l'intervalle n'existe pas et la méthode n'est pas censée gérer ce cas.
On garantit qu'elle sera toujours utilisée correctement !
Ainsi a <= b est garanti.
Si aucun autre intervalle ne contient déjà un entier de (a, b), l'intervalle est inséré dans la structure d'arbre binaire et la méthode renvoie True ; signe du succès.
Sinon, l'intervalle (a, b) n'est pas inséré et la méthode renvoie False ; signe de l'échec.
La classe ABRI minimaliste est déjà donnée, il suffit de la compléter.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)