• Aucun résultat trouvé

temps de calcul des algorithmes récursifs

N/A
N/A
Protected

Academic year: 2022

Partager "temps de calcul des algorithmes récursifs"

Copied!
4
0
0

Texte intégral

(1)

Temps de calcul des algorithmes r´ecursifs

πλ Octobre 2013

derni` ere compilation : 4 novembre 2015

R´esum´e

L’objectif de cet exercice est de retrouver num´eriquement les r´esultats du coursconcernant le temps de calcul des algorithmesdiviser pour r´egner en g´en´eral, et en particulier, ceux dutri fusion et de la m´ethode de Ka- ratsuba.

1 Algorithme A

32

33 voidA(intn)

34 {

35 if (n>1) {

36 B(n);

37 A(n / 2);

38 A(n / 2);

39 }

40 }

La fonction r´ecursive A(n) divise un probl`eme de taille n en deux sous- probl`emes de taillen/2. Elle termine par unefusion B(n). Le temps de calcul de la fonctionA(n) d´epend uniquement de celui de la fusionB(n). Dans le cas d’un tri rapide, la fusionBest lin´eaire, et le temps de calcul deAest de la forme nlog(n). D’une mani`ere g´en´erale, une analyse de l’arbre d’ex´ecution deAdonne sur le champ la formule :

TA(n) =

l−1

X

k=0

2k×TB(n

2k) +TA(1)×n+ O(1) (1) pourn= 2l.

1

(2)

2 Mesure des temps

Nous avons vu comment mesurer les temps de calcul avec la commande du /usr/bin/time, dans cette exp´erience, nous utiliserons la fonctionclockde la glibc.

42 voidchronos(intmax)

43 {

44 clock t s;

45 int c, n = 1;

46 while (n<max){

47 s = clock();

48 A(n);

49 c = clock() −s;

50 printf (”\n%d %d”, n, c);

51 fflush (stdout);

52 n = n ∗2;

53 }

54 }

3 Ligne de commande

La fonctiongetopt()est utilis´ee pour g´erer les options courtes pass´ees par la ligne de commande :

56 intmain(intargc,char∗argv[])

57 {

58 int opt, m = 0;

59 while ((opt = getopt(argc, argv,”clns: ”)) !=−1){

60 switch (opt){

61 case’c’:

62 flag = 0;

63 break;

64 case’l ’:

65 flag = 1;

66 break;

67 case’n’:

68 flag = 2;

69 break;

70 case’s’:

71 m = 1<<atoi(optarg);

72 break;

73 default: /∗ ’?’ ∗/

74 fprintf (stderr , ”Usage: %s [cln] [−s size ]\n”, argv[0]) ;

75 exit (EXIT FAILURE);

2

(3)

Tab.1 – Les formes des temps de calcul.

TB TA facteur cach´e

constant lin´eaire . . . logarithmique . . . . lin´eaire nlog(n) . . . quadratique . . . .

76 }

77 }

78 chronos(m);

79 return0;

80 }

4 Mesure

Il s’agit d’utiliser gnuplot pour mettre en ´evidence le temps de calcul de l’algorithmeAdans le cas d’une fusion `a temps constant, logarithmique, lin´eaire et quadratique.

abc> wget h t t p : / / l a n g e v i n . univ−t l n . f r / c o u r s /PAA/ t p s / abc / abc . c

Vous devez notamment vous convaincre graphiquement que lorsque B est logarithmique,An’est pas Θ(nlogn) mais lin´eaire.

1. Faire des mesures de temps pertinentes.

2. Utilisergnuplotpour d´eterminer les formes des temps de calcul.

3. Compl´eter le tableautab. [1].

5 M´ ethode de Karatsuba

1. Implanter un algorithmeA3`a fusion lin´eaire.

2. Mettre en ´evidence le temps de calcul de la m´ethode de Karatsuba.

6 Tri fusion

1. Implanter une fonction float* aleas(int n) qui g´en´ere un tableau de nflottants al´eatoires.

2. Implanter une fonctionboole test(float* t, int n)qui retourne vrai si et seulement le tableautde taillenest en ordre croissant.

3. Implanter le tri fusion du cours pour trier des tables de flottants.

3

(4)

4. Proc´eder aux tests et mesures de temps de calcul.

5. D´eterminer la bonne valeur de seuil pour arrˆeter la r´ecursion au profit d’un tri par selection.

7 Tri rapide

1. Implanter le tri rapide `a division de Lomuto.

2. Proc´eder aux tests.

3. Faire une exp´erience num´erique pour mettre en ´evidence le nombre moyen de comparaisons.

4

Références

Documents relatifs

Lorsqu’une base de données est très volumineuse et non ordonnée, trouver une information dans cette base est très long et très ingrat.. En effet la seule solution est

Dans le tri rapide, après les 2 tris partiels, tous les éléments de la partie gauche sont inférieurs au pivot, alors que tous les éléments de la partie droite... naturelle, et

Pour tout ce TP, on se créera trois tableaux, l’un de longueur 10 (pour les tests de validité), les deux autres de longueur 1000 et 10000 (pour les tests d’efficacité), remplis

Tri du tableau T dans l’ordre croissant Affichage des valeurs triées Permutation de deux entiers Recherche de la position du

procedure saisie(var t:tab;var n:integer);.

– partager la liste ` a trier en deux sous-listes : les ´ el´ ements plus petits que le nombre choisit puis les plus grands. – ` a la fin, on ins` ere le nombre choisit entre ces

[r]

Question : Est-il possible de trier un tableau de n ´el´ements en moins de n · log( n ) op´erations dans le pire cas. Non si on n’utilise que des comparaisons 2 `a 2 et sans