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 :
où . 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)