Betrachten Sie das folgende Problem.
Wenn eine Menge von ganzen Zahlen gegeben ist, entscheiden eine Funktion und , ob es so dass .
Wird dies immer noch als Teilmengenproblem betrachtet ?
Zum Beispiel gegeben
und , finde eine Teilmenge so, dass für . In diesem Fall ist eine Lösung .
complexity-theory
Verkohlen
quelle
quelle
Antworten:
Es kommt auf die Form von . Wenn , ist es identisch mit der Teilmengen-Summe. Wenn , ist es ein triviales Problem mit einer -Lösung: return . Sie können möglicherweise auch auf andere Weise definieren, um die Frage auch mehr oder weniger schwierig zu machen.f f(x)=x f(x)=0 O(1) true f
Unten sehen Sie einen Mini-Komplexitätszoo, der verschiedenen Auswahlmöglichkeiten von :f
Hat jemand etwas anderes Spaß gemacht?
quelle
Abhängig von Ihrem können Sie beliebig schwierige Probleme bekommenf .
LassenA eine Sprache sein. Definierenf wie folgt:
Betrachten Sie SetS={x} . Es gibt eine nicht leere TeilmengeX⊆S st f(Σx∈Xx)=0 iff x∈A .
Ohne Komplexitätsanforderungen zu stellenf Sie können Probleme von beliebiger Schwierigkeit bekommen.
Ein interessanter Fall ist, wennf ist von eingeschränkter Komplexität, zB Polynomzeit berechenbar. In diesem Fall können wir es zum Invertieren verwendenf Daher 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 g eine 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 y kann 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 ausS permanent. 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, wennf Ist die Polynomzeit berechenbar, liegt das Problem in NP .
Im besonderen Fall, dass die Funktionf 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 Funktionf ist die Polynomzeit berechenbar und hat eine Umkehrung, die auch die Polynomzeit berechenbar ist.)
quelle
on the other hand'? Your restricted complexity example uses polynomial time computability as your restriction, and then you suggest
andererseits, aber rede weiter über die Berechenbarkeit der Polynomzeit? Auch in Ihrem letzten Absatz war ich verwirrt von dem Kommentar "Solange die lineare Funktion nicht konstant ist", aber ist das Teilmengen-Summenproblem nicht von Natur aus konstant? 0 oder 1? Danke für die gründliche Antwort.Ja, dies ist immer noch ein Teilmengen-Summenproblem , aber anstatt eine Teilmenge zu finden, deren Summe ist0 müssen Sie eine Summe haben, die etwas anderem entspricht (in Ihrem Beispiel ist es 3, im Allgemeinen ist es f−1(0) , das könnte eine Reihe von Zahlen sein, wenn f ist viele zu eins ).
Dies ändert nicht viel an der Schwierigkeit des Problems für das Bijektivf , hängt aber ansonsten von der Anzahl der Vorbilder ab f−1(0) hat. Wie bereits erwähnt, wennf(y)=0 wird das Problem trivial.
quelle