Problème de diviser un ensemble d’entiers en deux sous-ensembles de somme égale.

Problème de décision

  • Instance : Séquence d’entiers
  • Question : Existe-t-il deux sous-séquences ​ et ​ telles que :

Complexité

Partition est NP-complet.

Certificat

  • Certificat de verification : Indicateur pour chaque élément (dans ​ ou ​)
  • Vérification : Calculer les sommes et vérifier l’égalité

Réductions

Partition Sous-somme

Sous-somme ​ Partition

où :

Idée : Les deux nouveaux éléments ne peuvent pas être dans la même partition.

Partition Sac à dos (Knapsack)

Généralisations

3-Partition

Diviser en 3 sous-ensembles de somme égale (NP-complet).

Réduction depuis Partition :

. Si est impair, retourner faux.

4-Partition

Similaire avec

Self-réductibilité

Partition est self-réductible.

Algorithme avec oracle

// partitiondec(S) -> oui/non   (oracle O(1))

// Idée : Déterminer si deux éléments seront dans la même partition

si !partitiondec(S):
	retourner faux
s1 = {x0}, s2 = {}
pour i = 2 à n:
	si partitiondec(S \ {xi}):
		s1 = s1 ∪ {xi}
	sinon:
		s2 = s2 ∪ {xi}
retourner (s1, s2)