• Aucun résultat trouvé

Exponentiation rapide

N/A
N/A
Protected

Academic year: 2022

Partager "Exponentiation rapide"

Copied!
2
0
0

Texte intégral

(1)

Algorithmique et programmation L2 MIASHS-Math

TP 4 2020-2021

R´ ecursivit´ e (suite), diviser pour r´ egner

Comparaison exp´ erimentale de l’efficacit´ e des tri fusion et tri ` a bulles

(a) Programmer en Python le tri fusion ´etudi´e en cours. Vous ferez dans un premier temps la fonction fusion(A,B) fusionnant deux listes tri´ees A et B, puis la fonction r´ecursive triFusion(L) triant une liste Ldonn´ee en entr´ee par la m´ethode du tri fusion.

(b) Comparer exp´erimentalement la vitesse du tri `a bulles avec le tri fusion. Pour cela vous tirerez al´eatoirement des tableaux de taille croissante (par exemple 1000,2000, . . . ,10000), puis tracerez les deux courbes correspondant au temps d’ex´ecution du tri `a bulles et du tri fusion sur ces tableaux successifs.

— Pour mesurer le temps, une m´ethode consiste `a r´ecup´erer l’heure avec time.perf counter()1 qui renvoie l’heure courante avant et apr`es la proc´edure dont on veut mesurer le temps d’ex´ecution puis faire la diff´erence (il faut pour cela mettreimport timeen d´ebut de programme) ;

— On peut tracer plusieurs courbes avec la librairiematplotlib. Par exemple : i m p o r t m a t p l o t l i b.p y p l o t as plt

lx=r a n g e( 1 0 ) ly1=r a n g e( 1 0 )

ly2=[i**2 for i in r a n g e( 1 0 ) ]

plt.p l o t(lx,ly1) # [ x1 , x2 , . . . xn ] ,[ y1 , y2 ... yn ] plt.p l o t(lx,ly2) # [ x1 , x2 , . . . xn ] ,[ y ’1 , y ’2... y ’ n ] plt.s h o w()

Remarques sur la mesure exp´erimentale du temps d’ex´ecution :

— Pour mesurer le temps mis par l’algorithme A sur l’entr´ee x, il peut ˆetre int´eressant de r´ep´eter le calcul de A sur x un certain nombre de fois et de prendre le minimum des temps d’ex´ecution mesur´es. En effet, il se peut que d’autres processus (li´es au syst`eme) ralentissent certaines des ex´ecutions.

— Pour mesurer le tempstn mis par l’algorithme Asur les entr´ees de taille ndans le pire cas, il peut ˆetre utile de tirer au hasard un certain nombre d’entr´ees de taille n, de mesurer le temps mis par l’algorithmeA sur chacune de ces entr´ees par la m´ethode ci-dessus, puis de prendre pour pour tn

le maximum des temps obtenus. Ceci est utile pour la version optimis´ee du tri `a bulles (celle qui ne fait pas de passage inutile) puisque le nombre d’´etapes de l’algorithme d´epend fortement du tableau lui-mˆeme et pas uniquement de sa taille (en revanche, le nombre d’´etapes de la premi`ere version du tri `a bulles ou du tri fusion ne d´epend essentiellement que de la taille de l’entr´ee).

1. Ou la fonctiontime.clock()sur les versions plus anciennes de Python.

(2)

Exponentiation rapide

(a) ´Ecrire une fonction r´ecursive expoNombre(a,n)prenant en entr´ee un nombreaet un entier natureln et retournant an, par la m´ethode d’exponentiation rapide ´etudi´ee en TD.

Dans la suite, on va calculer le n-i`eme terme de la suite de Fibonacci en faisant peu d’op´erations arithm´etiques, par la m´ethode vue en TD consistant `a calculer une puissance de matrice par la m´ethode d’exponentiation rapide. On code une matrice n×p par une liste de n listes, chacune compos´ee de p´el´ements.

(b) Si cela n’a pas ´et´e fait avant, ´ecrire une fonction retournant le produit de deux matrices de tailles compatibles.

En Python, on peut donner une fonction en param`etre d’une fonction. Plutˆot que d’´ecrire une nouvelle fonction d’exponentiation rapide `a chaque fois que les objets, et donc la fonction (a, b)7→a·b, changent, on peut ´ecrire une fonction d’exponentiation rapide plus g´en´erale qui prend cette fonction produit en param`etre.

(c) ´Ecrire une fonction r´ecursive expo(a,n,produit,e) prenant en entr´ee un objet a, un entier naturel n, une fonction produit et l’´el´ement neutre pour le produite, et retournantan.

(d) Tester cette fonction en donnant en param`etre une fonction produit retournant le produit de deux nombres.

Remarque : On peut aussi ne pas d´efinir une nouvelle fonction mais juste donner en param`etre lambda x,y: x*y, ce qui revient `a d´efinir cette fonction produit sans lui donner de nom.

(e) ´Ecrire une fonction fiboRapide(n)retournant l’´el´ement d’ordrende la suite de Fibonacci.

2

Références

Documents relatifs

Pour des queions, demande de pr´ecisions ou explications, n’h´esitez pas `a m’envoyer un mail `a igor.kortchemski@ens.fr , ou bien `a venir me voir au bureau

L’un de ces nombres est le r´ esultat affich´ e par ma calculette d’une fraction irr´ eductible p/q avec p et q entiers inf´ erieurs ` a 1000.. Les d´ ecimales de l’autre

Nous vous attendons pour une réunion visio d’information et de connexion avec les églises partenaires. Entr’Elles 2021 –

Construire sur un seul graphique les nuages de points de l’indice de Qu´ etelet en fonction de la taille, en fonction du poids, pour chaque sexe8. Repr´ esenter, sur un seul

Bulletin d’inscription à retourner à : CIVAM Bio 30 Julie PERRIN Domaine de Puechlong 30610 Saint-Nazaire-des-Gardies Nom : Prénom : Adresse : Tél : Email : ❐S’inscrit à

Ainsi le premier joueur perd ` a tous les coups s’il joue Ciseaux ; mais pour compenser ce d´ esavantage il re¸ coit c euros si les deux joueurs jouent Feuille (o` u c est un

Pour un algorithme donn´e prenant en entr´e en tableau, nous noterons a n et c n le nombre de lectures/´ecritures et comparaison dans le pire des cas lorsque le tableau est de

Vasopressina ndoxytocin,peptidescritica lforwa ter homeostasis, as well as social,sexualand matem al behavior,bothhave a directexcitatoryeffect onorexin neurons (Tsunematsuet