Abhängig von Ihrem können Sie beliebig schwierige Probleme bekommen f.
Lassen Aeine Sprache sein. Definierenf wie folgt:
f(x)={01x∈Ao.w.
Betrachten Sie Set S={x}. Es gibt eine nicht leere TeilmengeX⊆S st f(Σx∈Xx)=0 iff x∈A.
Ohne Komplexitätsanforderungen zu stellen f Sie können Probleme von beliebiger Schwierigkeit bekommen.
Ein interessanter Fall ist, wenn fist von eingeschränkter Komplexität, zB Polynomzeit berechenbar. In diesem Fall können wir es zum Invertieren verwendenfDaher können die Probleme so schwierig sein wie das Invertieren einer beliebigen Polynomzeitfunktion (und unter der Annahme, dass es polynomialzeitberechnbare Pseudozufallszahlengeneratoren gibt, die in subexponentieller Zeit schwer zu invertieren sind, bedeutet dies, dass Sie das Problem nicht lösen können): let geine beliebige polynomialzeitberechnbare Funktion sein. Angenommen, wir sind gegebeny∈Range(g) und wir wollen eine finden x st g(x)=y. Definierenf(x)=g(x). LassenS={0,1,2,4,8,…,2m} für geeignete große m (um sicherzustellen, dass ein Vorbild von ykann als Summe der Zahlen in der Menge dargestellt werden). Bei jedem Satz entfernen wir eine Nummer2i aus der Menge und prüfen Sie, ob noch eine Teilmenge vorhanden ist X st f(Σx∈Xx)=y. Wenn die Antwort Ja lautet, wissen wir, dass es eine Lösung gibt, die diese Nummer nicht benötigt. Deshalb entfernen wir sie ausSpermanent. Wenn die Antwort Nein lautet, wissen wir, dass wir diese Nummer für alle Lösungen benötigen. Nachm Schritte werden wir einen Satz haben S Das ist eine Lösung und keine Teilmenge davon ist eine Lösung, also können wir zurückkehren x=Σx∈Sx als unsere Antwort.
Auf der anderen Seite, wenn f Ist die Polynomzeit berechenbar, liegt das Problem in NP.
Im besonderen Fall, dass die Funktion f ist linear, da Σ pendelt mit linearen Funktionen, das Problem ist das gleiche wie das Lösen der Teilmengen-Summe vorbei f(S)={f(x)∣x∈S}. Solange die lineare Funktion nicht konstant ist, ist das Problem so schwer wie die Teilmengen-Summe, d. H.NP-hard (Wenn Sie die Teilmengen-Summen-Instanz lösen möchten (S,k), anwenden f−1 an Mitglieder von S erhalten S′ und verwenden Sie dann die geänderte Version auf (S′,k) um es zu lösen).
(Dieser Trick funktioniert auch für allgemeinere Fälle, in denen die Funktion f ist die Polynomzeit berechenbar und hat eine Umkehrung, die auch die Polynomzeit berechenbar ist.)