DEVUIP
Service scolarit´e
Ann´
ee : 2012/2013 Semestre 2
PARCOURS : Licence LIMI201 & LIMI211
UE J1MI2013 : Algorithmes et Programmes
´
Epreuve : Devoir Surveill´e Terminal
Date : Lundi 10 juin 2013
Heure : 8 heures 30
Dur´ee : 1 heure 30
Documents : non autoris´es
´
Epreuve de M. Alain Griffault
Code d’anonymat :
Avertissement
La plupart des questions sont
ind´ependantes.
`
A chaque question, vous pouvez au
choix r´epondre par un algorithme
ou bien par un programme python.
Les indentations des fonctions ´ecrites en
Python doivent ˆetre respect´ees.
L’espace laiss´e pour les r´eponses est suf-
fisant (sauf si vous utilisez ces feuilles
comme brouillon, ce qui est fortement
d´econseill´e).
Question Points Bonus Points Score
Mise en bouche 7 0
Algorithmes de rang 13 1
Total: 20 1
Exercice 1 : Mise en bouche (7 points)
(a) (1 point) Deux nombres sont oppos´es si leur somme est ´egale `a 0. Deux nombres sont inverses si
leur produit est ´egal `a 1.´
Ecrire un algorithme sontInvOuOpp(a,b) o`u aet bsont deux nombres,
qui retourne Vrai si aet bsont inverses ou oppos´es, Faux sinon.
(b) (2 points) ´
Ecrire un algorithme existeInvOuOppConsecutifs(T) o`u Test un tableau de nombres,
qui retourne Vrai si Tcontient deux nombres cons´ecutifs oppos´es ou inverses, Faux sinon.
UE J1MI2013 : Algorithmes et Programmes DS Terminal, Ann´ee 2012/2013
(c) (2 points) ´
Ecrire un algorithme existeInvOuOpp(T) o`u Test un tableau de nombres, qui retourne
Vrai si Tcontient deux nombres, ayant des indices diff´erents, oppos´es ou inverses, Faux sinon.
(d) (2 points) ´
Ecrire un algorithme nbInvOuOpp(T) o`u Test un tableau de nombres, qui retourne le
nombre de paires d’indices (i,j) telles que : d’une part i<j; d’autre part T[i] et T[j] soient
des nombres oppos´es ou inverses.
Page 2 sur 8
UE J1MI2013 : Algorithmes et Programmes DS Terminal, Ann´ee 2012/2013
Exercice 2 : Algorithmes de rang (13 points)
Le probl`eme de la s´election consiste `a trouver dans un tableau de nombres l’´el´ement dit de rang i.
Pour cet exercice, du fait que les indices d’un tableau Tsont compris entre 0et longueur(T)-1, nous
admettrons que l’´el´ement de rang 0est le plus petit ´el´ement du tableau, et que l’´el´ement de rang
longueur(T)-1 est le plus grand.
Exemple : Soit T= [8,6,53,8,2,9,3,10], alors :
Les ´el´ements de rang <0sont ind´efinis.
L’´el´ement de rang 0est 2.
L’´el´ement de rang 1est 3.
L’´el´ement de rang 2est 6.
L’´el´ement de rang 3est 8.
L’´el´ement de rang 4est 8.
L’´el´ement de rang 5est 9.
L’´el´ement de rang 6est 10.
L’´el´ement de rang 7est 53.
Les ´el´ements de rang >7sont ind´efinis.
Remarque 1 : Une solution simple au probl`eme de la s´election consiste `a utiliser un algorithme
quelconque de tri, puis de retourner l’´el´ement de rang souhait´e.
Algorithme 1: Rang(T,rang)
Donn´ees : Un tableau T de nombres, et rang un entier
R´esultat : Si rang est un indice, alors T[rang] apr`es avoir tri´e T
si rang<0 OU ranglongueur(T) alors
retourner nil;
Trier(T);
retourner T[rang];
Remarque 2 : Il est facile de se persuader qu’il n’est pas utile de trier tout le tableau pour avoir une
solution au probl`eme de la s´election. Dans cet exercice, nous allons adapter des algorithmes de tri vus
en cours afin d’obtenir des algorithmes de rang plus efficaces que le pr´ec´edent.
Dans toute la suite de l’exercice, vous pourrez utiliser la fonction classique Echange(T,i,j) qui ´echange
les valeurs du tableau Tindic´ees par iet j.
def echange (T, i , j ) :
TMP = T[ i ]
T[ i ] = T[ j ]
T[ j ] = TMP
Algorithme 2: Echange(T,i,j)
Donn´ees : Un tableau T de nombres, et
deux indices i et j
R´esultat : T[i] et T[j] ´echang´es
aux T[i];
T[i] T[j];
T[j] aux;
Page 3 sur 8
UE J1MI2013 : Algorithmes et Programmes DS Terminal, Ann´ee 2012/2013
(a) Solution adapt´ee du tri par s´election vu en cours.
def t r i S e l e c t i o n (T) :
for iin r ange ( l e n (T ) ) :
iMin = i
for jin r ange ( i +1, le n (T ) ) :
i f T[ j ]<T[ iMin ] :
iMin = j
i f iMin!= i :
echange (T, i , iMin )
Algorithme 3: TriSelection(T)
Donn´ees : Un tableau T de nombres
R´esultat : Le tableau T tri´e en ordre
croissant
pour i=0 `a longueur(T)-1 faire
iMin i;
pour j=i+1 `a longueur(T)-1 faire
si T[j] <T [iMin] alors
iMin j;
si i6=iMin alors
Echange(T,i,iMin);
Il semble ´evident qu’une fois la valeur d´esir´ee bien plac´ee dans le tableau, il est inutile de continuer
le tri.
i. (2 points) ´
Ecrire un algorithme rangSelection(T,r) fortement inspir´e de l’algorithme ou du
programme python triSelection(T) qui r´esout le probl`eme de la s´election. Ne pas oublier
de s’assurer que le rang d´esir´e correspond `a un indice du tableau.
ii. (1 point) Compl´eter le tableau des complexit´es en fonction de n=longueur(T) et du rang r.
Rappel : Les complexit´es ne d´ependent pas de valeurs particuli`eres des param`etres
net r, mais de valeurs particuli`eres contenues dans le tableau.
TriSelection(T) RangSelection(T,r)
Temps (meilleur des cas) Ω(n2)
Temps (pire des cas) O(n2)
Espace (meilleur des cas) Ω(1)
Espace (pire des cas) O(1)
Page 4 sur 8
UE J1MI2013 : Algorithmes et Programmes DS Terminal, Ann´ee 2012/2013
(b) Solution adapt´ee du tri `a bulle vu en cours.
def t r i B u l l e (T ) :
for iin r ange ( l e n (T) 1 ,0 , 1):
for jin r ange ( i ) :
i f T[ j ]>T[ j + 1 ]:
echange (T, j , j +1)
Algorithme 4: TriBulle(T)
Donn´ees : Un tableau T de nombres
R´esultat : Le tableau T tri´e en ordre
croissant
pour i=len(T)-1 `a 1 decroissant faire
pour j=0 `a i-1 faire
si T[j] >T [j+1] alors
Echange(T,j,j+1);
Il semble ´evident qu’une fois la valeur d´esir´ee bien plac´ee dans le tableau, il est inutile de continuer
le tri.
i. (2 points) ´
Ecrire un algorithme rangBulle(T,r) fortement inspir´e de l’algorithme ou du
programme python triBulle(T) qui r´esout le probl`eme de la s´election. Ne pas oublier de
s’assurer que le rang d´esir´e correspond `a un indice du tableau.
ii. (1 point) Compl´eter le tableau des complexit´es en fonction de n=longueur(T) et du rang r.
TriBulle(T) RangBulle(T,r)
Temps (meilleur des cas) Ω(n2)
Temps (pire des cas) O(n2)
Espace (meilleur des cas) Ω(1)
Espace (pire des cas) O(1)
Page 5 sur 8
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !