Sie können es nicht in O(n2−ϵ) für eine Konstante \ epsilon> 0 lösen, es ϵ>0sei denn, die Hypothese der starken exponentiellen Zeit ist falsch.
Das heißt, wenn wir einen solchen Algorithmus hätten, könnten wir n variable CNF-Erfüllbarkeit in O((2−ϵ′)n) Zeit für einige & epsi;> 0 lösen ϵ′>0. Der Grund ist, dass wir die Variablen in zwei gleiche Teile P1 und P2 von jeweils n/2 Variablen teilen könnten . Für jeden Teil konstruieren wir auf folgende Weise eine Familie F1 bzw. F2 von Teilmengen der Klauseln. Für jede Aufgabe fügen wir eine Teilmenge hinzu, die aus den Klauseln besteht, die von der Aufgabe nicht erfüllt werden. Diese Konstruktion läuft in poly(n)2n/2 -Zeit.
Um die Konstruktion F1 , ist zu beachten, dass die ursprüngliche CNF-Instanz eine Lösung hat, wenn es eine Teilmenge in F_1 gibt, die mit einer Teilmenge in F_2 disjunkt ist F2.
Wenn Sie zusätzlich zu den Elementen für jede Klausel einige zusätzliche Elemente zu Ihrer Grundmenge hinzufügen, ist es nicht allzu schwierig, dieses Disjunktitätsproblem als Frage der Mengeneinbeziehung einzubetten. Grundsätzlich nehmen Sie die Ergänzungen der Teilmengen in . Um sicherzustellen, dass zwei Sätze in nicht als Einschluss gezählt werden, fügen Sie den zusätzlichen Elementen einen Code aus einer Anti-Chain hinzu. Ein anderer Anti-Ketten-Code (für andere zusätzliche Elemente der Grundmenge) wird für die Teilmengen von , um sicherzustellen, dass kein Paar von Teilmengen von eine Einbeziehung bildet. Schließlich enthalten alle Mengen, die aus gebildet werden, alle Elemente der Anti-Ketten-Codes von .F1F1F2F2F1F2
Dies ist eine Mengeneinschlussfrage für Teilmengen auf einer -Grundmenge. Das Argument geht im Wesentlichen auf eine frühe Veröffentlichung von Ryan Williams zurück (ich kann mich nicht erinnern, welche).2n/2+1d=poly(n)
Wenn Sie sich für Mengenfamilien mit interessieren , ist eine andere Lösung, die der in Yuvals Antwort skizzierten konzeptionell sehr ähnlich ist, die Berechnung der Zeta-Transformationn=ω(2d/2)
Dabei ist die Indikatorfunktion der Eingabefamilie . Das heißt, wenn und andernfalls. Es ist klar, dass es Mengen so dass genau dann, wenn für einige .f:2[d]→R F={S1,S2,…,Sn} f(S)=1 S∈F f(S)=0 Si≠Sj Si⊆Sj fζ(S)>1 S∈F
Die Zeta-Transformation kann in der Zeit Verwendung des Yates-Algorithmus berechnet werden, siehe zum Beispiel Knuths TAOCP, vol. 2, §4.6.4. Der Algorithmus selbst ist eine recht einfache dynamische Programmierung, und es ist leicht, ihn zu ändern, um ein Beispiel für eine eingeschlossene Menge zu geben, falls eine existiert.O(d2d)
quelle
Dieses Problem kann gelöst werden, indem ein Algorithmus für die schnelle Matrixmultiplikation verwendet wird, und ich vermute auch, dass er der Matrixmultiplikation rechnerisch äquivalent ist (obwohl ich keine Möglichkeit kenne, dies zu beweisen, und ich glaube nicht, dass Techniken zum Nachweis vorhanden sind ). Diese Lösung hätte eine Laufzeit von O (n ^ {2.373}), wenn n = d, und andere Laufzeiten für andere Beziehungen zwischen d und n.
So lösen Sie es mit der Matrixmultiplikation: Sie schreiben die charakteristischen Vektoren der Mengen in die Zeilen einer n-mal-d-Matrix A und die charakteristischen Vektoren der Komplemente der Mengen in die Spalten von ad-mal-n-Matrix B. Sie Dann multiplizieren Sie A mit B. Die Paare von Mengen, die sich schneiden, sind genau die Positionen des Produkts A * B, die gleich Null sind.
Die beste bekannte Laufzeit für dieses Problem finden Sie in der Veröffentlichung von Huang und Pan zu diesem Thema. Wenn ich mich richtig erinnere, wenn d groß genug wird, wird die Laufzeit das offensichtlich optimale O (nd). Für n = d haben Sie eine Laufzeit von O (n ^ {2.373}). Für andere Beziehungen von n und d erhalten Sie andere Werte. Wenn ein optimaler Algorithmus für die Rechteckmatrix-Multiplikation existiert, erhalten Sie einen Algorithmus mit der Laufzeit O (n ^ 2 + nd) für Ihr Problem. Ich vermute, es gibt keinen besseren Weg, um Ihr Problem zu lösen, aber ich bin mir keineswegs sicher.
Diese Lösung ist wahrscheinlich nicht von praktischem Nutzen, da die Konstanten dieser Algorithmen zu groß sind. Strassens Algorithmus könnte eine Verbesserung gegenüber der naiven Lösung für vernünftige Werte von n und d ergeben, aber darüber bin ich mir nicht einmal sicher. Probleme, die mit der Matrixmultiplikation zusammenhängen, scheinen jedoch selten kombinatorische Algorithmen zu haben, die besser sind als der naive Algorithmus (um mehr als polylogarithmische Faktoren). Wenn ich also raten müsste, würde ich vermuten, dass es für Ihr Problem keinen guten Algorithmus gibt ist deutlich besser als die naive, mit den heutigen Techniken.
quelle
Wenn dann wissen wir, dass die Menge keine Antichain von Sperners Lemma ist, und so ist die Entscheidungsversion des Problems wird trivial. Es könnte jedoch interessant sein, den Fall zu betrachten, in dem nahe an diesem Wert liegt.n>(dd/2)≈2dπd/2√ n
Friedguts Arbeit zum Erdős-Ko-Rado-Theorem zeigt, dass man angesichts des charakteristischen Vektors einer Familie von Teilmengen von in der Zeit feststellen kann, ob eine sich überschneidende Familie ist (alle zwei Elemente von schneiden). Allgemeiner erlaubt uns seine Methode, zu berechnen wobei eine (spezifische) bekannte Funktion ist, die nicht Null nur, wenn disjunkt sind. hängt nur vom Histogramm von , wobei der Indikator für .f [m] O(m2m) f f
(Nebenbei, wir anmerken , dass seine Methode funktioniert auch , wenn wir gegeben sind zwei Familien , und interessiert sind in . In In beiden Fällen müssen wir die verzerrten Fourier-Walsh-Transformationen von für ein beliebiges und dann , wobei nur vom Hamming-Gewicht von abhängt .)f,g Σ=∑x∈f,y∈gS(x,y) p f,g p∈(0,1/2) Σ=∑xT(x)f^(x)g^(x) T(x) x
Wie hängt das alles mit dem vorliegenden Problem zusammen? Betrachten Sie die Familie Jedes ist von jedem . Da explizit angegeben ist, können wir den Beitrag dieser Paare zu berechnen . Gibt es noch mehr unzusammenhängende Paare? Wenn von dann ist und somit . Also ist ein Antichain iff
Dieser Algorithmus läuft in der Zeit und ignoriert die polynomiellen Faktoren in . Wenn in der Nähe von , ist dies signifikant besser als . Im Allgemeinen erhalten wir eine Verbesserung, solange .O~(n+2d) d n 2d O~(n2) n=ω(2d/2)
Wenn wir wissen, dass ein Paar existiert, das , wie finden wir es? Angenommen, wir teilen alle Mengen nach dem Zufallsprinzip in zwei Gruppen auf. Mit einer Wahrscheinlichkeit von ungefähr befinden sich die Mengen und in derselben Gruppe. Wenn wir so viel Glück haben, können wir unseren Algorithmus auf und ausführen , herausfinden, zu welcher Gruppe diese gehören, und so die Anzahl der zu berücksichtigenden Mengen halbieren. Wenn nicht, können wir es erneut versuchen. Dies zeigt, dass wir mit einer erwarteten Anzahl von Orakelaufrufen zur Entscheidungsversion tatsächlich ein Paar finden können, das .Si⊆Sj S1,…,Sn G1,G2 1/2 Si Sj G1 G2 O(logn) Si⊆Sj
Wir können den Algorithmus auch derandomisieren. Nehmen wir an, dass ohne dass die Allgemeinheit verloren geht . In jedem Schritt partitionieren wir nach jedem der Bits. Eine dieser Partitionen setzt und in denselben Teil, es sei denn, sie haben entgegengesetzte Polaritäten. Wir können dies explizit nur mit testen . Dies ergibt einen deterministischen Algorithmus, der Orakelaufrufe für die Entscheidungsversion verwendet.n=2k k x y O(nd) O(log2n)
quelle