• Aucun résultat trouvé

Chargée de cours: Lélia Blin

N/A
N/A
Protected

Academic year: 2022

Partager "Chargée de cours: Lélia Blin"

Copied!
114
0
0

Texte intégral

(1)

INTRODUCTION À L’ALGORITHMIQUE

Chargée de cours: Lélia Blin

Transparents:http://www-npa.lip6.fr/~blin/Enseignements.html

Email: lelia.blin@lip6.fr

(2)

EQUATION DE BASE

Programme = Structures de données + algorithmes

Niklaus Wirth (concepteur du langage Pascal) Le problème est de concevoir les structures de données de manière à ce que :

La mémoire utilisée soit minimale

(3)

STRUCTURE DE DONNÉES

Ordinateur = Système de Traitement de l’Information Unité de base = le bit (0/1)

1 octet = 8 bits Problème

l’information n’est pas manipulable au même niveau par l’homme et

par la machine

(4)

Une hiérarchie

réel entier

booléen caractère … Types primitifs

tableau

enregistrement, objet

listes, arbres Structures de

données abstraites

Types

structurés

(5)

Un ensemble structuré de données est construite par agrégation et hiérarchisation

de données ou structures de données plus primitives Définition récursive

Structure de données

(6)

Abu Ja Far Mohamed Ibn Al-rhowâ-rismî

Mathématicien, géographe, astrologue et astronome perse né vers 783 mort vers 850

Il est à l’origine des mots:

Algorithmique (latinisé)

Algèbre (dont il est considéré comme le père)

Notion d’Algorithme

(7)

Un algorithme est

la composition d’un ensemble fini d’étapes dont chacune est:

Définie de façon rigoureuse et non ambiguë

Effective (pouvant être réalisée en un temps fini)

Définition d’Algorithme

(8)

Calcul du PGCD de 2 entiers n et m

fonction pgcd(m : entier, n : entier) : entier var r : entier

début

r reçoit n

tant que r non nul faire

soit r, le reste de la division de n par m si r est non nul alors

n reçoit m m reçoit r fsi

ftq

Exemple d’Algorithme

(9)

SIMPLICITÉ & EFFICACITÉ

Notion d’algorithme plus générale que celle de programme 2 besoins (potentiellement) contradictoires:

Simplicité de l’algorithme

A comprendre

A mettre en œuvre

A mettre au point

Efficacité de l’algorithme

(10)

Somme des entiers de 1 à n

fonction somme(n : entier) : entier var som : entier

début

som = 0

pour i = 1 jusqu’à i = n faire som = som + i

fait

retourne som fin

Algorithme naïf (simple):

(11)

Somme des entiers de 1 à n

1 + 2 + … + (n-1) + n n + (n-1) + … + 2 + 1

(n+1) + (n+1) + … + (n+1) + (n+1) = n(n+1)

n(n+1) 2

Critères mathématiques

(12)

ITÉRATIF OU

RÉCURSIF

(13)

Définition récursivité

Un algorithme récursif est un algorithme qui s’appelle lui même

(14)

Exemple 1: Suite de Fibonacci

Fibonacci:

U

0

= U

1

= 1

Un = U

n-1

+ U

n-2

Solution intuitive (récursive) :

fonction fibo(n : entier) : entier début

si (n = 0) ou (n = 1) alors retourne 1

sinon retourne fibo(n-1) + fibo(n-2)

(15)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

(16)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

(17)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

(18)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

(19)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

(20)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

U3

(21)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

U3

U2

(22)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

U3

(23)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

U3

U2

(24)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

U3

(25)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

U3

U2

(26)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

U3

(27)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

U3

2 U1

(28)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

U3

(29)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

3

2 1

(30)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

3 U2

(31)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

3

2 1

U2

U1

(32)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

3 U2

(33)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

3

2 1

U2

1 U0

(34)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

3 U2

(35)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

3

2 1

2

1 1

(36)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

5

3 2

(37)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

U8

U7

U6

U5

U4

U3

U2 U1

U2

U3

U5

U1 U0

U2 U1

U1 U0

U4

U3

U2

U1 U0 U1

U2

U3

U1 U0

U2 U1

U1 U0 U4

U3

U2

U1 U0 U1

U2

U1 U0

U4

U3

U2

U1 U0 U1

U2

U1 U0 U6

U5

U4

U3

U2

U1 U0 U1

U2

U3

U1 U0

U2 U1

U1 U0

(38)

Exemple 1: Suite de Fibonacci

U0 = U1 = 1 Un = Un-1 + Un-2

34

21

13

8

5

3 2

3

8

2 1

5

3

2 1

2

3

1 1

2 1

1 1

5

3

2 1

2

1 1

5

3

2

1 1

1

2

1 1

13

8

5

3

2 1

2

3

1 1

2 1

1 1

(39)

Exemple 1: Suite de Fibonacci

Approche récursive: Simple

L’approche récursive est-elle efficace?

nombre d’appels récursifs 2 n

Méthode très redondante

Coûteux voire rédhibitoire

(40)

Exemple 1: Suite de Fibonacci

Solution itérative préférable

fonction fibo(n : entier) : entier var un, un_1, un_2, i : entier

début

un_1 = un_2 = 1

pour i = 2 jusqu’à i = n faire un = un_2 + un_1

un_2 = un_1 un_1 = un fait

retourne un

fin

(41)

Exemple 1: Suite de Fibonacci

Solution itérative préférable

fonction fibo(n : entier) : entier var un, un_1, un_2, i : entier

début

un_1 = un_2 = 1

pour i = 2 jusqu’à i = n faire un = un_2 + un_1

un_2 = un_1 un_1 = un fait

retourne un fin

i=2: u

n

=2 u

2

=1 u

1

=2

i=3: u

n

=3 u

2

=2 u

1

=1

i=3: u

n

=5 u

2

=3 u

1

=2

i=4: u

n

=8 u

2

=5 u

1

=3

i=5: u

n

=13 u

2

=8 u

1

=5

i=6: u

n

=21 u

2

=13 u

1

=8

i=7: u

n

=34 u

2

=21 u

1

=13

(42)

Exemple 2: Les tours de Hanoï

Situation initiale

Situation finale

(43)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A)

Next=6-D+A if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

n: Nombre d’anneaux D: Tour de Départ A: Tour d’Arrivée

Solution récursive

(44)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(45)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(46)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(47)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(48)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(49)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(50)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(51)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(52)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(53)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(54)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(55)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(56)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(57)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(58)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(59)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(60)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(61)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(62)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(63)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(64)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(65)

Exemple 2: Les tours de Hanoï

procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A

if(n > 0) {

Hanoi(n-1,D,Next);

Affiche "Deplacement disque tour ",D," vers tour ",A;

Hanoi(n-1,Next,A);

} }

(66)

Exemple 2: Les tours de Hanoï

Approche récursive: Simple

L’approche récursive est-elle efficace?

nombre d’appels récursifs 2 n -1

où n est le nombre d’anneaux

(67)

Exemple 2: Les tours de Hanoï

Légende:

il s’agissait de moines dans un temple qui devaient déplacer 64 tours en or, à raison d’un mouvement par jour.

Quand ils auraient fini, ce serait la fin du monde.

Quand est prévu la fin du monde?

Cela demanderait donc 2

64

– 1 jours,

soit en gros un milliard de milliard d’années !

(68)

EXPLOSION

COMBINATOIRE

Les petits ruisseaux font les grandes rivières

(69)

HISTOIRE DE L’EMPEREUR

8 2

4

2

5

Nb de grains de riz

(70)

HISTOIRE DE L’EMPEREUR

8 2

4

2

5

Σ i 2 i = 2 n+1 -1 = 2 64 –1

≈ 16.10 18 grains 1000 grains de riz

30kg

480.10 15 kg 480.10 12 T

Production mondiale 2009

Nb de grains de riz

(71)

LE VOYAGEUR DE COMMERCE

Le problème :

Soit un ensemble de n villes

Trouver le circuit le plus court

passant une fois et une seule par

(72)

LE VOYAGEUR DE COMMERCE

Solution naïve :

Tester toutes les combinaisons

Calculer le coût de chaque combinaison Conserver la meilleure

Coût ?

(73)

LE VOYAGEUR DE COMMERCE

Coût de la solution

Nombre de circuits : (n-1)!

Nombre d’additions pour chaque circuit : n-1

Nombre total d’additions : (n-1)*(n-1)!

(74)

LE VOYAGEUR DE COMMERCE

Nombre total d’additions : (n-1)*(n-1)!

2010 villes française de plus de 30.000 Habitants: 256 Supposons qu’il y en ait que 30 villes

265.10

34

opérations

juin 2011 processeur le plus rapide 8,162 PétaFLOPS

soit 10

15

opérations/seconde

3,24.10

18

s = 102.739.726.027 années

(75)

ETUDE DE LA COMPLEXITÉ

LE VOYAGEUR DE COMMERCE - 2

Nombre total d’additions : (n-1)*(n-1)!

2010 villes française de plus de 30.000 Habitants:256 Supposons qu’il y en ait que 30 villes

6,8 l’âge de l’univers En conclusion

Exemple d’algorithme correct mais inutilisable

(76)

ETUDE DE LA

COMPLEXITÉ

(77)

ETUDE DE LA COMPLEXITÉ

OBJECTIF

Se donner des éléments théoriques d’appréciation, a priori, des performances des algorithmes

avoir un ordre de grandeur du temps d’exécution et

de l’espace mémoire utilisé par un algo

(78)

ETUDE DE LA COMPLEXITÉ

COMPLEXITÉS

On parlera de la

Complexité temporelle

et de la complexité spatiale

(79)

ETUDE DE LA COMPLEXITÉ

OBJECTIF

Se donner des éléments théoriques d’appréciation, a priori, des performances des algorithmes

s’assurer

que les performances de l’algorithme sont compatibles

avec les performances des machines comparer

2 algorithmes entre eux

(80)

OBJECTIF

Formuler des énoncés de la forme :

« Sur toute machine, et quel que soit le langage utilisé, l’algorithme A est meilleur que l’algorithme B pour des

données de grande taille. »

(81)

ETUDE DE LA COMPLEXITÉ

DÉFINITION

Etudier la complexité d’un algorithme, c’est

rechercher une fonction de n dont on est certain

qu’elle majore la durée d’exécution, lorsque n devient grand

meilleurs des cas d’exécution

pire des cas d’exécution

(82)

ETUDE DE LA COMPLEXITÉ

TEMPS D’EXÉCUTION

Temps d’accès aux variables (cases mémoires) en lecture/écriture : t a

Temps de calcul

opérations arithmétiques : t op comparaisons : t c

Exemple : c = a + b

accès à a et b en lecture, à c en écriture

(83)

ETUDE DE LA COMPLEXITÉ

MÉTHODE GÉNÉRALE

1. Choix des opérations à comptabiliser

2. Comptage du nombre d’opérations exécutées

(84)

ETUDE DE LA COMPLEXITÉ

OPÉRATION FONDAMENTALE

L’opération fondamentale est celle telle que pour tout

algorithme résolvant le problème, la complexité en sera une grandeur proportionnelle

Exemples

Recherche d’un élément dans un tableau -> comparaison

Recherche d’un élément sur un disque -> accès disque

(85)

ETUDE DE LA COMPLEXITÉ

OPÉRATION FONDAMENTALE

Une opération fondamentale peut être complexe

mais doit avoir une durée d’exécution indépendante des données

i, fact10 : entier fact10 = 1

pour i=0 jusqu’à 10 faire fact10 = fact10 * i

fait

Si plusieurs opérations fondamentales :

Décompte séparé

(86)

ETUDE DE LA COMPLEXITÉ

CALCUL DE COMPLEXITÉ

Pour calculer la complexité temporelle il faut évaluer le nombre de fois

où l’opération fondamentale est exécutée par l’algorithme

Examen du code

Varie en fonction des données sur lesquelles travaille

(87)

ETUDE DE LA COMPLEXITÉ

SÉQUENCES ET ALTERNATIVES

Soit X un morceau de programme

Soit P(X) le nb d’opérations correspondant à l’exécution de X Séquence : X

1

; X

2

P(X

1

; X

2

) = P(X

1

) + P(X

2

)

Alternative : si C alors X

1

sinon X

2

On ne sait pas a priori quel bloc d’instructions va être exécuté

P(si C alors X

1

sinon X

2

) ≤ P(C) + max(P(X

1

), P(X

2

))

(88)

ETUDE DE LA COMPLEXITÉ

BOUCLES

P(X) = Σ

i

P(i)

i : incrément de la boucle

P(i) : nb d’opérations à la i

ème

itération

Pb = on ne connaît pas forcément le nb total d’itérations Boucles for : on connaît n

Boucles tant que ou répéter jusqu’à

Calculer une borne supérieure à partir de l’incrément

(89)

ETUDE DE LA COMPLEXITÉ

BOUCLES FOR

T(n) = C0 + C1 + n * (C2 + C3) = αn + β ≈ αn Complexité en O(n)

C0 i, r : entier C1 r = 1

C2 pour i = 1 jusqu’à n faire C3 r = r * i

C0 i, j, r : entier C1 r = 0

C2 pour i = 1 jusqu’à n faire

C3 pour j = 1 jusqu’à p faire

C4 r = r + tab[i, j]

(90)

ETUDE DE LA COMPLEXITÉ

ORDRE DE GRANDEUR

Pourquoi garder O(n

2

) comme ordre de grandeur pour T(n) = an

2

+ bn + g

Exemple:

Prenons n

2

+ n + 1

si n=10 quelle est la contribution de n

2

dans le résultat final?

si n=100

n 2

n 2 + n + 1 = 10 2

10 2 + 10 + 1 = 0, 90%

(91)

ETUDE DE LA COMPLEXITÉ

BOUCLES TANT QUE OU RÉPÉTER

Soit tab, un tableau de n entiers ordonnés par valeurs croissantes

Pb = recherche de la place d’un entier x à insérer

fonction indice(x : entier) : entier début

i : entier i = 0

tant que (i < n) et (tab[i] < x) faire

(92)

ETUDE DE LA COMPLEXITÉ

… EN FONCTION DES CAS

La complexité dépend des jeux d’essai Calcul de la complexité

Dans le meilleur des cas : Min A (n) Dans le pire des cas : Max A (n) En moyenne : Moy A (n)

On a toujours

Min A (n) ≤ Moy A (n) ≤ Max A (n)

(93)

ETUDE DE LA COMPLEXITÉ

… EN FONCTION DES CAS

Soit D

n

l’ensemble des configurations possibles pour des données de taille n Soit coût

A

(d), la complexité de l’algorithme A sur la configuration d ∈ D

n

Complexité dans le meilleur des cas

Min

A

(n) = min {coût

A

(d) | d ∈ D

n

} Complexité dans le pire des cas

Max

A

(n) = max {coût

A

(d) | d ∈ D

n

}

(94)

ETUDE DE LA COMPLEXITÉ

… EN FONCTION DES CAS

Complexité en moyenne

MoyA(n) = Σ{p(d)*coûtA(d) | d ∈ Dn}

p(d), la probabilité d’avoir la configuration d Donne le comportement en général

Si les configurations sont équiprobables MoyA(n) = 1/|Dn|Σ{coûtA(d) | d ∈ Dn} Pb = définir Dn

On partitionne Dn en ensembles homogènes Dn,i

(95)

ETUDE DE LA COMPLEXITÉ

NOTATIONS

Soit T(n) le temps d’exécution d’un programme en fonction de la taille n

caractérisant le nombre d’éléments traités Grand O : majorant

Grand Ω : minorant

(96)

ETUDE DE LA COMPLEXITÉ

GRAND O

Formulation 1 :

On dit que T(n) est en O de f de n, noté abusivement O(f(n)), si T(n) est au plus égal à une constante multipliée par f(n), sauf peut-être pour quelques valeurs de n Formulation 2 :

T(n) est en O(f(n)) s’il existe un entier n

0

et une constante c>0 tels que : ∀ n ≥ n

0

, T(n) ≤ c.f(n)

interprétation

(97)

ETUDE DE LA COMPLEXITÉ

GRAND O

Interprétation

Fonction majorant T(n)

Indication sur les performances de l’algorithme dans le pire des cas, pour n grand

3.1 Notation asymptotique 41

(b) (c)

(a)

n n

n n

0

n

0

n

0

f (n) = Q(g(n)) f (n) = O(g(n)) f (n) = V(g(n))

f (n) f (n)

f (n)

cg(n) cg(n)

c

1

g(n) c

2

g(n)

Figure 3.1 Exemples de notations Q,O et . Dans chaque partie, la valeur de n0 est la valeur mi- nimale possible ; n’importe quelle valeur supérieure ferait aussi l’affaire. (a) La notation Q borne une fonction entre des facteurs constants. On écrit f(n) = Q(g(n)) s’il existe des constantes posi- tives n0, c1 et c2 telles que, à droite de n0, la valeur de f(n) soit toujours comprise entre c1g(n) et c2g(n) inclus. (b) La notation O donne une borne supérieure pour une fonction à un facteur constant près. On écritf(n) =O(g(n))s’il existe des constantes positivesn0 etctelles que, à droite de n0, la valeur de f(n) soit toujours inférieure ou égale à cg(n). (c) La notation V donne une borne inférieure pour une fonction à un facteur constant près. On écrit f(n) = V(g(n)) s’il existe des constantes positivesn0 etc telles que, à droite den0, la valeur def(n)soit toujours supérieure ou égale à cg(n).

Au chapitre 2, nous avons défini de la manière informelle suivante la notation Q : on élimine les termes d’ordre inférieur et on ignore le coefficient du terme d’ordre supérieur. Justifions brièvement cette définition intuitive en utilisant la définition for- melle pour montrer que

12

n

2

− 3n = Q(n

2

). Pour ce faire, on doit déterminer des constantes positives c

1

, c

2

et n

0

telles que

c

1

n

2

! 1

2 n

2

− 3n ! c

2

n

2

pour tout n " n

0

. En divisant par n

2

, on obtient

c

1

! 1 2 − 3

n ! c

2

.

On peut s’arranger pour que le membre droit de l’inégalité soit valide pour toute valeur de n " 1, et ce en choisissant c

2

" 1/2. De même, on peut faire en sorte que le membre gauche de l’inégalité soit valide pour toute valeur de n " 7, en choisissant c

1

! 1/14. Donc, en prenant c

1

= 1/14, c

2

= 1/2 et n

0

= 7, on peut vérifier que

12

n

2

− 3n = Q(n

2

). D’autres choix sont bien entendu possibles pour les constantes ; l’important est qu’il existe au moins une possibilité. Notez que ces constantes dé- pendent de la fonction

12

n

2

− 3n ; une autre fonction appartenant à Q(n

2

) exigerait

nonautoriséeestundélit

Lélia Blin 97 Université d’Evry

(98)

ETUDE DE LA COMPLEXITÉ

GRAND Ω

Formulation 1 :

On dit que T(n) est en Ω de f de n, noté abusivement Ω(f(n)), si T(n) est au moins égal à une constante multipliée par f(n), sauf peut-être pour quelques valeurs de n

Formulation 2 :

T(n) est en Ω(f(n)) s’il existe un entier n

0

et une constante c>0 tels que :

∀ n ≥ n

0

, T(n) ≥ c.f(n)

interprétation

(99)

ETUDE DE LA COMPLEXITÉ

GRAND Ω

Interprétation

Fonction minorant T(n)

Indication sur les performances de l’algorithme dans le meilleur des cas, pour n grand

3.1 Notation asymptotique 41

(b) (c)

(a)

n n

n n

0

n

0

n

0

f (n) = Q(g(n)) f (n) = O(g(n)) f (n) = V(g(n))

f (n) f (n)

f (n)

cg(n) cg(n)

c

1

g(n) c

2

g(n)

Figure 3.1 Exemples de notationsQ, O et . Dans chaque partie, la valeur de n0 est la valeur mi- nimale possible ; n’importe quelle valeur supérieure ferait aussi l’affaire.(a)La notation Q borne une fonction entre des facteurs constants. On écritf(n) = Q(g(n)) s’il existe des constantes posi- tives n0, c1 et c2 telles que, à droite de n0, la valeur de f(n) soit toujours comprise entre c1g(n) et c2g(n) inclus. (b) La notation O donne une borne supérieure pour une fonction à un facteur constant près. On écritf(n) =O(g(n))s’il existe des constantes positivesn0etctelles que, à droite de n0, la valeur de f(n) soit toujours inférieure ou égale à cg(n). (c) La notation V donne une borne inférieure pour une fonction à un facteur constant près. On écrit f(n) = V(g(n)) s’il existe des constantes positivesn0etctelles que, à droite den0, la valeur def(n)soit toujours supérieure ou égale à cg(n).

Au chapitre 2, nous avons défini de la manière informelle suivante la notation Q : on élimine les termes d’ordre inférieur et on ignore le coefficient du terme d’ordre supérieur. Justifions brièvement cette définition intuitive en utilisant la définition for- melle pour montrer que

12

n

2

− 3n = Q(n

2

). Pour ce faire, on doit déterminer des constantes positives c

1

, c

2

et n

0

telles que

c

1

n

2

! 1

2 n

2

− 3n ! c

2

n

2

pour tout n " n

0

. En divisant par n

2

, on obtient

c

1

! 1 2 − 3

n ! c

2

.

On peut s’arranger pour que le membre droit de l’inégalité soit valide pour toute valeur de n " 1, et ce en choisissant c

2

" 1/2. De même, on peut faire en sorte que le membre gauche de l’inégalité soit valide pour toute valeur de n " 7, en choisissant c

1

! 1/14. Donc, en prenant c

1

= 1/14, c

2

= 1/2 et n

0

= 7, on peut vérifier que

12

n

2

− 3n = Q(n

2

). D’autres choix sont bien entendu possibles pour les constantes ; l’important est qu’il existe au moins une possibilité. Notez que ces constantes dé- pendent de la fonction

1

n

2

− 3n ; une autre fonction appartenant à Q(n

2

) exigerait

nonautoriséeestundélit

Lélia Blin 99 Université d’Evry

(100)

ETUDE DE LA COMPLEXITÉ

GRAND Θ

Définition :

T(n) est en Θ(f(n)) s’il existe un entier n

0

et deux constantes c

1

et c

2

positives tels que

∀ n ≥ n

0

, c

1

.f(n) ≤ T(n) ≤ c

2

.f(n)

interprétation

Encadrement de T(n)

(101)

ETUDE DE LA COMPLEXITÉ

GRAND Θ

Interprétation

Encadrement de T(n)

Caractérise le fait que l’algorithme a des comportements

similaires quelles que soient les données 3.1 Notation asymptotique 41

(b) (c)

(a)

n n

n n

0

n

0

n

0

f (n) = Q(g(n)) f (n) = O(g(n)) f (n) = V(g(n))

f (n) f (n)

f (n)

cg(n) cg(n)

c

1

g(n) c

2

g(n)

Figure 3.1

Exemples de notations

Q, O

et . Dans chaque partie, la valeur de

n0

est la valeur mi- nimale possible ; n’importe quelle valeur supérieure ferait aussi l’affaire.

(a)

La notation

Q

borne une fonction entre des facteurs constants. On écrit

f(n) = Q(g(n))

s’il existe des constantes posi- tives

n0

,

c1

et

c2

telles que, à droite de

n0

, la valeur de

f(n)

soit toujours comprise entre

c1g(n)

et

c2g(n)

inclus.

(b)

La notation

O

donne une borne supérieure pour une fonction à un facteur constant près. On écrit

f(n) = O(g(n))

s’il existe des constantes positives

n0

et

c

telles que, à droite de

n0

, la valeur de

f(n)

soit toujours inférieure ou égale à

cg(n). (c)

La notation

V

donne une borne inférieure pour une fonction à un facteur constant près. On écrit

f(n) = V(g(n))

s’il existe des constantes positives

n0

et

c

telles que, à droite de

n0

, la valeur de

f(n)

soit toujours supérieure ou égale à

cg(n).

Au chapitre 2, nous avons défini de la manière informelle suivante la notation Q : on élimine les termes d’ordre inférieur et on ignore le coefficient du terme d’ordre supérieur. Justifions brièvement cette définition intuitive en utilisant la définition for- melle pour montrer que

12

n

2

− 3n = Q(n

2

). Pour ce faire, on doit déterminer des constantes positives c

1

, c

2

et n

0

telles que

c

1

n

2

! 1

2 n

2

− 3n ! c

2

n

2

pour tout n " n

0

. En divisant par n

2

, on obtient

c

1

! 1

2 − 3

n ! c

2

.

On peut s’arranger pour que le membre droit de l’inégalité soit valide pour toute valeur de n " 1, et ce en choisissant c

2

" 1/2. De même, on peut faire en sorte que le membre gauche de l’inégalité soit valide pour toute valeur de n " 7, en choisissant c

1

! 1/14. Donc, en prenant c

1

= 1/14, c

2

= 1/2 et n

0

= 7, on peut vérifier que

12

n

2

− 3n = Q(n

2

). D’autres choix sont bien entendu possibles pour les constantes ; l’important est qu’il existe au moins une possibilité. Notez que ces constantes dé- pendent de la fonction

12

n

2

− 3n ; une autre fonction appartenant à Q(n

2

) exigerait

nonautoriséeestundélit

Lélia Blin 101 Université d’Evry

(102)

ETUDE DE LA COMPLEXITÉ

COMPLEXITÉS

O(1) O(log n)

O(n) O(n.log n)

O(n 2 ) O(n 3 ) O(2 n ) O(n!)

Constante Logarithmique

Linéaire n log n Quadratique

Cubique Exponentielle

Factorielle

(103)

ETUDE DE LA COMPLEXITÉ

REPRÉSENTATION GRAPHIQUE

12 16 20 24 28 32 36 40 44 48 52

n n log n

n2

e2

(104)

ETUDE DE LA COMPLEXITÉ

NB D’OP. ÉLÉMENTAIRES

  1 log

2

n n nlog

2

n n

2

n

3

n

4

2

n

n! n

n

1 1 1 1 1 1 1 1 2 1 1

5 1 2 5 12 25 125 625 32 120 3125

10 1 3 10 33 10

2

10

3

10

4

10

3

3.10

6

10

16

10

2

1 7 10

2

664 10

4

10

6

10

8

10

30

   

n

O

(105)

ETUDE DE LA COMPLEXITÉ

TAILLE DU PROBLÈME

On suppose que l’opération élémentaire s’exécute en 1 µ s

  1 log

2

n n nlog

2

n n

2

n

3

2

n

n! n

n

1 s ∞ ∞ 10

6

6,3.10

4

10

3

100 20 10 7

1 mn ∞ ∞ 6.10

7

3.10

6

7.10

3

400 26 11 8

1 h ∞ ∞ 4.10

9

1,3.10

8

6.10

4

1500 32 12 9

t O

(106)

ETUDE DE LA COMPLEXITÉ

TEMPS D’ÉXECUTION

1 log 2 n n nlog 2 n n 2 n 3 2 n n=1O 2 1μs 6,6μs 0,1ms 0,6ms 10ms 1s 4.10 ans

16

n=1O 3 1μs 9,9μs 1ms 9,9ms 1s 17mn

n=1O 4 1μs 13,3μs 10ms 0,1s 100s 11,5j

n=1O 5 1μs 16,6μs 0,1s 1,6s 2,7h 31,7 ans

(107)

ETUDE DE LA COMPLEXITÉ

EXEMPLE

(108)

Exemple : Suite de Fibonacci

Solution récursive

fonction fibo(n : entier) : entier début

si (n = 0) ou (n = 1) alors retourne 1

sinon retourne fibo(n-1) + fibo(n-2)

fin

(109)

Exemple : Suite de Fibonacci

for (i=2; i<n+1; i++)

fib[i] = fib[i-1] + fib[i-2];

return res;

Solution itérative utilisant un tableau

(110)

Exemple 1: Suite de Fibonacci

Solution itérative sans tableau

fonction fibo(n : entier) : entier var un, un_1, un_2, i : entier

début

un_1 = un_2 = 1

pour i = 2 jusqu’à i = n faire un = un_2 + un_1

un_2 = un_1 un_1 = un fait

retourne un

fin

(111)

Exemple : Suite de Fibonacci

Quelle est la meilleure solution?

la solution récursive?

La solution itérative avec tableau?

La solution itérative sans tableau?

(112)

Exemple : Suite de Fibonacci

Quelle est la meilleure solution?

la solution récursive?

complexité temporelle: O(2 n ) La solution itérative avec tableau?

complexité temporelle: O(n)

(113)

Exemple : Suite de Fibonacci

Les solutions itératives sont elles comparable?

la solution récursive?

complexité temporelle: O(2

n

) complexité spatiale: O(1) La solution itérative avec tableau?

complexité temporelle: O(n)

complexité spatiale: O (n)

La solution itérative sans tableau?

(114)

LIVRE CONSEILLÉ

Références

Documents relatifs

[r]

[r]

Appel 2 : appeler l'examinateur pour montrer votre tableau de valeurs, votre fonction tracée et l'intersection à la

Celui-ci s’utilise de la même manière qu’un pointeur si ce n’est qu’il est possible d’opérer deux indirections : une pour atteindre le pointeur référencé et une

Les matières premières sont acheminées vers l'usine par l'intermédiaire d'une société de transport qui facture le coût du transport à l'unité.. Calculer les valeurs propres

La valeur 0 K est dite zéro absolu : c’est la température où il n’y a plus d’agitation thermique des particules, et on ne peut plus abaisser la température en dessous de

On désigne par deg(V, k. k W ) parcourt l’ensemble des sous-espaces k-vectoriels non-nuls munis des normes restrictions, et (Q, k.. Soit V un espace vectoriel de rang fini sur k,

Récris chaque expression sous la forme d’une fonction trigonométrique simple... Prouve chaque