Algorithmique et Analyse d`Algorithmes

publicité
Algorithmique et Analyse d’Algorithmes
Algorithmique et Analyse d’Algorithmes
L3 Info
Cours 1 : notion de coût d’un algorithme
Benjamin Wack
2016 - 2017
1 / 44
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
Savoir comment évaluer la complexité d’une solution
algorithmique :
I
- 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 / 44
Algorithmique et Analyse d’Algorithmes
Plan
Présentation du cours
Problématique
Correction
Coût d’un algorithme
Complexité
Méthodologie
Ordres de grandeur
Algorithme de Horner
3 / 44
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, Benjamin Wack)
Exercices permettent de renforcer la compréhension des concepts.
TD2 (Rémy Boutonnet, Guillaume Cordonnier, Vincent Danjean)
Mise en œuvre des concepts et préparation aux activités pratiques
APNEES (RB, GC, VD) : Activités Pratiques 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é[email protected]
5 / 44
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 / 44
Algorithmique et Analyse d’Algorithmes
Présentation du cours
Évaluations
Note finale = 67 % Examen + 33 % CC
Les contrôles continus
I
2 quicks (mi-octobre et mi-novembre) : 50 % du CC
I
4 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
I
Semaine du 7 au 11 novembre
En équipes
7 / 44
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)
2. Analyse en moyenne
I
Preuves d’algorithmes
3. Invariant, correction, terminaison
4. Logique de Hoare
I
Algorithme de parenthésage
Partition Binaire de l’Espace
Arbres
7. Arbres binaires de recherche
8. Arbres ordonnés, structure de tas
9. Arbres et codage
I
Drapeau hollandais
Dichotomie
Types abstraits élémentaires et implantation
5. Structures séquentielles
6. Structures arborescentes
I
Horner
Quicksort
Arbres B
Algorithmes gloutons
Algorithme de Huffman
Graphes et algorithmes
10. Algorithmique de graphes
11. Arbre couvrant, prétraitement
Tri topologique
Algorithme de Knuth-Morris-Pratt
8 / 44
Algorithmique et Analyse d’Algorithmes
Problématique
Notion de problème
I
Effectuer une recherche dans un inventaire
I
Résoudre une équation
I
Trouver le plus court chemin sur un plan de ville
I
Corriger des fautes d’orthographe
I
Multiplier des matrices
I
...
données
stock
coefficients
plan
texte + dictionnaire
coefficients
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 / 44
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
t
Instance
)
Exécution
Solution
Exemple : résolution d’équation
11 / 44
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 / 44
Algorithmique et Analyse d’Algorithmes
Problématique
Nécessité d’un modèle
Alan M. Turing
1912-1954
Machine « de papier »
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 / 44
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 / 44
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 / 44
Algorithmique et Analyse d’Algorithmes
Problématique
Les questions traitées en Algo5
Problème concret
Correction
O
preuve
spécification
Problème formalisé
construction
/ Algorithme
6
Efficacité
analyse de
complexité
Programmation
Programme
5 @
^ mesure
test
Données
t
Instance
)
Exécution
Solution
Exemple : résolution d’équation
15 / 44
Algorithmique et Analyse d’Algorithmes
Correction
Les propriétés recherchées
Terminaison
L’exécution de l’algorithme produit-elle un résultat en temps fini quelles
que soient les données fournies ?
Correction partielle
Lorsque l’algorithme s’arrête, le résultat calculé est-il la solution
cherchée quelles que soient les données fournies ?
17 / 44
Algorithmique et Analyse d’Algorithmes
Correction
Test ou preuve ?
“Testing shows the presence, not the absence of bugs”
E. W. Dijkstra, 1969
Le test :
I
valide une implantation plutôt qu’un algorithme
I
permet des vérifications rapides
I
peut être utilisé en cours de développement
I
fait apparaître les limites du modèle
La preuve :
I
fournit une garantie incontestable sur le fond de l’algorithme
I
mais n’élimine pas (complètement) les erreurs de programmation
I
nécessite des outils formels pour une utilisation à grande échelle
18 / 44
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)
20 / 44
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
21 / 44
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
22 / 44
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
23 / 44
Algorithmique et Analyse d’Algorithmes
Coût d’un algorithme
Exemple (3)
Maximum d’un tableau
MAXIMUM(T ,n)
Données : T tableau de n entiers
Résultat : L’indice d’un élément maxi
max := T [1]
for i := 1 to n
if T [i] ≥ max
imax := i
max := T [i]
Traiter (max )
Coût de l’algorithme
Modèle de coût ?
Supposons Traiter coûteux
I
pour T=[1,2,...,n] ?
I
pour T=[14,28,...,14n] ?
I
pour T=[n,1,2,...,n-1] ?
Dépend de la taille des données
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)
24 / 44
Algorithmique et Analyse d’Algorithmes
Complexité
Généralisation
Espace des données
Algorithme
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
26 / 44
Algorithmique et Analyse d’Algorithmes
Complexité
Complexité d’un algorithme
Complexité (au pire)
La complexité 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 »
Complexité 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 ?
27 / 44
Algorithmique et Analyse d’Algorithmes
Complexité
Méthodologie
Complexité 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
La complexité d’une boucle est donc la
somme des coûts de chaque itération
Instructions FOR, WHILE, REPEAT,...
29 / 44
Algorithmique et Analyse d’Algorithmes
Complexité
Méthodologie
Complexité 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
La complexité au pire sera donc majorée par le maximum des complexités
au pire de chaque branche.
C (si Condition alors A sinon B) ≤ C (evaluation(Condition))
+ max{C (A), C (B)}
Instructions IF, SWITCH,...
30 / 44
Algorithmique et Analyse d’Algorithmes
Complexité
Méthodologie
Complexité 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 complexité
Le calcul de la complexité d’un algorithme s’obtient donc en composant
les complexités 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
31 / 44
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
I
I
I
Coût d’une itération = 2 (additions) + 1 test
Nombre d’itérations = n
Coût de la boucle = 3n
Coût de l’algorithme = 3n + 1
Niveau de détail judicieux ?
32 / 44
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
34 / 44
Algorithmique et Analyse d’Algorithmes
Complexité
Ordres de grandeur
n = 106 n = 109
Exemples
I
somme des éléments d’un tableau de taille n
⇒ n opérations
1/1000e s1 s
I
tri par insertion des éléments d’un tableau de taille n
⇒ n2 opérations
1/4 h30 ans
I
énumération des vecteurs de bits de taille n
⇒ 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
35 / 44
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 )
n+
√
n = O(n)
1250n3 = O(2n )
√
√
n n + n log n = O(n n)
36 / 44
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)
37 / 44
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)
38 / 44
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
I
les coefficients an , . . . , a0 sont des flottants
x0 peut être un flottant mais aussi une matrice, un polynôme...
I
Incidence sur le modèle de coût
40 / 44
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
p = p × x0
k =k +1
r = r + A[i] × p
i =i −1
Return (r )





(calcul de x0 n dans p)




Complexité en O(n2 )
41 / 44
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)
42 / 44
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...
43 / 44
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
44 / 44
Téléchargement