Complexité d'une variante de somme de sous-ensemble

9

Cette variante du problème de somme de sous-ensemble est-elle facile / connue?

Étant donné un entier m et un ensemble d'entiers positifs tels que chaque a au plus bits mis à ( ); existe-t-il un sous-ensemble tel que la somme de ses éléments soit égale à ?x i k = 2 1 x i = 2 b i 1 + 2 b i 2 ,A={x1,x2,...,xn}xik=21A A mxi=2bi1+2bi2,bi1,bi20AAm

Est-ce dans ? Est-il toujours terminé?N PPNP

Et si chaque a au plus bits mis à ? Pour le problème est trivial. k = 3 1 k = 1xik=31k=1

Vor
la source

Réponses:

8

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+mkk2k+m1kk .2k+m1

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)

Tom van der Zanden
la source
êtes-vous sûr que l'encodage ne conduit pas à une taille exponentielle de la bande de travail?
Vor
Non, je pense que le problème transformé est de taille quartique. Si l'entrée a n bits, alors il y a au plus n nombres chacun avec n bits définis. Il y aura donc O (n ^ 2) nombres dans le problème transformé (puisqu'un nombre de k bits est divisé en k + 1 nombres). Chaque nombre a une longueur de (2n) bits pour s'adapter à la somme maximale plus n bits pour chacun des n nombres du problème d'origine. Ainsi, chaque nombre aura O (2n + n ^ 2) bits, pour un total de O (n ^ 4) bits.
Tom van der Zanden
@ TomvaderZanden: J'ai ajouté une photo de votre réduction de la question; voir si je l'ai bien interprété
Vor
@ TomvaderZanden: aujourd'hui, je regarde à nouveau votre réduction, mais on ne sait pas comment, à partir d'un nombre arbitraire avec k bits définis, vous pouvez le diviser en k nombres de 2 bits où la partie "la plus élevée" résume à 2 k . Supposons que vous ayez un nombre n avec k = 13 bits définis; vous avez besoin de 13 nombres à 2 bits, mais 13 est 1101 et vous ne pouvez pas le "couvrir" avec un nombre à deux bits (votre exemple fonctionne parce que pour 3 et 5 k = 2). Je pense que cela peut être facilement résolu si vous utilisez un bit élevé différent pour chacun des k nombres de 2 bits; ils totaliseront 01111 ... 1, puis vous ajouterez un faux 0000 ... 1 qui permettra à la somme d'être de 2 k .nkk2knk=13k2k
Vor
C'est un peu vague, mais c'est certainement possible en utilisant une procédure "inductive". Vous n'avez pas réellement besoin de bits, vous avez seulement besoin de c e i l ( log k ) . Si vous souhaitez trouver 13 nombres de 1 bit totalisant 2 4 , vous devez trouver 6 nombres totalisant 2 3 et 7 totalisant également 2 3 . On peut prendre 10 2 0 + 3 2 1 ce qui résume en effet à 2 4 . kceil(logk)2423231020+32124
Tom van der Zanden
0

Il s'agit d'informations extraites de la question de Vor.

Pour le problème reste NP-complet. J'ai trouvé une réduction rapide de X-SAT monotone ( voir le schéma de la réduction ici ).k3

Le problème reste NP-complet même si , voir la réponse de Tom pour plus de détails. Voici une petite représentation de sa réduction de SUBSET SUM:k=2

entrez la description de l'image ici

Juho
la source