• Aucun résultat trouvé

Algorithmique IN102-01

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmique IN102-01"

Copied!
15
0
0

Texte intégral

(1)

Algorithmique IN102-01

Michel Mauny

ENSTA

Pr´[email protected]

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 1 / 1

1 Pr´eliminaires Organisation

Evaluation, supports de cours´ Objectifs

2 Cours 1 – Notions de complexit´e

Algorithmes et mesures de complexit´e Suite de Fibonacci

Algorithmes de tri Efficacit´e

(2)

Groupes

Deux types de groupes : Groupes «A» et «B»

Mˆemes exigences, mˆeme ´evaluation Seuls les TD/PC diff`erent

Les groupes B1,2 (resp. B3,4) dans des salles attenantes

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 3 / 1

Programme

02/12 Complexit´e [PC]

09/12 Structures de donn´ees simples 16/12 Recherche en table [PC]

— —

— —

06/01 Arbres 13/01 Graphes

20/01 Analyse syntaxique [PC]

27/01 Contrˆole

(3)

Evaluation, supports de cours ´

Contrˆole de 3 heures le 27 janvier 2006

petits exercices (fonctions de 10 lignes — voir `a la fin du poly) documents de cours autoris´es

Supports de cours

Poly de Guillaume Poupard Planches

Sujets de PC/TP

Page web `a http://www.mauny.net/cours/ensta/algo/

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 5 / 1

Objectifs

Motivation : prendre du recul par rapport `a la programmation identification du probl`eme

recherche d’un algorithme analyse de complexit´e mise en œuvre

D´efinition du terme «algorithme»

Suite d’op´erations ´el´ementaires constituant un sch´ema de calcul ou de r´esolution d’un probl`eme

(Petit Larousse)

(4)

Complexit´ e d’algorithmes

But : mesurer l’efficacit´e intrins`eque d’un algorithme en fonction de la taille des donn´ees `a traiter

par d´enombrement d’op´erations ´el´ementaires repr´esentatives mesure asymptotique

complexit´e dans le cas le pire ou en moyenne complexit´e temporelle ou spatiale

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 7 / 1

Exemple classique : le tri

But : trier un tableau de n entiers d´enombrement des comparaisons

performance des algorithmes ´el´ementaires : «de l’ordre de» n2 comparaisons

algorithmes plus sophistiqu´es font passer de n2 `a n×log(n)

(5)

Notations de complexit´ e

D´efinitions :

f(n) = O(g(n)) ssi 0 ≤ f(n) ≤ c×g(n)

f(n) = Θ(g(n)) ssi c×g(n) ≤ f(n) ≤ c0×g(n) Exemples :

n2 + 3n+ 1 = Θ(n2) = Θ(50n2 + 12345) n/ln(n) = O(n)

50n10 = O(n10,01) 2n = O(exp(n)) exp(n) = O(n!)

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 9 / 1

Hi´ erarchie de fonctions

On peut ´etablir une hi´erarchie entre les fonctions usuelles : log(n) √

n n n2 n3 2n exp(n) n!

log(n) 3,3 6,6 10

p(n) 3,1 10 32

n 10 100 1000

n×log(n) 33 664 104

n2 100 104 106

n3 103 106 109

2n 103 1030 10300 exp(n) 2×104 1043 10434

n! 3,6×106 10158 102568

Note : nombre de particules dans l’univers 1080.

(6)

Suite de Fibonacci, version 1

F0 = F1 = 1

Fn = Fn−1 +Fn−2 si n > 1 1, 1, 2, 3, 5, 8, 13, 21, 34, . . .

Code r´ ecursif en C

int fibo1 (int n) { if (n 1)

return 1;

else

return fibo1(n−1)+fibo1(n−2);

}

Complexit´e : Θ(((1 +√

5)/2)n)

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 11 / 1

Suite de Fibonacci, version 1

Calcul de F

5

.....................

........

........

........

........

........

......

K F0

F1

F2

.....................

........

........

........

........

........

......

K

.....................

........

........

........

........

........

......

K

F0

F1

F2

F3

F1

@

@@ I

.....................

........

........

........

........

........

......

K

.....................

........

........

........

........

........

......

K *

H HH H Y F4

F1 F0

F2 F1

F5

F3

Complexit´e : Θ(((1 +√

5)/2)n)

(7)

Suite de Fibonacci, version 2

Calcul de F

8

F0 F1 F2 F3 F4 F5 F6 F7 F8

1 1 2 3 5 8 13 21 34

Complexit´e Θ(n)

Complexit´e spatiale Θ(n)

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 13 / 1

Suite de Fibonacci, version 2

Code it´ eratif en C, avec tableau auxiliaire

int fibo2 (int n) {

int ∗t; int i, int res;

t = new int[n+1];

t[0] = 1; t[1] = 1;

for (i=2; i≤n; i++) t[i] = t[i−1]+t[i−2];

res=t[n]; free(t);

return res;

}

Complexit´e Θ(n)

Complexit´e spatiale Θ(n)

(8)

Suite de Fibonacci, version 3

Calcul de F

8

-

- -

1 1 2

F2 F3 F4

2 3 5

1 2 3 F5 F6 F7 F8

8 13 21 34

5 3

F4

Complexit´e Θ(n)

Complexit´e spatiale Θ(1) (constante)

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 15 / 1

Suite de Fibonacci, version 3

Code it´ eratif en C, espace constant

int fibo3 (int n) { int f1, f2, t, i;

f1=1; f2=1;

for (i=2; i≤n; i++) { t=f2; f2=f1+f2; f1=t;

}

return f2; }

Complexit´e Θ(n)

Complexit´e spatiale Θ(1) (constante)

(9)

Suite de Fibonnacci, version 4

Fn+1 = 1×Fn + 1×Fn−1 Fn = 1×Fn + 0×Fn−1

Fn

Fn−1

=

1 1

1 0

×

Fn−1

Fn−2

=

1 1

1 0

n−1

×

F1

F0

On se ram`ene `a un probl`eme «d’exponentiation matricielle» (voir PC)

Complexit´e : Θ(log(n))

Complexit´e spatiale : Θ(1) (constante)

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 17 / 1

Pratique et th´ eorie sont d’accord

Temps de calcul

n 40 5.107 2.108 2.109 fibo1(n) 31 s calcul irr´ealisable fibo2(n) 0 s 18 s erreur d’ex´ecution fibo3(n) 0 s 4 s 19 s 3 min 15 s fibo4(n) 0 s 0 s 0 s 0 s

(10)

Le tri

But : trier un tableau de n ´el´ements (entiers, par exemple) D´enombrement de comparaisons

Algorithmes ´el´ementaires en O(n2)

Algorithmes plus sophistiqu´es font passer de O(n2) `a O(n×log(n))

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 19 / 1

Tri par insertion

Tri du tableau

tab

de n entiers

void triInsertion(int ∗tab, int n) { int i,j, clef;

for (i=1; i<n; i++) { clef = tab[i]; j = i−1;

while ( (j≥0) && (tab[j]>clef) ) { tab[j+1] = tab[j]; j = j−1; } tab[j+1]=clef; }

}

L’´el´ement au rang k est rang´e parmi ses k−1 pr´ed´ecesseurs.

Complexit´e Θ(n2) dans le cas le pire : tableau inversement tri´e Complexit´e Θ(n2) en moyenne.

(11)

Le tri par fusion

Diviser,

(diviser, (...), et fusionner)

, et fusionner

......

R

. .. .. .. .. .. .. .. . .. .. ..

. .. .. .. .. .. .. .. . .. .. .. ......

R

@

@@R

.. . .. .. .. .. . .. .. .. .. .

.. . .. .. .. .. . .. .. .. .. ...... .

R

......

R

@@R

Tri r´ecursif ... ...

...

...

Fusion

r (p+r)/2

p

p r

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 21 / 1

Tri par fusion

Tri du tableau

tab

entre les indices

p

et

r

void triFusion(int ∗tab, int p,r) { if (p<r) {

int q = (p+r)/2;

triFusion(tab, p, q);

triFusion(tab, q+1, r);

fusion(tab, p, q, r);

}

(12)

Tri rapide (quicksort)

Quicksort : tri r´ecursif bas´e sur un partitionnement.

Tri du tableau

tab

entre les indices

p

et

r

void triRapide(int ∗tab, int p,r) { if (p<r) {

int q = partitionner(tab, p, r);

triRapide(tab, p, q−1);

triRapide(tab, q+1, r);

}

Complexit´e dans le cas le pire : Θ(n2) Complexit´e en moyenne : Θ(n×log(n))

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 23 / 1

Complexit´ e compar´ ee

Algorithme Cas le pire En moyenne Tri par insertion

Tri `a bulle Θ(n2) Θ(n2)

Tri rapide Θ(n2) Θ(n×log(n)) Tri par fusion Θ(n×log(n)) Θ(n×log(n))

(13)

Th´ eorie et pratique sont d’accord

Temps de calcul :

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 25 / 1

Th´ eorie et pratique sont d’accord

(14)

Th´ eorie et pratique. . .

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 27 / 1

Th´ eorie et pratique. . .

(15)

Exemple : produit matriciel

But : multiplier 2 matrices n×n

D´enombrement des additions et multiplications entre ´el´ements de base Algorithmes ´el´ementaires en O(n3)

Algorithmes tr`es sophistiqu´es en O(n2,376)

Michel Mauny (ENSTA) Algorithmique IN102-01 Pr´[email protected] 29 / 1

Qu’est-ce qu’un algorithme efficace ?

Complexit´e en moyenne

Complexit´e dans le pire des cas Facilit´e de mise en œuvre

Efficacit´e en pratique Algorithmes hybrides

Références

Documents relatifs

VRAI ou FAUX ? Les applications suivantes sont des formes lin´ eaires sur un espace vectoriel :.. 1. Montrer que φ est

Syntaxe.- Pour multiplier deux octets, l’un des op´erandes doit ˆetre plac´e dans le registre AL et l’autre op´erande doit dans un un registre de un octet ou un emplacement

[r]

[r]

[r]

Pour chacun des items suivants, choisir la bonne r´eponse parmi celles qui sont propos´ees. Et puisque vous ˆetes d´esormais en pr´epa : v´erifiez que vous ˆetes capable de

[r]

Suite d’op´ erations ´ el´ ementaires constituant un sch´ ema de calcul ou de r´ esolution d’un probl` eme.