Professional Documents
Culture Documents
TD : Classes de complexité P et NP
Exercice 11. La méthode naïve pour chercher le plus petit diviseur d non trivial d'un entier p impair
consiste à tester tous les entiers d impairs inférieurs à p1/2, jusqu'à trouver un diviseur (en cas d'échec,
on en déduit que p est premier). Exprimer la complexité de cet algorithme en utilisant la notation
"grand-O", d'abord en fonction de p, ensuite en fonction de la taille de p.
Exercice 12. Montrer qu'une expression O ( ln n ) est aussi O ( log2 n ), et vice-versa. Les notations
O ( e n ) et O ( 2 n ) sont-elles équivalentes ?
Exercice 41.
Exercice 43.
Exercice 44.
Solutions
Exercice 11. La complexité de l'algorithme est assurément en O ( p1/2 ), même si, en moyenne, elle
est beaucoup plus faible (la plupart des entiers ont un petit diviseur). En désignant par n la taille de p,
la complexité est en O ( 2 n/2 ), car p est borné par 2n+1.
Le fait de tester seulement les diviseurs impairs divise par 2 le temps d'exécution, ce qui est
appréciable en pratique, mais n'est pas visible dans la notation "grand-O", par définition de celle-ci.
Noter aussi qu'on suppose implicitement, ci-dessus, que le coût d'une division est constant, alors qu'il
est en O ( n2 ), et donc la complexité est rigoureusement O ( n2 2 n/2 ) ; en pratique le terme
exponentiel empêche n de devenir grand (par exemple il ne dépasse certainement pas 100), et donc le
coût d'une division peut être considéré comme borné par une constante assez petite (sur un processeur
standard, le coût d'une division dépend de la taille des entiers exprimée en mots de 32 bits, taille qui
ne dépasse certainement pas 4 pour p, et 2 pour un diviseur d).
Exercice 12. Par définition, n = 2 log2 n, d'où en prenant le logarithme népérien de chaque côté :
ln n = ( log2 n ) ln 2 .
Par contre e n / 2 n = ( e / 2 ) n est loin d'être borné par une constante, donc une expression O ( e n )
n'est pas forcément O ( 2 n ) — mais l'inverse est vrai.
Exercice 41.
x y z x ¬y y ¬z
0 0 0 0 0 0
0 0 1 0 0 1
0 1 0 0 1 1
0 1 1 0 0 1
1 0 0 1 0 1
1 0 1 1 0 1
1 1 0 0 1 1
1 1 1 0 0 1
2. = ¬x ¬y ¬z vérifie : est une tautologie.
3. Par distributivité on obtient :
(x ¬y ) (y ¬z ) =
(x y) (x ¬z ) ( ¬y y) ( ¬y ¬z )
La troisième clause est inutile (tautologie), il reste :
( x y ) ( x ¬z ) ( ¬y ¬z )
et on peut remarquer que la clause du milieu est redondante (examiner les tables de vérité, ou
considérer successivement les cas y = 0 et y = 1). D'où finalement :
( x y ) ( ¬y ¬z )
Ces clauses correspondent aux lignes de la table de vérité pour lesquelles la formule de départ
vaut 0, à savoir les lignes 1 et 2 ( x = 0, y = 0, d'où la clause x y, qui vaut 0 exactement pour
ces deux lignes), et les lignes 4 et 8 ( y = 1, z = 1, d'où la clause ¬y ¬z, qui vaut 0 exactement
pour ces deux lignes).
Exercice 44.