Il est toujours complet, même pour k = 2 . Étant donné une instance de somme de sous-ensemble, nous pouvons la transformer en cette variante en divisant les nombres et en ajoutant des bits supplémentaires.NPk=2
Premièrement, la somme de tous les nombres dans le problème sera inférieure à pour une certaine valeur de m .2mm
Maintenant, prenons un nombre du problème d'origine qui a défini k bits. Nous diviserons ce nombre en k nombres avec exactement 2 bits définis de telle sorte que la somme de ces nombres soit n + 2 k + m . Nous pouvons le faire récursivement, en trouvant des nombres ⌈ k ⌉ qui résument jusqu'aux premiers ⌈ k ⌉ bits plus 2 k + m - 1 et des nombres ⌊ k ⌋ qui résument jusqu'aux derniers ⌊ k ⌋ bits plus 2 knkkn+2k+m⌈k⌉⌈k⌉2k+m−1⌊k⌋⌊k⌋ .2k+m−1
En plus de ce nombre, nous ajouterons également le nombre au problème. Une solution doit contenir ce nombre ou tous les k nombres construits précédemment. Si la valeur cible d'origine était t, la nouvelle valeur cible sera t + 2 k + m .2k+mktt+2k+m
Si le problème d'origine avait plus d'un nombre, nous pouvons répéter ce processus en prenant pour la nouvelle valeur de m .k+m+1m
Il n'y a que deux façons de régler le bit à la position : la réponse peut contenir le nombre 2 k + m ou tous les k nombres qui résument jusqu'à n + 2 k + m . Nous avons donc réduit la somme de sous-ensemble à votre variante de somme de sous-ensemble.k+m2k+mkn+2k+m
Par exemple, prenons avec la valeur cible 7 . Ce problème pourrait être codé comme la variante de somme de sous-ensemble présentée ici en prenant les nombres binaires suivants:{2,3,5}7
2 est mappé sur et 0000 1 . (L'utilisation du bit supplémentaire n'est pas strictement nécessaire ici.)0100 10000 1
3 est mappé sur et 0000 00 011000 00 1,0100 00 10000 00 01
5 est mappé à et 0000 00 000 01 .1000 00 000 1,0010 00 000 10000 00 000 01
La nouvelle valeur cible deviendrait .1110 10 010 01
Si le problème d'origine est représenté avec bits, alors le problème transformé a au plus O ( n 4 ) bits. Le problème d'origine aura au plus O ( n ) nombres chacun avec au plus O ( n ) bits, donc la somme de tous sera également O (n). Le problème transformé aura O ( n 2 ) nombres (puisque chaque nombre à n bits est divisé en n + 1 nombres à 2 bits, leur longueur étant au plus O ( n 2 )nO(n4)O(n)O(n)O(n2)nn+1 2O(n2)puisque nous utilisons bits supplémentaires pour chaque nombre. La taille totale du problème transformé est donc O ( n 4 ) bits.nO(n4)