Le problème de la somme de sous-ensemble Question 1 Qu’est-ce qu’un problème NP-complet ? Nous considérons le problème suivant: Soient données deux séquences d’entiers x1 , . . . , xk et y1 , . . . , yk et un entier S. On veux savoir si il existe xi et yj avec xi + yj = S. L’algorithme le plus simple est en O(k 2 ) en supposant que les opérations élémentaires ont un coût constant. Question 2 Donnez un algorithme en O(k ∗ log2 (k)). Le problème de la somme de sous-ensemble. Un sous-ensemble fini d’entiers S ⊂ Z et un entier M sont donnés. Le problème est de décider, si il y a un sous-ensemble non-vide de S dont la somme des éléments est M . L’algorithme le plus simple pour résoudre le problème de la somme de sous-ensemble parcourt tous les sous-ensembles et teste si leur somme est égale à M . Question 3 Quel est la complexité de cet algorithme ? Question 4 Donnez un algorithme plus efficace en se basant sur l’idée suivante: On sépare S en deux sous-ensembles de même taille. Donnez la complexité de l’algorithme. Question 5 Pourquoi est-ce qu’on ne peut pas séparer en quatre, etc. pour obtenir encore une meilleure complexité ? Un autre algorithme est donné comme suit: Soit S = {x1 , . . . , xn }. Soit Q(i, s) = 1 ssi il y a un sous-ensemble de {x1 , . . . , xi } dont la somme est s. On considère toutes les valeurs de Q(i, s) pour 1 ≤ i ≤ n et s entre deux bornes choisis judicieusement. On calcule les Q(i, s) récursivement. Question 6 Comment choisir les bornes ? Donnez l’algorithme. Quel est la complexité de cet algorithme ? Question supplémentaire: Question 7 Montrez que le problème de la somme de sous-ensemble est NP-complet. Indication: Réduisez 3-CNF-SAT (Satisfaisabilité de formules booléennes en forme normale conjonctive avec exactement trois literaux par clause). 1