• Aucun résultat trouvé

ASD. DM2 - durée 2h00 (temps de rendu sur Moodle compris)

N/A
N/A
Protected

Academic year: 2022

Partager "ASD. DM2 - durée 2h00 (temps de rendu sur Moodle compris)"

Copied!
6
0
0

Texte intégral

(1)

14 mai 2020 - 10h15-12h15 Licence Informatique - Semestre 4 ASD

DM2 - dur´ee 2h00 (temps de rendu sur Moodle compris)

Consignes de rendu :

Date : mardi 14 mai 2020 - 10h15-12h15 Lieu : `a d´eposer sur le cours Moodle

Format : le devoir doit ˆetre r´edig´e de mani`ere manuscrite sur feuille (ayez une ´ecriture appliqu´ee) et l’ensemble des feuilles doivent ˆetre prises en photo (ou scan) et d´epos´ees sur Moodle (attention Moodle accepteau maximum 10 fichierset au maximum 50Mopar rendu).

Vous devez conserver votre copie de mani`ere `a pouvoir la produire sur demande.

Ce devoir comporte4exercices. Pour simplifier la lecture, l’´enonc´e de chaque exercice est sur une page.

La clart´e des explications et justifications sera un ´el´ement important pris en compte lors de la cor- rection.

C’est un travail individuel qui est demand´e.

INDIQUEZ : votre NOM, votre NUMERO DU GROUPE, votre NU- MERO D’ETUDIANT et NUMEROTEZ VOS PAGES

(2)

Exercice 1 : Quelques questions sur la complexit´e

Comp´etence ´evalu´ee : savoir restituer les connaissances du cours.

Q 1.1 Si je prouve qu’un algorithme est en Ω(n3), peut-il ˆetre en Θ(n2) ? R´epondre par oui ou non et justifier.

Corrig´e

Non. Si le meilleur des cas est en Ω(n3), aucun cas ne peut aveoir une complexit´e inf´erieur, orn2< n3∀n >1 Q 1.2 Si je prouve qu’un algorithme est en Θ(2n) dans le pire des cas, peut-il ˆetre en Ω(3n) ? R´epondre par oui ou non et justifier.

Corrig´e

Non. Si le pire des cas est Θ(2n), il ne peut y avoir des cas de complexit´e plus grande que 2n. Q 1.3 On peut r´esoudre l’´equation de r´ecurrence c(n) = 3c(27n) +√

n en utilisant le th´eor`eme g´en´eral.

R´epondre par vrai ou faux et justifier.Corrig´e Oui. a = 3, b = 27,log27(3) = 13. f(n) =

n =n12 = Ω(nlog27(3)+ε). On est dans le cas 3 du th´eor`eme en´eral. De plus aveck=34 on a 3pn

27 < k

n. Donc le th´eor`eme g´en´eral est applicable.

Q 1.4 Le tri fusion ne poss`ede pas de meilleur ou de pire des cas (pour le nombre asymtotique de compa- raisons). R´epondre par vrai ou faux et justifier.Corrig´e

Vrai. La fusion de deux tableaux tri´es admet un pire et un meileur des cas mais de mˆeme complexit´e asymptotique. Ou bien dire que le r´esultat du cours est une complexit´e en Θ(nlogn).

On s’int´eresse ici au calcul de l’exponentielle xn o`u nest un entier positif ou nul. Voici une proposition de code Python r´ealisant ce calcul :

def e x p o _ b r u t e ( x , n ):

a s s e r t ( n >= 0) if n == 0:

r e t u r n 1 e l s e :

r e t u r n x * e x p o _ b r u t e ( x , n -1)

Q 1.5 Est-ce une r´ecursivit´e terminale ? Justifier.

Corrig´e

Non. Une op´eration de multiplication est r´ealis´ee apr`es l’appel r´ecursif.

Q 1.6 Donner l’´equation de r´ecurrence qui calcule le nombre de multiplications pour ´elever un nombrex

`

a la puissance nen utilisantexpo brute.

Corrig´e

c(0) = 0,c(n) = 1 +c(n1)

Q 1.7 R´esoudre cette ´equation et donner le comportement asymptotique de l’algorithme.

Corrig´e

c(n) =n= Θ(n)

(3)

Exercice 2 : Occurrences d’un mot dans un texte

Comp´etence ´evalu´ee : ´evaluer la complexit´e d’un algorithme, identifier pire et meilleur des cas.

On cherche `a calculer toutes les positions d’occurrence d’un motudans un textet(i.e toutes les positions o`u le mot apparaˆıt).

def o c c u r r e n c e s ( t , u ):

n = len ( t ) m = len ( u )

for p in r a n g e ( n - m + 1 ) : i = 0

w h i l e i < m and t [ p + i ] == u [ i ]:

i +=1 if i == m :

p r i n t ( " o c c u r r e n c e en p o s i t i o n " + str ( p )) Pour n(la longueur de t) et m (la longueur deu) fix´es :

Q 2.1 D´ecrire un pire des cas pour le nombre de comparaisons de caract`eres.

Corrig´e

Il faut que uapparaisse `a chaque position de tpour s’assurer qu’on r´ealise des comparaisons avec toutes les lettres deu`a chaque position det.

test une r´ep´etition denfois la lettrextandis queuest la r´ep´etition demfois la lettrex. Ainsi toutes les positions detsont test´ees et toutes les positions deuaussi.

Q 2.2 Calculer le nombre exact de comparaisons de caract`eres r´ealis´ees dans le pire des cas.

Corrig´e

c(n) =

n−m

X

i=0 m−1

X

j=0

1 =

n−m

X

i=0

m=m×(nm+ 1)

Q 2.3 D´ecrire un meilleur des cas pour le nombre de comparaisons de caract`eres.

Corrig´e

u[0] n’apparaˆıt pas danst. On a donc un ´echec `a la premi`ere comparaison.

Q 2.4 Calculer le nombre exact de comparaisons de caract`eres r´ealis´ees dans le meilleur des cas.

Corrig´e

c(n) =

n−m

X

i=0

1 =nm+ 1

(4)

Exercice 3 : Files avec liste sentinelle

Comp´etence ´evalu´ee : comprendre et utiliser une structure de donn´ee.

On choisit d’implanter une file en utilisant une liste avec sentinelle. On rappelle (voir cours) qu’une liste avec sentinelle est une liste doublement chaˆın´ee avec une cellule1 particuli`ere dont le suivant pointe vers la premi`ere ’vraie’ cellule (i.e. contenant une valeur) et le pr´ec´edent pointe vers la derni`ere cellule. Le sch´ema ci-dessous illustre une liste avec sentinelle contenant 3 valeurs.

None

`

0 4 8

En Python, on fait le choix de mod´eliser la liste avec sentinelle avec des dictionnaires et de prendre pour convention que la cellule sentinelle contient la valeur None et que les autres cellules contiennent une valeur diff´erente deNone (ce afin de pouvoir identifier facilement la sentinelle).

Une file2 vide est mod´elis´ee par une liste avec sentinelle sans ´el´ement. Elle contient donc une seule cellule : la cellule sentinelle.

def e m p t y _ q u e u e ():

s e n t i n e l = { ’ v a l u e ’ : None , ’ n e x t ’ : None , ’ p r e v ’ : N o n e } s e n t i n e l [ ’ n e x t ’ ] = s e n t i n e l

s e n t i n e l [ ’ p r e v ’ ] = s e n t i n e l r e t u r n s e n t i n e l

Enfiler un ´el´ement dans une file s’´ecrit ainsi :

def e n q u e u e ( q , v ):

a s s e r t ( v is not N o n e ) f i r s t _ c e l l = q [ ’ n e x t ’ ] s e n t i n e l = q

n e w _ c e l l = { ’ v a l u e ’ : v , ’ n e x t ’ : f i r s t _ c e l l , ’ p r e v ’ : s e n t i n e l } s e n t i n e l [ ’ n e x t ’ ] = n e w _ c e l l

f i r s t _ c e l l [ ’ p r e v ’ ] = n e w _ c e l l

Q 3.1 Dessiner la repr´esentation d’une liste avec sentinelle vide.

Corrig´e

Q 3.2 Dessiner la repr´esentation d’une liste avec sentinelle avec un ´el´ement.

Corrig´e

1. Un triplet stockant la valeur, une r´ef´erence vers la cellule suivante, une r´ef´erence vers la cellule pr´ec´edente 2. On rappelle qu’un file se dit queue en anglais, enfiler se dit enqueue et defiler se dit dequeue

(5)

Q 3.3 Dessiner la repr´esentation de la liste avec sentinelle repr´esentant la file lorsqu’on a ex´ecut´e le code suivant :

q = e m p t y _ q u e u e () e n q u e u e ( q ,1)

e n q u e u e ( q ,2) e n q u e u e ( q ,3)

Corrig´e

Q 3.4 Donner le code Python de la fonction dequeue(d´efiler) qui prend en entr´ee une file, modifie la file, et retourne l’´el´ement qui sort de la file. Cette fonction d´eclenchera l’exception Exception dans la cas o`u il n’y a pas d’´el´ement `a d´efiler3.

Corrig´e

def d e q u e u e ( f ):

l a s t _ c e l l = f [ ’ p r e v ’ ]

if l a s t _ c e l l [ ’ v a l u e ’ ] == N o n e : r a i s e E x c e p t i o n ( " " )

l a s t _ c e l l [ " p r e v " ][ " n e x t " ] = l a s t _ c e l l [ " n e x t " ] l a s t _ c e l l [ " n e x t " ][ " p r e v " ] = l a s t _ c e l l [ " p r e v " ] r e t u r n l a s t _ c e l l [ ’ v a l u e ’ ]

(6)

Exercice 4 :

Comp´etence ´evalu´ee : concevoir un algorithme avec une complexit´e cible, r´einvestir ses connais- sances.

On se propose de traiter le probl`eme suivant : on dispose d’un tableau t de n valeurs tri´ees et d’un tableauu de mvaleurs non tri´ees et on veut construire un tableau den+m valeurstri´ees.

Remarquez que lorsqu’on r´ealise cette tˆache, on a n´ecessairement une complexit´e en espace en Ω(n+m) puisqu’on est oblig´e de construire un nouveau tableau pour le r´esultat.

Q 4.1 D´ecrire un algorithme, en fran¸cais ou en pseudo-code ou en Python, qui r´ealise cette tˆache et dont la complexit´e en nombre de comparaisons d’´el´ements est O(mlog(n+m)).

Corrig´e

On recopie le tableautdans un nouveau tableau de taillen+mpuis les valeurs du tableauuensuite. Puis on ins`ere par dichotomie (avec la partie d’insertion par dichotomie du tri insertion) chacune desmvaleurs non tri´ee.

Q 4.2 Justifier pr´ecis´ement de la complexit´e de votre algorithme.

Corrig´e

L’insertion de la premi`ere valeur se fait enO(log(n)), l’insertion de la deuxi`eme valeur se fait enO(log(n+

1)), ..., l’insertion de lam−i`eme valeur se fait enO(log(n+m1)). Cette somme est enO(mlog(n/m)).

Q 4.3 D´ecrire un algorithme, en fran¸cais ou en pseudo-code ou en Python, qui r´ealise cette tˆache et dont la complexit´e en nombre de comparaisons d’´el´ements est O(n+m+mlogm).

Corrig´e

Je commence par trier le tableau u dans un tableau v puis j’ins`ere les valeurs de v et t en parcourant lin´eairement les deux tableaux (comme dans le TP1).

Q 4.4 Justifier pr´ecis´ement de la complexit´e de votre algorithme.

Corrig´e

Le tri de u requiert O(mlogm) comparaisons en utilisant un tri fusion. Le parcours de t et v requiert n+mcomparaisons dans le pire des cas.

On suppose maintenant que les donn´ees en entr´ee (les ´el´ements de t etu) sont dans des listes doublement chaˆın´ees. Cette fois il n’est pas n´ecessaire de cr´eer de nouvel espace, la liste r´esultat ´etant un r´earrangement des listes initiales, on a donc une complexit´e en espace en Θ(1).

Q 4.5 Est-ce que l’un ou l’autre, ou les deux algorithmes des questions pr´ec´edentes sont adapt´es `a cette structure de donn´ees ? Expliquer.

Corrig´e

L’insertion par dichotomie ne peut pas fonctionner correctement sur les listes car on ne peut pas acc´eder

`

a n’importe quelle cellule de la liste en temps constant.

Par contre le second algorithme est plus appropri´e sauf qu’il n´ecessite de trieru. Le tri d’une liste chaˆın´ee avec le tri fusion est r´ealisable.

Références

Documents relatifs

– Ilias Amrani hilias.amrani@epfl.chi – Jan Brunner hjan.brunner@epfl.chi – Ratiba Djelid hratiba.djelid@epfl.chi – M´elanie Favre hmelanie.favre@epfl.chi – Nicolas

Cette question a été relativement bien traitée par l’ensemble des candidats, ce qui est assez remarquable par rapport aux éditions précédentes, même si certains placent

Rappelons que 2 matrices semblables ont le mˆ eme polynˆ ome caract´ eristique, et que le polynˆ ome caract´ eristique d’une matrice et de sa transpos´ ee sont identiques.. Un

Dans la deuxi` eme, on construit effectivement une suite de polynˆ omes qui converge uniform´ ement vers toute fonction continue.. Le m´ elange entre les parties analyse et les

Commentaires : C’est un sujet tr` es classique, o` u il est question d’´ equations diff´ erentielles, de s´ eries enti` eres, d’int´ egrales d´ ependant d’un param` etre,

I.A.1) Nous prouvons par exemple que si A est triangulaire inf´ erieure inversible, alors A − 1 est elle- mˆ eme triangulaire inf´ erieure. Il suffit alors de prendre la transpos´

En d’autres termes, pour tout nombre premier p, il existe ` a isomorphisme pr` es un et un seul groupe d’ordre p, qui est le groupe cyclique (donc ab´ elien) C

Dans un anneau principal, tout id´ eal premier non-nul est maximal (et donc, pour les id´ eaux non-nuls, les notions de premier et de maximal