TP5

publicité
Université Paris Diderot
MASS L2
JAVA
Année 2007-2008
TP n◦5 - Correction
Recherche et tris
L’objectif de ce TP et des suivants va être d’implémenter divers algorithmes de recherche et
de tri, dans le but de gérer un annuaire inversé.
Testez vos méthode au fur et à mesure !
Exercice 1
Sur la page des TPs, récupérez les sources Telephone.java, Abonne.java, et essayez de comprendre comment fonctionnent ces classes. Compléter les corps des méthodes indiquées par
////////////// . Ne passez pas plus de 30 min sur cette question. Le cas échéant, récupérez
les sources déjà complétées.
Exercice 2
Récupérez les sources Annuaire.java (ne vous occupez pas des classes Loader et Chrono
définies en bas du fichier).
Une méthode pour charger un annuaire à partir d’un fichier texte est déjà implémentée.
Divers annuaires sont disponibles au même endroit. Vous les utiliserez dans la suite pour
tester vos méthodes.
1. Écrire une méthode void affiche() affichant l’annuaire.
On rappelle que la comparaison de 2 chaı̂nes de caractères se fait de la manière suivante :
if (s.equals(t)) ...
2. Écrire une méthode public void numero(String nom) qui affiche les prénoms et numéros
de toutes les personnes portant le nom indiqué. Quelles-sont les complexités dans le
meilleur et dans le pire des cas de cet algorithme ?
3. Écrire une méthode public Abonne abonne(Telephone tel) renvoyant l’abonné correspondant au numéro de téléphone, ou null s’il n’y a pas d’abonné correspondant. Quellessont les complexités dans le meilleur et dans le pire des cas de cet algorithme ?
4. Les versions triées des annuaires sont également disponibles. Implémentez un algorithme
Abonne dicho(Telephone tel) effectuant une recherche par dichotomie de l’abonné correspondant au numéro de téléphone sur un annuaire trié. Quelles-sont les complexités
dans le meilleur et dans le pire des cas de cet algorithme ? Quelle sont les avantages et
inconvénients de cette méthode par rapport à la précédente ?
Exercice 3
1. En utilisant les commandes Chrono.start(); (démarer un chronomètre) et Chrono.time();
(afficher le temps du chronomètre en millisecondes), comparez empiriquement les vitesses
de abonne et dicho.
2. Écrire une méthode boolean estClasse() qui renvoie true si et seulement si l’annuaire
est classé.
3. Écrire une méthode boolean doublon() qui renvoie true si et seulement si l’annuaire
contient 2 personnes ayant les mêmes numéros de téléphone.
1
Téléchargement