Äquivalenzen:
Das Problem der nicht orthogonalen Vektoren (wie oben definiert) für eine Menge SS von nn Booleschen Vektoren mit jeweils der Länge dd und einer positiven ganzen Zahl kk ist wie folgt äquivalent:
Die Suche nach einem 22 durch kk Submatrix von 1 ist in einem gegebenen nn von dd Boolesche Matrix.
Finden eines vollständigen K 2 , k-K2,k Untergraphen in einem gegebenen zweigeteilten Graphen, wobei der erste Scheitelpunktsatz die Größe nn und der zweite Scheitelpunktsatz die Größe d hatd .
Naiver Algorithmus:
Der naive Ansatz für das Problem der nicht orthogonalen Vektoren läuft in O ( d ≤ n 2 ),O(d⋅n2) da O ( d ≤ n 2 )O(d⋅n2) Zeit benötigt, um das Punktprodukt jedes Vektorpaars naiv zu berechnen.
Antwort auf die Fragen (2) & (3):
Ja, es gibt mehrere Algorithmen, die in verschiedenen Fällen effizienter sind.
Erste Ansatz:
Wir können das Problem der nicht orthogonalen Vektoren in O ( d ⋅ n + k ⋅ n 2 )O(d⋅n+k⋅n2) lösen .
Anmerkung: Da das Punktprodukt zweier boolescher Vektoren der Länge dd durch dd begrenzt werden muss , ist das Problem nur dann sinnvoll, wenn k ≤ d istk≤d .
Beweis. Lass einen Satz SS von nn Booleschen Vektoren mit jeweils der Länge dd und einer positiven ganzen Zahl kk gegeben. Betrachtenein Aufzählungs { s i } i ∈ [ n ]{si}i∈[n] der Elemente von SS .
Erstellen eine hashmap mm von Paaren ( a , b ) ∈ [ n ] × [ n ](a,b)∈[n]×[n] zu NN . Zu Beginn ordnet mm jede Eingabe dem Wert 0 zu.
Für jedes i ∈ [ d ] macheni∈[d] wir Folgendes. Zählen Sie durch Paare von Vektoren s asa , s b auf,sb so dass a < ba<b , das i-i te Bit von s asa 1 und das i-i te Bit von s b 1sb ist. Für jedes solche s asa und s b,sb wenn m ( a , b ) = k - 1m(a,b)=k−1 , dann s asa und s bsbsind nicht orthogonal, dh s a ⋅ s b ≥ ksa⋅sb≥k . Andernfalls erhöhen Sie m ( a , b )m(a,b) und fahren fort.
Wenn wir die Aufzählung beenden, ist kein Vektorpaar nicht orthogonal.
Es dauert O ( n ⋅ d )O(n⋅d) Zeit, um jedes Bit jedes Vektors zu durchsuchen. Dann dauert es zusätzliche Zeit, um Vektorpaare aufzulisten. Weil es höchstens gibt ( n2 )(n2) Paare von Vektoren und jedes Paar können höchstensk-1k−1Mal auftreten, bevor gezeigt wurde, dass sie nicht orthogonal sind. Die Aufzählung von Paaren dauert höchstensO(k⋅n2)O(k⋅n2). Daher ist die GesamtlaufzeitO(d≤n+k≤n2)O(d⋅n+k⋅n2).
Anmerkung: Wenn k = 2 istk=2 , können wir diesen Ansatz für die O ( n ⋅ d ) -ZeitO(n⋅d) verbessern . Dies liegt daran , dass wir bei k = 2k=2 das Finden eines Paares nicht orthogonaler Vektoren unter nn Booleschen Vektoren der Länge dd auf das Finden eines Paares nicht orthogonaler Vektoren unter dd Booleschen Vektoren der Länge nn reduzieren können .
Zweiter Ansatz:
Wir können das Problem der nicht orthogonalen Vektoren in O ( k ⋅ ( dk ) ⋅n)O(k⋅(dk)⋅n)Zeit.
Beweis. Es sei eine Menge SS von nn Booleschen Vektoren mit jeweils der Länge dd und einer positiven ganzen Zahl kk gegeben.
Zählen Sie durch die Mengen P ⊆ [ d ] auf,P⊆[d] so dass PP die Größe k hatk . Überprüfen Sie für jeden Vektor v ∈ Sv∈S , ob vv alle Einsen an den Positionen in P hatP . Wenn es zwei Vektoren gibt, die alle Einsen an den Positionen in P habenP , haben wir zwei nicht orthogonale Vektoren gefunden.
Insgesamt gibt es ( dk )(dk) Wahlmöglichkeiten fürPP. Und für jede Auswahl scannen wirk⋅nk⋅nBits von den Vektoren. Insgesamt ist die Laufzeit alsoO(k⋅ ( dk ) ⋅n)O(k⋅(dk)⋅n).
Dritter Ansatz:
Wenn d ≤ n istd≤n , können wir das Problem der nicht orthongalen Vektoren in der Zeit O ( d ω - 2 ⋅ n 2 )O(dω−2⋅n2) lösen, wobei ωω der Exponent für die Multiplikation der ganzzahligen Matrix ist. Wenn d > n istd>n , können wir das Problem der nicht orthongalen Vektoren in der Zeit O ( d ⋅ n ω - 1 )O(d⋅nω−1) lösen .
Hinweis: Wie von @Rasmus Pagh hervorgehoben, können wir diesen Algorithmus auf die Zeit O ( n 2 + o ( 1 ) )O(n2+o(1)) verbessern, wenn d ≤ n 0,3 istd≤n0.3 . Weitere Informationen finden Sie hier: https://arxiv.org/abs/1204.1111
Beweis. Es sei eine Menge SS von nn Booleschen Vektoren mit jeweils der Länge dd und einer positiven ganzen Zahl kk gegeben.
Betrachten wir Matrizen AA und BB . Die erste Matrix AA hat die Dimensionen nn mal d,d wobei jede Zeile von AA ein Vektor von S istS . Die zweite Matrix BB hat die Dimensionen dd mal n,n wobei jede Spalte von BB ein Vektor von S istS .
Wir können das Punktprodukt jedes Vektorpaars in SS berechnen, indem wir A ⋅ B unterA⋅B Verwendung von Algorithmen zur schnellen Multiplikation der ganzzahligen Matrix berechnen.
Wenn d ≤ n istd≤n , besteht ein Ansatz darin, die rechteckige Matrixmultiplikation in ( n) umzuwandelnd )2(nd)2Multiplikationen des QuadratsddmitddMatrizen. Durch Verwendung der schnellen Quadratmatrixmultiplikation können wir alle Multiplikationen inO((n)berechnend )2⋅dω)=O(dω-2⋅n2)O((nd)2⋅dω)=O(dω−2⋅n2)Zeit.
Wenn d > n istd>n , besteht ein Ansatz darin, die rechteckige Matrixmultiplikation in d umzuwandelnndn Multiplikationen des QuadratsnnmitnnMatrizen. Durch Verwendung der schnellen Quadratmatrixmultiplikation können wir alle Multiplikationen inO((dn )⋅nω)=O(d⋅nω-1)O((dn)⋅nω)=O(d⋅nω−1)Zeit.