• Aucun résultat trouvé

Contrôle de Algorithmique et Programmation Java

N/A
N/A
Protected

Academic year: 2022

Partager "Contrôle de Algorithmique et Programmation Java"

Copied!
5
0
0

Texte intégral

(1)

POLYTECH – PeiP2 2016–2017

Contrôle de Algorithmique et Programmation Java

Durée : 1h30 Aucun document autorisé

Nom : Prénom : Groupe :

Note : la qualité des commentaires, avec notamment la présence d’affirmations significatives, ainsi que les noms donnés aux variables, l’emploi à bon escient des majuscules et la bonne inden- tation rentreront pour une part importante dans l’appréciation du travail.

1 Recherche

I 1. Écrivez de façon algorithmique et récursive la fonction rechercheDichoR qui recherche un élé- ment E de clé c de façon dichotomique dans une liste linéaire ordonnée lst. Si la clé n’est pas trouvée, il faudra évidement le signaler. Vous donnerez la complexité de cette recherche dans le pire des cas. Rappel :

longueur : Lo → naturel

i`eme : Lo×naturel → E L’en-tête de cette fonction est le suivant : { A n t é c é d e n t : à c o m p l é t e r

R ô l e : . . . . }

f o n c t i o n r e c h e r c h e D i c h o R ( lst , c , gauche , d r o i t e ) : E

(2)

2 Liste ordonnée

I 2. On définit récursivement l’ensemble des listes ordonnées Lo comme : Lo=∅ | E × Lo, avecE l’ensemble des éléments (valeur + clé) de la liste muni d’une relation d’ordre sur la clé. Donnez les axiomes de l’opération supprimer qui supprime un élément de clécdans une liste ordonnée l.

On considérera la relation d’ordre « inférieur ou égal ». La signature de l’opération supprimer est la suivante :

supprimer : Lo × Cl´e → Lo

3 Tri

Dans cet exercice, on se propose d’étudier un algorithme de tri appelé tri à bulles (bubble sort).

Le tri à bulles permute les éléments mal ordonnés, en faisant «remonter » les éléments les plus petits vers le début de la liste. On présente ci-dessous une version algorithmique et itérative de cette méthode de tri.

f o n c t i o n t r i B u l l e s ( lst : l i s t e d ’ é l é m e n t s c o m p a r a b l e s ) f a i r e

é c h a n g é s ← f a u x

p o u r t o u t i de l o n g u e u r ( lst ) -1 à 1 f a i r e

s i clé ( i è m e ( lst , i + 1 ) ) < clé ( i è m e ( lst , i )) a l o r s é c h a n g e r ( i è m e ( lst , i +1) , i è m e ( lst , i ))

é c h a n g é s ← v r a i f i n s i

f i n p o u r t a n t q u e é c h a n g é s f i n f o n c

(3)

I 4. Quelle est la complexité (en nombre de comparaisons effectuées) de cet algorithme sur une liste de longueurnsi :

— la liste est déjà triée dans l’ordre croissant ;

— la liste est triée dans l’ordre décroissant.

I 5. En admettant que sa complexité moyenne soit similaire à sa complexité dans le pire des cas, comment le tri à bulles se compare-t-il au tri par insertion et au tri rapide, dont vous rappellerez les complexités moyennes (toujours en nombre de comparaisons effectuées) ?

(4)

I 6. À la fin de lak-ème itération de la boucletantque, quels sont les éléments bien triés à coup sûr ? Utilisez cette observation pour proposer une amélioration de l’algorithme. À votre avis, dans quelle mesure la complexité (en nombre de comparaisons) de la méthode est-elle modifiée ?

(5)

4 Arbre Binaire

On rappelle qu’un arbre binaire implémente l’interface suivante : p u b l i c i n t e r f a c e A r b r e B i n a i r e < T >

{

p u b l i c b o o l e a n e s t V i d e ();

p u b l i c T v a l e u r () t h r o w s A r b r e V i d e E x c e p t i o n ;

p u b l i c A r b r e B i n a i r e < T > sag () t h r o w s A r b r e V i d e E x c e p t i o n ; p u b l i c A r b r e B i n a i r e < T > sad () t h r o w s A r b r e V i d e E x c e p t i o n ; }

I 7. Écrivez en Java une méthodeéchangerSousArbrequi échange le sous-arbre gauche et le sous-arbre droit de l’arbre courant.

I 8. En TD, nous avons développé une méthode qui calcule la hauteur d’un arbre binaire. En utilisant cette méthode sans la récrire, écrivez en Java la méthodetrierSaParHauteurqui transforme l’arbre courant de telle sorte que pour tout noeud de cet arbre, la hauteur du sous-arbre gauche soit plus petite que celle du sous-arbre droit (c’est-à-dire que s’il existe un noeud de l’arbre qui ne vérifie pas cette propriété, la fonction doit inverser les deux sous-arbres de ce noeud). Remarque : ne pas gérer l’exceptionArbreVideExceptiondans untry-catch.

Références

Documents relatifs

• Ils ont la portée de la classe : leur valeur est accessible à partir de n’importe quelle méthode de la classe. • Leur valeur est initialisée par le constructeur et peut

— comparer le prix des voitures du tableau (en utilisant la méthode comparePrix ) pour per- mettre au client de réserver la moins chère (pour 4 jours)?. 2

7 avec la méthode compterPairs qui renvoie le nombre d’entiers pairs contenu dans le fichier

Cette est souvent représentée par un graphique mettant en relation le nombre de feuille dans l’arbre et le taux d’erreur : sur l’échantillon d’apprentissage,

Avec comme argument un contrôleur de processus léger, héritant de la classe Thread, dont la méthode run() de la cible spécifie du code. Lorsqu'elle s'arrête, la JVM appelle

Remarque : Le compilateur Java sait que l’attribut coeffA est défini dans la classe Equation mais le droit d’accès n’est pas suffisant pour être utilisé

• Chaque classe enveloppe poss`ede des m´ethodes pour extraire la valeur d’un objet : primitifValue() appliqu´ee sur l’objet enveloppe renvoie une valeur de type primitif.. •

• Chaque classe enveloppe poss`ede des m´ethodes pour extraire la valeur d’un objet : primitifValue() appliqu´ee sur l’objet enveloppe renvoie une valeur de type primitif.. •