PYTHON - DEVOIR SURVEILLÉ 2 2
3) Ecrire une fonction maj(k,L1,L2), qui étant données deux listes L1,L2 et un entier k, renvoie le
couple (L1,k) si la longueur de la liste L1 est inférieure ou égale k-1 et le couple (L2,k-1-len(L1))
sinon.
[Qu. 2] En utilisant les fonctions précédentes, définir une fonction kiemePlusPetit(L,k) qui renvoie,
lorsque la valeur de kest inférieure ou égale à la longueur de L, le k-ième plus petit élément de la liste
L.
[Qu. 3] L’exécution de listeValeursDistinctes(n,N) renvoie une liste L.
Cette liste peut-être considérée comme résultat de l’expérience aléatoire consistant à effectuer ntirages
avec remise dans une urne contenant Nboules numérotées de 1 à N, en notant le numéro obtenu
après chaque tirage.
Pour kfixé, l’exécution de la fonction kiemePlusPetit(L,k) nécessite un certain temps ;). Ce temps,
étant une fonction de L, s’apparente à une variable aléatoire dont nous souhaitons estimer l’espérance.
Espérance qui elle, sera alors une fonction de n,Net k. On souhaite, Net kétant fixés, estimer cette
fonction de npour mesurer l’efficacité de l’algoritme utilisé.
Pour cela on utilise le module time et dans ce module la fonction perf_counter().
Si dans un script on utilise l’instruction t0=perf_counter(), puis plus loin t1=perf_counter(), alors
t1-t0 est égale au temps exprimé en secondes qui s’est écoulé entre ces deux instructions.
1) Ecrire une fonction estimTempsMoyen(m,k,nombreExp) qui :
α) réalise, pour chaque entier i∈[[1,10]],nombreExp exécutions de l’instruction
kiemePlusPetit(liste2ValeursDistinctes(i*m,100*m),k) ;
β) renvoie une liste de longueur 10 dont les valeurs sont les estimations des temps moyens
d’exécution de kiemePlusPetit(liste2ValeursDistinctes(i*m,100*m),k) pour i∈[[1,10]]
obtenues à partir du α) .
2) Tester la fonction plot du module matplotlib.pyplot en saisissant dans le shell, après avoir
importé cette fonction, plot([1,3,5],[4,6,0]).
En utilisant la liste renvoyée par estimTempsMoyen(100,10,300), représenter graphiquement le
temps moyen estimé d’exécution de kiemePlusPetit(liste2ValeursDistinctes(i*100,10000),10)
pour i∈[[1,10]] en fonction de i*100.
Quelle conjecture pouvez-vous faire sur la nature de cette fonction?
Exercice 2 - POO pour la r´esolution d’´equations polynomiales dans Q
On se propose de construire une classe pour manipuler des polynômes à coefficients entiers. Un
polynôme sera un objet ayant un unique attribut : la liste de ses coefficients. Par exemple, le polynôme
défini par :
P(x)=3x4−7x3−4x2+14x−4
sera représenté par un objet Ptel que :
>>> P.coeffts
[-4, 14, -4, -7, 3]
On souhaite notamment mettre au point une méthode permettant de dresser la liste (éventuellement
vide) des racines rationnelles d’un polynôme à coefficients entiers.
On aura ainsi :
>>> P.racinesQ()
[(2, 1), (1, 3)]