Vous êtes sur la page 1sur 35

Algorithmique et Analyse d’Algorithmes

Algorithmique et Analyse d’Algorithmes


L3 Info
Cours 1 : notion de coût d’un algorithme

Benjamin Wack

2017- 2018

1 / 41
Algorithmique et Analyse d’Algorithmes

Objectifs du cours

Savoir proposer une solution algorithmique à un problème posé,


savoir implanter la solution et savoir analyser celle-ci.

Objectifs détaillés

I Savoir reconnaître et mettre en œuvre des schémas génériques


d’algorithmes (séquence, arbre, graphe...),
I Savoir construire une solution selon une démarche allant du plus
simple (algorithme naïf) au plus efficace (diviser pour régner, etc.)
I Savoir démontrer la correction des algorithmes
I Savoir comment évaluer la complexité d’une solution
algorithmique :
- analyser la complexité au pire, en moyenne avec des hypothèses
probabilistes,
- analyser la complexité en utilisant des mesures sur des simulations ou
des jeux de test.
2 / 41
Algorithmique et Analyse d’Algorithmes

Plan

Présentation du cours

Problématique

Coût d’un algorithme

Complexité
Méthodologie
Ordres de grandeur

Algorithme de Horner

3 / 41
Algorithmique et Analyse d’Algorithmes
Présentation du cours

Structure du cours
Cours (Benjamin Wack)
Une partie synthétique sur les concepts et schémas algorithmiques
Un algorithme classique afin de se constituer une culture de référence

TD1 (Florence Perronnin, Anne Rasse, Jean-Marc Vincent)


Exercices permettent de renforcer la compréhension des concepts.

TD2 (Vincent Danjean, David Monniaux, Benjamin Wack)


Mise en œuvre des concepts et préparation aux activités pratiques

APNEES (VD, DM, BW) : Activités Personnelles Non Encadrées


Évaluées
Validation des concepts par la pratique et évaluation de la compréhension
+ au moins autant de travail personnel ! (exercices, petits programmes)
Adresse Mail enseignant : Prénom.Nom@univ-grenoble-alpes.fr 5 / 41
Algorithmique et Analyse d’Algorithmes
Présentation du cours

Ressources
Bibliographie

I Algorithmique, T. Cormen, R. Rivest & C. Leiserson, Dunod


I Algorithmes, R. Sedgewick, Pearson Education

Page Web
Planning, documents, annales
http://www-verimag.imag.fr/~wack/ALGO5/

Moodle de l’UFR
Sujets et rendus d’Apnées
https://im2ag-moodle.e.ujf-grenoble.fr/course/view.php?id=229

6 / 41
Algorithmique et Analyse d’Algorithmes
Présentation du cours

Évaluations
Note finale = 67 % Examen + 33 % CC

Les contrôles continus


I 2 quicks (début octobre et fin novembre) : 50 % du CC
I 3 comptes-rendus d’APNEEs dont 2 notés : 50 % du CC

Examen terminal
I 2h30 sans documents ni calculatrice
I Session 2 en juin...

Challenge de programmation

I Semaine du 13 au 17 novembre
I En équipes
7 / 41
Algorithmique et Analyse d’Algorithmes
Présentation du cours

Programme (indicatif) du cours


I Complexité des algorithmes
1. Coût d’un algorithme (itérations, ordres de grandeur) Horner
2. Analyse en moyenne Quicksort
I Preuves d’algorithmes
3. Invariant, correction, terminaison Drapeau hollandais
4. Logique de Hoare Dichotomie
I Types abstraits élémentaires et implantation
5. Structures séquentielles Algorithme de parenthésage
6. Structures arborescentes Partition Binaire de l’Espace
I Arbres
7. Arbres binaires de recherche Arbres B
8. Arbres ordonnés, structure de tas Algorithmes gloutons
9. Arbres et codage Algorithme de Huffman
I Graphes et algorithmes
10. Algorithmique de graphes Prim et Kruskal
11. Prétraitement Algorithme de Knuth-Morris-Pratt

8 / 41
Algorithmique et Analyse d’Algorithmes
Problématique

Notion de problème données

I Effectuer une recherche dans un inventaire stock


I Résoudre une équation coefficients
I Trouver le plus court chemin sur un plan de ville plan
I Corriger des fautes d’orthographe texte + dictionnaire
I Multiplier des matrices coefficients
I ...

Dans chacun de ces exemples on s’intéresse en fait à une classe de


problèmes similaires, dont chaque instance est définie par des données.
Il faut également préciser le résultat attendu.
(par exemple pour l’inventaire : oui/non ? quantité ? localisation ?)

10 / 41
Algorithmique et Analyse d’Algorithmes
Problématique

Qu’est-ce qu’un algorithme ?


Procédure de résolution de n’importe quelle instance d’un problème
suffisamment élémentaire pour être exécutée de façon automatique.

Problème concret

Problème formalisé / Algorithme
Programmation

Programme

Données Exécution

 t ) 
Instance Solution

Exemple : résolution d’équation


11 / 41
Algorithmique et Analyse d’Algorithmes
Problématique

Un algorithme traite donc des données pour produire un résultat ; mais


avec quelles primitives et quelles ressources ?

12 / 41
Algorithmique et Analyse d’Algorithmes
Problématique

Nécessité d’un modèle

Alan M. Turing Machine « de papier »


1912-1954 1936
La machine est dotée :
I d’un ruban infini (' mémoire)
I d’une tête de lecture/écriture
I d’un automate (' processeur)

Un modèle donc tourné vers les opérations de lecture/écriture


(' affectation, calculs)

13 / 41
Algorithmique et Analyse d’Algorithmes
Problématique

Les questions “résolues” par Turing

I Qu’est-ce qu’un calcul effectué automatiquement ?


I Peut-on tout calculer ?
I Peut-on décider automatiquement si une formule logique est vraie ?
10 ans avant les premiers ordinateurs !

Cf. Modèles de calcul au semestre 6

14 / 41
Algorithmique et Analyse d’Algorithmes
Problématique

Les questions traitées en Algo5

Est-ce que je peux construire un programme qui résout mon problème


(sur une machine conforme à mon modèle) ?
Spécification du problème et construction d’un algorithme

Est-ce que l’exécution de mon programme sur la machine donne bien le


résultat souhaité ?
Vérification de propriétés qualitatives par test et preuve

Est-ce que mon programme me fournit le résultat en un temps


acceptable ?
Validation de propriétés quantitatives par mesure et analyse

15 / 41
Algorithmique et Analyse d’Algorithmes
Problématique

Les questions traitées en Algo5

Problème concret Correction Efficacité


O 6
spécification preuve
 analyse de
Problème formalisé
construction / Algorithme complexité

Programmation

Programme
5 @ ^ mesure
test
Données Exécution

 t ) 
Instance Solution

Exemple : résolution d’équation

15 / 41
Algorithmique et Analyse d’Algorithmes
Coût d’un algorithme

Notre modèle de machine

Une machine est constituée d’un processeur, d’une mémoire et d’un


ensemble d’opérations.
I Mémoire
- infinie (mais un calcul donné utilise un espace fini),
- types élémentaires (finis) int, float,...
- puis on ajoutera des structures de données
I Opérations
- nombre fini d’opérations (arithmétiques, booléennes...) ;
- chaque opération a un nombre fini de paramètres
(nombre fini de variables lues et écrites)
I Processeur
- processeur unique ;
- effectue les opérations en temps constant (1 top = 1 opération)

17 / 41
Algorithmique et Analyse d’Algorithmes
Coût d’un algorithme

Efficacité d’un algorithme

I Est-ce que mon programme consomme une quantité acceptable de


ressources pour fournir un résultat ?
I Étant donnés deux programmes résolvant le même problème, lequel
est le “meilleur” ?

Calcul
Un calcul est une séquence d’opérations qui, à partir d’une configuration
initiale de la mémoire, produit, en un temps fini, une configuration
terminale.
I coût en temps à partir d’une configuration initiale d
= nombre d’opérations dans la séquence
I coût en mémoire
= nombre maximal de variables utilisées simultanément

18 / 41
Algorithmique et Analyse d’Algorithmes
Coût d’un algorithme

Exemple (1)

Moyenne de 2 flottants
MOY(a,b)
Données : Deux flottants : a et b
Résultat : La moyenne de a et de b
s := a + b
m := s/2
Return (m)

Coût de l’algorithme
Coût temps ? 2 opérations
Coût en espace mémoire ? 2 variables

Coût constant, indépendant des données

19 / 41
Algorithmique et Analyse d’Algorithmes
Coût d’un algorithme

Exemple (2)

Puissance : calcul de x n
PUISSANCE(x ,n)
Données : Un flottant x et un entier n
Résultat : La valeur de x n
p := 1
k := 0
while k 6= n
p := p × x
k := k + 1
Return (p)

I Coût en temps : 2 + 2n opérations


I Coût variable, dépend de la valeur des données

20 / 41
Algorithmique et Analyse d’Algorithmes
Coût d’un algorithme

Exemple (3)
Maximum d’un tableau Coût de l’algorithme
MAXIMUM(T ,n) Modèle de coût ?
Données : T tableau de n entiers Supposons Traiter coûteux
Résultat : L’indice d’un élément maxi
I pour T=[1,2,...,n] ?
max := T [1] I pour T=[14,28,...,14n] ?
for i := 1 to n
if T [i] ≥ max I pour T=[n,1,2,...,n-1] ?
imax := i
max := T [i]
Dépend de la taille des données
Traiter (max )
Borné par une fonction linéaire
Return (imax )

Expression du coût : en fonction de quoi ?

I Pour ce tableau n est la taille des données


I Pour un entier n est la valeur de la donnée : on préférera log2 (n)
21 / 41
Algorithmique et Analyse d’Algorithmes
Complexité

Généralisation

Algorithme
Espace des données Espace des résultats

Machine

Taille de la donnée
Cout du calcul

Entier Entier

Caractériser l’efficacité générale de l’algorithme =


trouver la relation entre la taille des données et le coût de l’algorithme
sur un (modèle de) machine donnée

23 / 41
Algorithmique et Analyse d’Algorithmes
Complexité

Coût d’un algorithme


Coût (au pire)
Le coût d’un algorithme A est fonction de la taille des données :

CA (n) = max(coût(d)) pour toutes les données d de taille n

I Suppose d’avoir fixé la notion de taille


I Maximum = garantie quelles que soient les conditions d’utilisation
I Exhiber un cas défavorable « suffit »

Coût au mieux

min
CA (n) = min(coût(d)) pour toutes les données d de taille n

I Correspond au cas le plus favorable

Quel comportement privilégie-t-on ? 24 / 41


Algorithmique et Analyse d’Algorithmes
Complexité
Méthodologie

Coûts des structures de base

Instructions en séquence
Le coût de
Faire Truc
Faire Machin
est la somme des coûts de Truc et de Machin

Composition des coûts

Le coût d’une boucle est donc la somme


des coûts de chaque itération

Instructions FOR, WHILE, REPEAT,...

26 / 41
Algorithmique et Analyse d’Algorithmes
Complexité
Méthodologie

Coûts des structures de base (2)


Instructions conditionnelles
if condition
Faire Truc
else
Faire Machin
Coût de l’une des branches plus le coût d’évaluation de la condition

Majoration du coût
Le coût au pire sera donc majoré par le maximum des coûts au pire de
chaque branche.

Cout(si Condition alors A sinon B) ≤ Cout(evaluation(Condition))


+ max{Cout(A), Cout(B)}

Instructions IF, SWITCH,... 27 / 41


Algorithmique et Analyse d’Algorithmes
Complexité
Méthodologie

Coûts des structures de base (3)

Appel de procédure
Le coût de l’appel d’une procédure est :
I le coût du corps de la procédure pour ses paramètres d’appel
I plus le coût de l’évaluation de ses paramètres.

Méthode de calcul de coût


Le calcul du coût d’un algorithme s’obtient donc en composant les coûts
des différentes opérations composant l’algorithme.

I assemblage et reconstruction
I méthode par composition
I se fait à la conception de l’algorithme

28 / 41
Algorithmique et Analyse d’Algorithmes
Complexité
Méthodologie

Exemple
Calcul de la somme des entiers de 1 à n
i := 1
somme := 0
Tantque (i ≤ n) :
somme := somme + i
i := i + 1

I Coût d’une itération = 2 (additions) + 1 test


I Nombre d’itérations = n
I Coût de la boucle = 3n
I Coût de l’algorithme = 3n + 1

Niveau de détail judicieux ?

29 / 41
Algorithmique et Analyse d’Algorithmes
Complexité
Ordres de grandeur

Ordres de grandeur
I La complexité est une prédiction du temps d’exécution du
programme codant l’algorithme.
I Mais dépend de l’architecture de la machine, donc c’est une
abstraction (approximation)
I Passage à l’échelle des algorithmes

Ce qui est important c’est :

1. l’ordre de grandeur ;
2. de pouvoir comparer les algorithmes

Complexité d’un algorithme


On appelle complexité d’un algorithme une fonction de référence
(logarithme, polynome, exponentielle...) comparable à son coût.

31 / 41
Algorithmique et Analyse d’Algorithmes
Complexité
Ordres de grandeur

Exemples n = 106 n = 109

I moyenne des éléments d’un tableau de taille n


⇒ complexité en n opérations
1/1000e s1 s
I tri par insertion des éléments d’un tableau de taille n
⇒ complexité en n2 opérations
1/4 h30 ans
I énumération des vecteurs de bits de taille n
⇒ complexité en 2n opérations
10300 000
années...

Définir des ordres de grandeur comparables


Pour se donner une représentation concrète : sur un PC récent, environ 1
milliard d’opérations / seconde

32 / 41
Algorithmique et Analyse d’Algorithmes
Complexité
Ordres de grandeur

Borne supérieure asymptotique


Notation O
Pour une fonction donnée g on note O(g) l’ensemble de fonctions :

O(g) = {f telles que ∃c ≥ 0, ∃n0 ≥ 0, ∀n ≥ n0 , f (n) ≤ c.g(n)}

On écrit f = O(g) pour f ∈ O(g).


On dit que g est une borne supérieure asymptotique pour f .
Vite dit : g dépasse f à partir d’un certain rang (taille de données)
Pause courbes
Exemples

n = O(n3 ) 1250n3 = O(2n )


√ √ √
n+ n = O(n) n n + n log n = O(n n)

33 / 41
Algorithmique et Analyse d’Algorithmes
Complexité
Ordres de grandeur

Échelles de comparaison (à connaître)


Échelle polynomiale

I Si k ≤ l alors nk = O(nl )

Échelle logarithmique

I log(n) = O(n)
I log(log(n)) = O(log(n))

Échelle exponentielle

I Si 0 < a < b alors an = O(b n )


I Pour tous a > 1 et k ≥ 0 on a nk = O(an )

Deux propriétés utiles


Si f = O(g) alors f + g = O(g) et k × f = O(g) 34 / 41
Algorithmique et Analyse d’Algorithmes
Complexité
Ordres de grandeur

Autres encadrements

f = O(g) si ∃c ≥ 0, ∃n0 ≥ 0, ∀n ≥ n0 , f (n) ≤ c.g(n)

Borne inférieure asymptotique (notation Ω)

f = Ω(g) si ∃c ≥ 0, ∃n0 ≥ 0, ∀n ≥ n0 , c.g(n) ≤ f (n)

Borne asymptotique approchée : (notation Θ)

f = Θ(g) si ∃c1 , c2 ≥ 0, ∃n0 ≥ 0, ∀n ≥ n0 , c1 .g(n) ≤ f (n) ≤ c2 .g(n)

35 / 41
Algorithmique et Analyse d’Algorithmes
Algorithme de Horner

Évaluation d’un polynôme

Un polynôme P à une seule variable X s’écrit de façon unique

P = an X n + an−1 X n−1 + . . . + a1 X + a0

Résultat : La valeur P(x0 )


Données : Les coefficients an , . . . , a0 suffisent à donner le polynôme
Rangés dans un tableau A de taille n + 1
Une valeur x0 en laquelle on veut évaluer le polynôme
Types de données :
I les coefficients an , . . . , a0 sont des flottants
I x0 peut être un flottant mais aussi une matrice, un polynôme...
I Incidence sur le modèle de coût

37 / 41
Algorithmique et Analyse d’Algorithmes
Algorithme de Horner

Algorithme (très) naïf


Évaluation de P en x0
EVAL(P,x0 )
Données : Un tableau de coefficients A et un flottant x0
Résultat : La valeur de P(x0 )
r =0
i =n
while i ≥ 0 
p=1 

k=0 

while k 6= i (calcul de x0 i dans p)
p = p × x0 



k =k +1
r = r + A[i] × p
i =i −1
Return (r )
Complexité en O(n2 )
38 / 41
Algorithmique et Analyse d’Algorithmes
Algorithme de Horner

Évaluation droite-gauche
Idée : ne pas recalculer les puissances de x0 pour rien

Évaluation de P en x0 par la droite


EVAL_DROITE(P,x0 )
Données : Un tableau de coefficients A et un flottant x0
Résultat : La valeur de P(x0 )
r =0
i =0
p=1
while i ≤ n
r = r + A[i] × p
p = p × x0
i =i +1
Return (r )

Complexité en O(n)

39 / 41
Algorithmique et Analyse d’Algorithmes
Algorithme de Horner

Évaluation gauche-droite efficace


On se base sur la pseudo-factorisation
P = ((. . . (an × X + an−1 ) . . .) × X + a1 ) × X + a0
Évaluation de P en x0 par la méthode de Horner
HORNER(P,x0 )
Données : Un tableau de coefficients A et un flottant x0
Résultat : La valeur de P(x0 )
r =0
i =n
while i ≥ 0
r = r × x0 + A[i]
i =i −1
Return (r )

Même complexité mais :


I En place et meilleure constante
I Autres applications : dérivation, division, calcul de racines...
40 / 41
Algorithmique et Analyse d’Algorithmes
Algorithme de Horner

Conclusion

I Un même problème peut être résolu par des algorithmes très


différents
I On peut (parfois) passer de l’un à l’autre par raffinement
I L’analyse de complexité est un critère fiable pour les comparer
I ... mais pas le seul

La prochaine fois

I schémas récursifs
I analyse du coût en moyenne
I tri rapide

41 / 41

Vous aimerez peut-être aussi