1ereSession Pr Correction
Université de Mons-Hainaut FS/1/5684 – Algorithmique Examen de première session – Partie pratique Le 12 févner 2008 Consignes – pour cette partie, vous avez le drolt de consulter vos notes et tout ouvrage qui vous semble utile. – Cette partie de l’examen dure 1 heure 45 minutes. – Veillez à bien justifier vos réponses. Une réponse mal justifiée, même correcte, ne permet pas d’obtenir le maximum des points. Quand vous indiquez une complexité, veillez à bien expliquer ce que sont les paramèt O(n2 ) n’a aucun sen dans la définition de la strucL Question 1 -4 points s le O.
Par exemple, l’algorithme ou org Sni* to View Considérons un tableau M de nombres entiers à lignes et c colonnes. On appelle j] l’élément ? la l’gne i et à la colonne j. Ce tableau possède la propriété suivante : si on parcourt le tableau M ligne par ligne, la séquence des éléments rencontrés est strictement croissante. par exemple, le tableau M pourrait être ( = 3 etc 4) : 13 7 IO 15 27 28 30 39 52 100 On propose l’Algorithme 1, qui reçoit un tableau M tel que décrit ci-dessus ainsi qu’une valeur k.
Il renvoie fonctionne cet algorithme, et donnez-en la complexité en fonction es dimensions du tableau (veillez à bien détailler tout le raisonnement qui amène à la réponse finale). début Entier 1 tant que g k et i g faire Entier bi 1, bs c, m bi + bs—bi i:=i+l i = 1 alors retourner faux ; sinon 2 tant que -k et bi g bs faire si k alors bi slnon bs m —1 ; m bi + bs-bi si bs < bi alors retourner faux ; sinon retourner vrai ; fin Algorithme 1 : Un algorithme pour recherche une valeur k dans une matrice. t sûr qa:et k • ifst "'s 2 i * *'Vs "S i Yst "*ére •r't•eèrÇ k êtrS A qs ••rès tr't* ter':t$s "s Sst 0( "Mta-wté "t Sst Oet O(log(nombre "'s* A Sst OC + St sets tSrQSs Sst Question 2 —3 points Donnez un algorithme itératif qui fusionne deux listes triées. Cet algorithme doit recevoir deux listes LI et L2 , qui contiennent des entiers et sont triées par ordre croissant.
L’algorithme doit renvo er une seule liste L qui contient tous les LI et de Q, et qui est RGF3CFB renvoyer une seule liste L qui contient tous les éléments de LI et de L2 et qui est triée elle aussi par ordre croissant. Remarque : il ne faut pas créer de nouveaux éléments dans mais bien déplacer les éléments de LI et L 2 dans Cet algorithme détruira donc LI et L2 (ce n’est pas un problème). *Urs têts St • L 2 +Srs têts é. é4S•t ? w•stq résm. st Sst éa. é4SVt LI se &StPtS S é,. é4S’t rettr•r. z+$ ers « ‘s s•tot•• LI st Q * rSterSr’ etc. •est$s s,’ LI se NIL et L2 NIL* ss & • xrr•et « Ss é. é4$•ts ? « O ût$wsq* t OutS « tr’•$r 0(n2 Où n « ‘Vs LI st Q X e • sSrt$* (n—l = O(n2 ) « ès a. Ors n A * &résS’tS Elem * FusionListes(Elem * LI , Elem * Q) Elem * p ; si LI = NIL alors retourner L 2 ; sinon si Q = NIL alors retourner LI si LI . info < L2 . info alors