Man betrachte das mit dem Standardpunktprodukt und Vektoren ausgestattet ist: . Wir wollen eine Datenstruktur aufzubauen , die Abfragen aus folgendem Format ermöglicht: Da Ausgang . Ist es möglich, die triviale -Abfragezeit zu überschreiten? Wenn zum Beispiel , ist es unmittelbar, zu erhalten .
Das Einzige, was ich mir einfallen lassen kann, ist das Folgende. Es ist eine unmittelbare Konsequenz von Johnson-Lindenstrauss-Lemma, dass für jedes und eine Verteilung auf eine lineare Abbildung (die in ausgewertet werden kann ), so dass . Also können wir in der Zeit O ((n + m) \ log m) berechnenetwas , das in gewisser Weise nahe an für die meisten (zumindest wenn die Normen und klein sind).
UPD Die oben genannte Grenze kann zur Abfragezeit O (n + m) etwas geschärft werden, wenn wir ortsabhängiges Hashing verwenden. Genauer gesagt wählen wir unabhängige Gaußsche Vektoren . Dann bilden wir zu , wie folgt: . Dann können wir den Winkel zwischen zwei Vektoren innerhalb eines additiven Fehlers \ varepsilon abschätzen, indem wir den im Bild dieser Abbildung berechnen . Somit können wir Punktprodukte innerhalb eines additiven Fehlers schätzenin Zeit.
Antworten:
Betrachten Sie den Sonderfall, in dem Sie nur feststellen möchten, ob Ihr Abfragevektor zu einem Vektor in Ihrer vorverarbeiteten Sammlung orthogonal ist. (Das heißt, Sie möchten bestimmen, ob , wobei die diskutierten Vektoren nicht negative Koeffizienten haben.) Dieser Fall ist bereits sehr interessant.mini⟨x,vi⟩=0
Angenommen, Sie können Abfragen in Zeit für einige beantworten , wobei Vorverarbeitung (die Polynomgrade sollten nicht von oder oder abhängen ).nO(1)m1−δ δ>0 mO(1)nO(1) m n δ
In dem Papier „Ein neuer Algorithmus für die optimale 2-Constraint und ihre Auswirkungen“, bemerkte ich , dass eine solche Datenstruktur würden Sie tatsächlich erlauben in CNF-SAT zu lösen Zeit für einige , Dabei ist die Anzahl der Variablen. Dies würde die "Strong Exponential Time Hypothese" widerlegen, dass k-SAT im Wesentlichen Zeit für unbegrenztes .2αv α<1 v 2n k
Angenommen, die Vorverarbeitungszeit ist durch begrenzt, um zu sehen, warum . Betrachten Sie eine CNF-Formel mit Variablen und Klauseln. Wir teilen den Variablensatz in zwei Teile und der Größe bzw. . Listen Sie alle möglichen Zuordnungen zu den Variablen in den Teilen auf (erhalten Sie jeweils und Zuordnungen). Ordnen jede dieser Teilzuweisungen einem Bit-Vektor wobei wenn(nm)c F v n P1 P2 v(1−1/(2c)) v/(2c) 2v(1−1/(2c)) 2v/(2c) Ai n wi wi[j]=1 j Die Klausel von wird von nicht erfüllt . Wir haben also zwei Listen mit exponentiell vielen Bitvektoren.F Ai
Beachten Sie, dass erfüllt ist, wenn es einen Vektor aus einer Zuweisung auf und einen Vektor aus einer Zuweisung auf so dass .F w1 P1 w2 P2 ⟨w1,w2⟩=0
Nun sei und verarbeite die angenommene Datenstruktur mit allen Vektoren aus Teil . Dies dauert nach Annahme. Führen Sie den Abfragealgorithmus für alle Vektoren aus Zuweisungen in Teil . Unter der Annahme, dass dies . Sei .m=2v/(2c) P2 n2v/2 P1 2v(1−1/(2c))⋅nO(1)m1−δ=nO(1)2v−δv/(2c) α=1−δ/(2c)
Vielleicht ist es möglich , eine effiziente Vorverarbeitung und erhalten Abfragezeit mit bestehenden Techniken. Die bekanntesten CNF-SAT-Algorithmen schließen dies nicht aus. (Sie erhalten so etwas wie .) Aber um zu berechnen etwas stärker - in diesem Setup wäre es wie das Lösen von MAX CNF-SAT.nO(1)m1−1/(loglogm) 2n−n/logn mini⟨x,vi⟩
quelle
Hier ist eine Idee für die genaue Antwort, auf die Chao Xu anspielen könnte. Beachten Sie zunächst, dass wir genauso gut normalisieren können , wie Chao betont. Betrachten Sie nun die Hyperebene senkrecht zur Richtung . Ziel ist es, den Punkt zu finden, der dieser Hyperebene am nächsten liegt. Aus Gründen der Dualität entspricht dies einer Strahlenschießabfrage in einer Anordnung von Hyperebenen, um die nächstgelegene Ebene "über" dem Abfragepunkt zu finden. Da dies vorverarbeitet werden kann, ist die Hauptkomplexität die Punktlokalisierung. Daher wurde Ihr Problem auf die Komplexität der Punktlokalisierung in einer Anordnung von Hyperebenen reduziert. Mit Stecklingen kann dies in Zeit im Raum erfolgen.x h x O(logn) nd
quelle