Equivalencias:
El problema de los vectores no ortogonales (como se definió anteriormente) para un conjunto de vectores booleanos de longitud y un entero positivo es equivalente a lo siguiente:S Sn nd dkk
Encontrar una submatriz por de 1 en una matriz booleana por dada.2 2k kn ndd
Encontrar un subgrafo completo en un gráfico bipartito dado donde el primer conjunto de vértices tiene tamaño y el segundo conjunto de vértices tiene tamaño .K 2 , kK2,k nndd
Algoritmo ingenuo:
El enfoque ingenuo para el problema de los vectores no ortogonales se ejecuta en tiempo porque lleva tiempo calcular ingenuamente el producto escalar de cada par de vectores.O ( d ⋅ n 2 ) O(d⋅n2)O ( d ⋅ n 2 )O(d⋅n2)
Respuesta a las preguntas (2) y (3):
Sí, hay varios algoritmos que son más eficientes en diferentes casos.
Primer enfoque:
Podemos resolver el problema de los vectores no ortogonales en el tiempo .O ( d ⋅ n + k ⋅ n 2 )O(d⋅n+k⋅n2)
Nota: Dado que el producto punto de dos vectores booleanos de longitud debe estar limitado por , el problema solo tiene sentido cuando .d dd dk ≤ dk≤d
Prueba. Deje que se dé un conjunto de vectores booleanos de longitud y un entero positivo . Considere una enumeración de los elementos de .S Sn nd dk k{ s i } i ∈ [ n ]{si}i∈[n] SS
Cree un hashmap partir de pares a . Inicialmente, asigna cada entrada al valor 0.m m( a , b ) ∈ [ n ] × [ n ] (a,b)∈[n]×[n]NN mm
Para cada , hacemos lo siguiente. través de pares de vectores , modo que , el bit ésimo de sea 1, y el bit ésimo de sea 1. Para cada uno de estos y si , entonces y no son ortogonales, es decir, . De lo contrario, incremente y continúe.i ∈ [ d ] i∈[d]s a sunas bssi a < b a < bi yos asuna i yos b ssis a sunas bssi m ( a , b ) = k - 1 m(a,b)=k−1s a sas b sbs a ⋅ s b ≥ k sa⋅sb≥km ( a , b )m(a,b)
Si terminamos la enumeración, entonces ningún par de vectores no son ortogonales.
Se necesita tiempo para explorar cada bit de cada vector. Luego, toma tiempo adicional para enumerar pares de vectores. Debido a que hay como máximo pares de vectores y cada par puede aparecer como máximo veces antes de que se demuestre que no son ortogonales, enumerar pares toma como máximo tiempo. Por lo tanto, el tiempo de ejecución total es .O ( n ⋅ d ) O(n⋅d)( n2 )(n2) k-1k−1O(k⋅n2)O(k⋅n2)O(d⋅n+k⋅n2)O(d⋅n+k⋅n2)
Nota: Cuando , podemos mejorar este enfoque del tiempo . Esto se debe a que cuando , podemos reducir la búsqueda de un par de vectores no ortogonales entre vectores booleanos de longitud a encontrar un par de vectores no ortogonales entre vectores booleanos de longitud .k = 2 k=2O ( n ⋅ d ) O(n⋅d)k = 2 k=2n nd dd dnn
Segundo enfoque:
Podemos resolver el problema de los vectores no ortogonales en el tiempo .O ( k ⋅ ( dk ) ⋅n)O(k⋅(dk)⋅n)
Prueba. Deje que se dé un conjunto de vectores booleanos de longitud y un entero positivo .S Sn nd dkk
Enumere a través de los conjuntos modo que tenga el tamaño . Por cada vector , comprobar si tiene todos los 1 de en las posiciones en . Si hay dos vectores que tienen todos los 1 en las posiciones en , entonces hemos encontrado dos vectores no ortogonales.P ⊆ [ d ] P⊆[d]P Pk kv ∈ S v∈Sv vP PPP
En total, hay posibles opciones para . Y, para cada elección, exploramos a través de bits de los vectores. Por lo tanto, en total, el tiempo de ejecución es .( dk )(dk) PPk⋅nk⋅nO(k⋅ ( dk ) ⋅n)O(k⋅(dk)⋅n)
Tercer enfoque:
Cuando , podemos resolver el problema de los vectores no ortongales en tiempo donde es el exponente para la multiplicación de matrices enteras. Cuando , podemos resolver el problema de los vectores no ortongales en el tiempo .d ≤ n d≤nO ( d ω - 2 ⋅ n 2 ) O(dω−2⋅n2)ω ωd > n d>nO ( d ⋅ n ω - 1 )O(d⋅nω−1)
Nota: Como lo señaló @Rasmus Pagh, podemos mejorar este algoritmo a cuando . Consulte aquí para obtener más información: https://arxiv.org/abs/1204.1111O ( n 2 + o ( 1 ) ) O(n2+o(1))d ≤ n 0.3d≤n0.3
Prueba. Deje que se dé un conjunto de vectores booleanos de longitud y un entero positivo .S Sn nd dkk
Considere matrices y . La primera matriz tiene dimensiones de por , donde cada fila de es un vector de . La segunda matriz tiene dimensiones por , donde cada columna de es un vector de .A AB BA An nd dA AS SB Bd dn nB BSS
Podemos calcular el producto escalar de cada par de vectores en calculando usando algoritmos para la multiplicación de matrices enteras rápidas.S SA ⋅ BA⋅B
Cuando , un enfoque es convertir la multiplicación de matriz rectangular en multiplicaciones del cuadrado por matrices . Al usar la multiplicación de matriz cuadrada rápida, podemos calcular todas las multiplicaciones en tiempo.d ≤ n d≤n( nd )2(nd)2ddO((nd )2⋅dω)=O(dω-2⋅n2)
Cuando , un enfoque es convertir la multiplicación de matriz rectangular en multiplicaciones del cuadrado por matrices. Al usar la multiplicación de matriz cuadrada rápida, podemos calcular todas las multiplicaciones en tiempo.d > n dn nnO((dn )⋅nω)=O(d⋅nω-1)