Vous êtes sur la page 1sur 21

CROISSANCE DES FONCTIONS

ET CLASSE DES PROBLÈMES


Cheikh KACFAH
cheikh.kacfah@institutsaintjean.org
COMPARAISON DES
ALGORITHMES
• Le complexité permet de mesurer le temps d’exécution des algorithmes en
fonction de la taille des données d’entrée

• Comparez deux algorithmes revient, entre autres, à comparer leur temps


d’exécution et donc leur complexité

• Cette comparaison se fait généralement pour des données d’entrée de grandes


tailles.

• Ceci a pour conséquence qu’un focus sur l’ordre de grandeur des algorithmes
suffit dans bien des cas pour préférer un algorithme à un autre

• L’ordre de grandeur définit le temps d’exécution asymptotique d’un algorithme


2
NOTATIONS ASYMPTOTIQUES: Θ
• Pour une fonction donnée g(n), on note Θ(g(n))
l’ensemble de fonctions suivant :

Θ(g(n)) = {f(n) : ∃c1, c2 ∈ ℝ+, ∃ n0 ∈ ℕ+ telles que 0 ≤ c1g(n) ≤ f(n) ≤ c2g(n), ∀n ≥ n0}

• Θ(g(n)) est un ensemble. On devrait écrire f(n) ∈ à


Θ(g(n)); mais la notation courante est f(n) = Θ(g(n))

• f(n) = Θ(g(n)) veut dire que f(n) est « égale » à g(n) à


un facteur constant près, lorsque n devient très grand

© Introduction à l’algorithmique

3
NOTATIONS ASYMPTOTIQUES: Θ
• Lorsque f(n) est une fonction polynôme de degré d asymptotiquement
positive, on a toujours f(n) = Θ(nd)

• Intuition: posons f(n) = cd.nd + cd-1.nd-1 + … + c0

• Alors f(n)/nd est bornée et tend vers cd lorsque n devient très grand

4
NOTATIONS ASYMPTOTIQUES: O
• Pour une fonction donnée g(n), on note O(g(n))
l’ensemble de fonctions suivant :

O(g(n)) = {f(n) : ∃c ∈ ℝ+, ∃ n0 ∈ ℕ+ telles que 0 ≤ f(n) ≤ cg(n), ∀n ≥ n0}

• Θ permet de borner une fonction à la fois par excès et par


défaut.

• Quand on ne dispose que d’une borne supérieure asymptotique,


on utilise la notation O

• O est utilisée pour majorer le cas le plus défavorable et donc


toutes les entrées possibles (ce qui n’est pas le cas de Θ)

© Introduction à l’algorithmique
• f(n) = Θ(g(n)) implique f(n) = O(g(n))

5
NOTATIONS ASYMPTOTIQUES: Ω
• Pour une fonction donnée g(n), on note Ω(g(n))
l’ensemble de fonctions suivant :

O(g(n)) = {f(n) : ∃c ∈ ℝ+, ∃ n0 ∈ ℕ+ telles que 0 ≤ cg(n) ≤ f(n), ∀n ≥ n0}

• Ω fournit une borne inférieure asymptotique

• Elle permet de minorer le temps d’exécution


d’un algorithme

• f(n) = Θ(g(n)) ssi f(n) = O(g(n)) et f(n) =


© Introduction à l’algorithmique
Ω(g(n))
6
ÉQUATIONS ET NOTATIONS
ASYMPTOTIQUES
• Sachez que ces manipulations sont possibles et ont du sens…
4 2 4 2
3
n + 6n + 1 = 3
n
+ Θ(n)
2
= Θ(n )

À votre avis lequel? 🤔

7
CLASSIFICATION DES
ALGORITHMES
Les algorithmes habituellement rencontrés peuvent être classés dans les
catégories suivantes

• O(1) - Temps constant: L’exécution ne dépend pas du nombre d’éléments


en entrée mais s’effectue toujours en un nombre constant d’opérations

• O(log (n)) - Complexité logarithmique: La durée d’exécution croît


légèrement avec n. Ce cas de figure se rencontre quand la taille du
problème est divisée par une entité constante à chaque itération.

• O(n) - Complexité linéaire: C’est le cas de programme avec une boucle de


k à n et le corps de la boucle effectue un travail de durée constante et
indépendante de n
8
CLASSIFICATION DES
ALGORITHMES (SUITE)
• O(n.log(n)) - Complexité n-logarithmique: Se rencontre dans les algorithmes où à
chaque itération la taille du problème est divisée par une constante avec à chaque
fois un parcours linéaire des données

• O(n2) - Complexité quadratique: c’est le cas d’algorithmes avec deux boucles


imbriquées chacune allant de k à n et avec le corps de la boucle interne qui est
constant.

• O(n3) - Complexité cubique: Idem que quadratique mais avec 3 boucles


imbriquées

• O(np) - Complexité polynomiale: Généralise les cas précédents

• O(2n) - Complexité exponentielle: Qualifiés de « naifs », inexploitables en pratique


9
CLASSIFICATION DES
ALGORITHMES - NOTA
• À l’inverse d’un algorithme naïf (complexité exponentielle) et par convention,
un algorithme est dit praticable, efficace s’il est polynomial.

• Les relations d’inclusion ci-dessous sont vérifiées:


O(1) ⊂ O(log(n)) ⊂ O( n) ⊂ O(n) ⊂ O(nlog(n)) ⊂ O(n 2) ⊂ O(n 3) ⊂ …O(2n) ⊂ O(n!)

© Eric TRICHET. Introduction


à la complexité algorithmique

10
LA COMPLEXITÉ EN PRATIQUE
• On rêve tous écrire des algorithmes efficaces, cependant:

• Proposez d’abord un algorithme qui résout le problème, puis optimisez le

• Deux grandes qualités d’un algorithme:

1. Maintenabilité (facilité à comprendre, coder, déboguer)

2. Rapide

• Privilégier le 2 sur le 1 ssi la complexité baisse de manière sensible. En cas de lenteur,


profiler vos algorithmes: où est-ce qu’on perd du temps? quelles sont les fonctions qui sont
exécutées et combien de fois

• Ce que fait un algorithme doit se voir dans une lecture attentive du code

11
CLASSE DE PROBLÈMES : POLYNÔMES I
• Un algorithme (sa complexité pour être précis) est dit polynomiale si il est O(nk), pour un
certain entier k. Il existe plusieurs raisons de s'intéresser à cette classe d'algorithmes

1. Les algorithmes efficaces sont polynomiaux, autrement dit les algorithmes non


polynomiaux sont certainement inefficaces. Bien sûr les algos sous-polynomiaux
sont (même très) efficaces; comme ceux en log(n) et les algos de complexité
O(n100) ne le sont certainement pas.

2. Cette notion est robuste, c'est-à-dire indépendante de la technologie.

3. Les algorithmes polynomiaux forment une classe stable : la composition de deux


algorithmes polynomiaux reste polynomiale, et un algorithme construit
polynomialement à partir d'appels à des procédures de complexité polynomiale,
reste polynomial.

12
CLASSE DE PROBLÈMES : POLYNÔMES II

• La théorie de la complexité cherche à classer les problèmes de décision (ceux qui ont une réponse par
oui ou par non)

• La classe P est formée des problèmes de décision qui peuvent être résolus par un algorithme
polynomial.

• Exemple (problème DIV_COMMUN): étant donné un couple d'entiers (a, b), a et b possèdent-ils un


diviseur commun (en dehors de 1) ?

• DIV_COMMUN appartient à P ; en d'autres termes, il existe une procédure procDC de


complexité polynomiale, telle que procDC(a, b) = 1 si a et b possèdent un diviseur commun
> 1, et 0 sinon.

• Remarquons que l’algorithme naïf (diviser a et b par tous les nombres entre 2 et min(a, b)) est de
l’ordre O(2n) où n est le nombre de bits sur lesquels a et b sont représentés. Par contre,
l’algorithme d’Euclide (qui consiste à trouver pgcd(a, b)) est de l’ordre de O(n3).

13
CLASSE DE PROBLÈMES : POLYNÔMES III

• Notation: , Parfois au lieu de qualifier les éléments de P de problème de décision,


certains auteurs parlent de langage. Cela est équivalent, car un problème de
décision est un prédicat A, dont l'argument u peut être considéré comme un mot
de n bits, et le langage L associé à A est l'ensemble des mots dont A est
la fonction caractéristique ; autrement dit la relation entre le problème de
décision A et le langage L est la suivante :

L = { u | A (u) }, i.e u ∈ L si A(u) est vrai

• On dira donc: La classe P est formée des langages reconnus (ou acceptés) par les


machines de Turing polynomiales.

• Recherche personnelle: Machine de Turing 👨💻


• Consulter cette excellente ressource sur son fonctionnement https://tinyurl.com/sz5cckv
14
CLASSE DE PROBLÈMES : NP I
• Le NP ne signifie pas non polynomial, mais polynomial non-déterministe. La classe NP est
donc une extension de la classe P, en autorisant des choix non déterministes pendant
l'exécution de l'algorithme. C’est comme si sur des machines de Turing, on autorise plusieurs
transitions à partir d'un état et d'un symbole lu sur la bande.

• Cette notion est directement inspirée de celle d'automate non déterministe, où la lecture
d'une lettre d'un mot peut conduire, à partir d'un état donné, à plusieurs états différents.
Rappelons qu'un mot u est accepté (on dit aussi reconnu) par un automate non déterministe
s'il existe un chemin, étiqueté par u, qui conduise d'un état initial à un état terminal.

• Exemple d’algorithme polynomial


déterministe
• À votre avis, il fait quoi?

15
CLASSE DE PROBLÈMES : NP II
• La classe NP est formée des problèmes de décision qui peuvent être résolus par un algorithme
polynomial non déterministe.

• Ou encore: La classe NP est formée des langages reconnaissables par une machine de Turing polynomiale
non déterministe.

• Tout algorithme non déterministe peut être simulé par un algorithme déterministe, qui parcourt
récursivement l'arbre de tous les choix possibles. La complexité d'un algorithme non déterministe est
mesurée par le temps d'exécution de la plus longue branche, alors que la complexité de sa simulation
déterministe est égale au temps d'exécution de l'arbre entier; lorsque la première est polynomiale, la
seconde est en général exponentielle (dès que l'arbre est suffisamment équilibré).

• Autre définition: La classe NP est formée des problèmes de décision qui possèdent un vérifieur


polynomial.

• Une procédure (déterministe) booléenne V à deux variables est un vérifieur pour le problème de


décision A si et seulement si : A (u) ∃x V (u, x). Un argument x qui satisfait le prédicat V(u, x)
est appelé un certificat de u

16
CLASSE DE PROBLÈMES : NP III
• Exemple : SAT (SATISFIABILITÉ D’UNE EXPRESSION BOOLÉENNE)

• Données: un entier n, et Φ une expression booléenne avec n variables


booléennes, x1, ..., xn

• Sortie: oui, si Φ est satisfiable, i.e. il existe une valuation v telle que v(Φ) = Vrai

• Exemple 1: si Φ = (x1 ∨ x2 ∨ x3) ∧ (x1 ∨ x4) ∧ (¬x1 ∨ ¬x3) ∧ (x1 ∨ ¬x4)


Φ est satisfiable: v(x1) = Vrai, v(x3) = Faux (et peu importe x2 et x4)

• Exemple 2: si Φ = (x1 ∨ x4) ∧ (¬x1 ∨ ¬x3) ∧ (x1 ∨ ¬x4) ∧ (¬x1 ∨ x3)


Φ n’est pas satisfiable (Comment le prouver?)

17
CLASSE DE PROBLÈMES : NP IV
• Exemple : SAT (SATISFIABILITÉ D’UNE EXPRESSION BOOLÉENNE)

• Pour ce problème, on cherche si il existe une solution qui vérifie


une certaine contrainte.

• Les "candidats-solutions" sont des objets pas trop « gros » or


vérifier si une solution vérifie la contrainte est « facile » … c’est la
spécificité des NP

• Remarque: ça ne nous donne pas pour autant d’algorithme


efficace et énumérer les candidats solutions nous amène à une
solution exponentielle!

18
CLASSE DE PROBLÈMES : NP IV
• Exemple 3: Coloration de graphe

• Données: G = (S, A) un graphe

• Sortie: oui, si le graphe peut être coloré en 3 couleurs i.e. on peut trouver: une application col de S
dans {1, 2, 3} telle que col(s)≠col(s’) si ((s,s’) ∈ A ou (s’,s) ∈ A)

• Un certificat est valide si et seulement si aucun arc ne relie deux noeuds de même couleur; le
vérifier est bien polynomial:
boolean A(col, G){
Pour chaque arc (s,d) de G
si col(s)=col(d) retourner Faux;
retourner Vrai; Comment sont stockées les (couleurs des) sommets?
}

• La complexité de l’algorithme est de l’ordre de card(A) donc bien polynomiale. ’Etre 3-coloriable’
est donc bien une propriété NP.

19
ALLER PLUS LOIN
• Les autres complexités en temps: EXPTIME (temps exponentiel par une machine
déterministe) et NEXPTIME (temps exponentiel par une machine non-déterministe)

• Les classes de complexité en espace: L (résolus en espace logarithmique sur une


machine déterministe), NL (…espace logarithmique sur une machine non-déterministe),
PSPACE (espace polynomial sur une machine déterministe), NPSPACE (égal à
PSPACE), EXSPACE (résolus en espace exponentiel sur machine déterministe) et
NEXPSPACE (égale à EXSPACE)
Nota: On a les inclusions: L ⊆ NL ⊆ P ⊆ NP ⊆ PSPACE = NPSPACE ⊆ EXPTIME
⊆ NEXPTIME ⊆ EXPSPACE = NEXPSPACE ;

• La conjecture NP ≠ P …

• Problèmes C-difficiles et C-complets (C étant une classe de complexité)

20
RÉFÉRENCES
• Jean BETREMA. Modèles de calcul. Université de
Bordeaux.

• Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C.


(2009). Introduction to algorithms. MIT press.

• Eric TRICHET. Introduction à la complexité


algorithmique. Centre de Ressources et d’Innovation
Pédagogiques de l’Université de Limoges

Vous aimerez peut-être aussi