UNIVERSITE SAAD DAHLAB DE BLIDA
Complexité des algorithmes et … 27
Chapitre 3 : Complexité des algorithmes et des problèmes d'optimisation
1. Introduction
Les notions de complexité des problèmes sont très importantes, car si un problème est
identifié comme complexe, il sera difficile d'en spécifier un modèle, on pourra même perdre
espoir de trouver un algorithme pour le résoudre. Dans ce cas on se contentera d'exigences
plus limitées : résolution approchée du problème posé, résolution d'un problème voisin plus
simple, …Un problème d’optimisation combinatoire en abrégé POC, consiste à chercher le
minimum s* d’une application "f" d'un ensemble S dans R le plus souvent à valeurs entières
ou réelles, tel que f(s*) = )s(f
Ss
Min
( une même définition peut se donner en utilisant le
maximum sachant que )s(f
Ss
Max
= ))s(f(-
Ss
Min
).
Les problèmes d'optimisation combinatoire se répartissent en deux catégories : ceux qui sont
résolus optimalement par des algorithmes efficaces et rapides et ceux dont la résolution
optimale peut prendre un temps exponentiel. Les problèmes de chemins, de flots et d'arbres
disposent d'algorithmes efficaces, même certains problèmes d'ordonnancement qu'on verra
dans les chapitres ultérieurs. Certains problèmes d'ordonnancement où les due-date ou les
release-date apparaissent font partie de la catégorie des problèmes difficiles.
Pour évaluer et classer les divers algorithmes disponibles pour un problème, il nous faut une
mesure de performance indépendante du langage et de l'ordinateur utilisé.
2. Diverses mesures de complexité
Nous présentons les critères permettant de définir la complexité d'un système. Les problèmes
informatiques de l'industrie sont généralement difficiles à résoudre. Leur complexité peut être
définie en deux catégories. Dans la première on s'intéresse au système en soi, et l'on mesure la
complexité d'un problème, d'un système par le nombre de ses composants, par le degré
d'interdépendance de ses composants. Les systèmes indécidables sont plus complexes que les
systèmes déterministes. On peut prendre en compte la quantité d'information interne au
système. Un système ayant plusieurs composants identiques est plus simples par rapport à un
système ayant le même nombre de composants mais tous différents. On peut tenir compte de
la géométrie du système en distinguant entre système discret et système continu. La
complexité d'un problème peut se mesurer par celle de son domaine et des méthodes
nécessaires à sa résolution ce qui conduit à :
Ordonnancement dans les ateliers. Cours donné par le Dr. DERBALA Ali
UNIVERSITE SAAD DAHLAB DE BLIDA
Complexité des algorithmes et … 28
a) tenir compte du nombre de paramètre du système
b) la complexité computationnelle, qui prend en compte le temps et la place nécessaire pour
résoudre ce problème sur un ordinateur
c) on peut tenir compte de la complexité des démonstrations proposées, mesurées par les
caractéristiques structurelles de leurs graphes.
Notons que certains systèmes complexes lorsque leur description est exacte, peuvent devenir
moins complexes à un certain degré d'approximation. Souvent les problèmes intéressants se
montrent difficiles. La complexité d'un problème peut être spatiale ( les algorithmes connus
demandent une place en mémoire exagérée ) ou temporelle ( le temps nécessaire à leur
résolution qui est démesurée). Nous nous intéresserons à la complexité temporelle.
2. Comment mesurer l'efficacité d'un algorithme
Un algorithme de résolution d'un problème P donné est une procédure, décomposable en
opérations élémentaires, qui transforment les données en résultats. La première idée pour
comparer et évaluer des algorithmes est de les programmer, puis de mesurer leurs durées
d'exécution. Le temps de calcul dépend trop de la machine, du langage de programmation, du
compilateur utilisé pour le langage et les données. En pratique on compte le " nombre
d'opérations caractéristiques " de l'algorithme à évaluer. Ce nombre ne dépend ni de la
machine, ni du langage et peut s'évaluer sur du papier. L'évaluation dans certaines conditions
s'appellent " complexité de l'algorithme ". Ce n'est pas la complexité de structure ou la
difficulté de programmation. Nous établissons une relation entre la durée d'exécution de
l'algorithme exprimée en termes du nombre d'opérations élémentaires, et la taille, exprimée en
termes de caractères nécessaires pour coder les données. Quelques questions peuvent se poser:
quelles sont les opérations élémentaires que nous allons prendre en compte ? Quel codage des
données nous permettra de mesurer la taille du problème? Quelle est la nature de la relation
liant la taille des données et le nombre d'opérations élémentaires ?
La taille d'une donnée est la quantité de mémoire pour la stocker. Il faudrait la mesurer en
nombre de bits. La complexité d'un algorithme A est une fonction CA(N) donnant le nombre
d'instructions caractéristiques exécutées par A dans le pire des cas, pour une donnée de taille
N. Les opérations élémentaires sont en général, l'addition, la soustraction, la multiplication, la
division, la comparaison, l'incrémentation etc. La complexité est basée sur la donnée qui va
demander le plus du travail à l'algorithme. Une complexité moyenne se calcule en effectuant
par exemples, des statistiques de temps de calculs sur un grand nombre de problèmes_tests.
Ordonnancement dans les ateliers. Cours donné par le Dr. DERBALA Ali
UNIVERSITE SAAD DAHLAB DE BLIDA
Complexité des algorithmes et … 29
La connaissance du pire des cas est critique pour des applications temps réel tel le contrôle
aérien, le robotique, l'automatisme, les systèmes d'alarmes qui exigent un temps de réponse
borné.
Une donnée d'un algorithme de chemin optimal dans un réseau ou graphe valué comprendra le
nombre N de sommets, la liste des sommets, le nombre M d'arcs et la liste des arcs avec
chacun d'eux, la valeur numérique de l'arc associée.
3. Ordre d'une fonction
Considérons deux algorithmes A1 et A2 pour un même problème de taille N, avec
CA1(N) = N2/2 et CA2(N) = 5 N. L'algorithme A2 fait plus d'opérations que A1 pour N égal à
une valeur moins de dix strictement mais moins dès que N est supérieur à dix. A2 ira toujours
plus vite à partir d'une certaine taille du problème. Cette idée de croissance s'exprime par
l'ordre d'une fonction.
Définition 1. Soient f, g deux fonctions de dans . On dit que f est d'ordre inférieur ou
égal à g, ou d'ordre au plus g, si on peut trouver un réel x0 et un réel c tels que :
x x0, f(x) c. g(x).
g devient plus grande que f à partir de x0, à un facteur c près.
On l'écrit O(g), f O(g) ou f = O(g). f est un grand O de g.
Exemple 1 : 5 N = O(0.5 N2) car 5 N 0.5 N2 pour N 10.
Les complexités des algorithmes sont souvent exprimées à l'ordre près.
On dit que f est polynomiale s'il existe un k réel, tel que f est un O(Nk).
Exemple 2 : Soit à chercher si un entier x est présent dans un tableau T = { T1, T2, …, Tn } de
n entiers selon l'algorithme suivant :
i : = 1
Tant que ( i n ) et ( Ti x )
I : = i + 1
Ft
On peut trouver x bien sûr dans T1, mais au pire x n'est pas dans T et l'algorithme va exécuter
n fois le corps de la boucle. Soit n tests et n incrémentations de i. Un dernier concluant i > n
Ordonnancement dans les ateliers. Cours donné par le Dr. DERBALA Ali
UNIVERSITE SAAD DAHLAB DE BLIDA
Complexité des algorithmes et … 30
va provoquer la sortie. Le test Ti x est exécuté n + 1 fois au pire. On dira que cette recherche
est en O(n).
Définition 2 : Un codage est raisonnable si le nombre d'emplacements nécessaires pour coder
un entier N est égal à [ log(N+1)] dans une base.
Exemple 3 : addition de deux nombres A et B. Ce n'est même pas un POC. En codage
raisonnable, la taille des données est [log(A+1)] + [log(B+1)] + 1. En codage décimal le
nombre d'opérations est borné par 3 n.
On peut proposer une façon d'additionner qui n'est pas polynomiale. Le codage est le même
mais l'algorithme est : tant que A > 0 faire
A : = A - 1 et B : = B + 1;
Fin tant que.
A la fin de l'algorithme, B contient la somme cherchée. Le nombre d'opérations N est égale à
A et dans le plus mauvais cas, si A = 10k et B = 0, on a N = 10k. Cette algorithme n'est pas
polynomial.
4. Bons et mauvais algorithmes
Une classification distingue les algorithmes polynomiaux, de complexité de l'ordre d'un
polynôme, et les autres dits exponentiels.
Des exemples de complexités polynomiales sont : logn, n0. 5, n logn, n2, …, n5.
Une complexité exponentielle est une fonction en, 2n, ou nlogn dite sous exponentielle, n! et nn.
Un bon algorithme est polynomial.
Pour appréhender ce qu'est une croissance exponentielle, on dresse le tableau suivant. Les
temps de calculs supposent une micro- seconde par instruction de haut niveau du CPU.
Taille
Complexité 20 50 100 200 500 1000
103n 0.02s 0.05s 0.1s 0.2s 0.5s 1s
103 n log2n 0.09s 0.3s 0.6s 1.5 s 4.5s 10s
100 n20.04 0.25 1 4s 25s 2 mn
10 n30.02s 1s 10 s 1 mn 21 mn 27 h
Nlogn 0.4s 1.1 h 220 jours 12500 ans 5. 1010 ans -
Ordonnancement dans les ateliers. Cours donné par le Dr. DERBALA Ali
UNIVERSITE SAAD DAHLAB DE BLIDA
Complexité des algorithmes et … 31
2 n/3 0.0001s 0.1s 2.7 h 3 . 106 ans - -
2n1s 36 ans - - - -
3n58 mn 2.1011ans - - - -
n! 77.100ans - - - - -
Les cases non remplies correspondent à des durées supérieures à 1000 milliards d'années.
La puissance de la machine ne résout rien pour des complexités exponentielles. Pour traiter un
problème de taille 100 dans le même temps qu'un problème de taille 50, il suffit d'un
ordinateur 10 fois plus puissant pour une complexité de 10. n3 , 4800 fois plus puissant pour
nlogn , 100.000 fois plus pour 2n/3 . Ce qui est impossible actuellement.
Ces calculs montrent qu'il est faux de croire qu'un ordinateur peut résoudre tous les problèmes
combinatoires. Il faut se méfier des méthodes énumératives consistant à examiner tous les cas
possibles. Elles conduisent à des algorithmes exponentiels. L'énumération des parties d'un
ensemble de n objets est en O(2n), celle des affectations de n objets à n autres est en O(n!), et
n décisions successives avec k possibilités à chaque fois génèrent kn possibilités.
5. Problème d'optimisation combinatoire
Nous rappelons qu'un problème d’optimisation combinatoire consiste à chercher le minimum
s* d’une application "f " d'un ensemble S dans R tel que f(s*) = )s(f
Ss
Min
. Par exemple,
mesurer des durées de tâches avec des nombres entiers de secondes offre une précision
largement suffisante pour un problème d'ordonnancement industriel. " f " est appelée
" fonction économique ou objectif ". Parfois on s'intéresse aux éléments de S vérifiant
certaines contraintes, ce sont des solutions réalisables. Une donnée ( S, f ) est appelée un cas
du POC ou instance.
Un problème d'existence ( PE) appelé aussi problème de décision ou de reconnaissance
consiste à chercher dans un ensemble fini S s'il existe un élément "s" vérifiant une certaine
propriété P. Il peut être formulé par un énoncé et une question à réponse oui-non. On peut les
considérer comme des problèmes d'optimisation particuliers en définissant comme fonction
objectif f, f(s) = 0 si et seulement si s vérifie P.
Un grand nombre de problèmes peuvent être abordés par l'optimisation combinatoire. Il existe
un " problème d'existence associé" à tout POC. Il suffit d'ajouter à la donnée S et f, un entier k
et de définir la propriété P par " f(s) k ? " .
Ordonnancement dans les ateliers. Cours donné par le Dr. DERBALA Ali
1 / 10 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !