Rn⟨⋅,⋅⟩mv1,v2,…,vmx∈Rnмин я ⟨ х , v я ⟩ mini⟨x,vi⟩О ( п т )O(nm) п = 2 n=2O ( войти 2 м )O(log2m)
Единственное, что я могу придумать, это следующее. Непосредственным следствием леммы Джонсона-Линденштрауса является то, что для каждого и распределения в существует линейное отображение (который можно вычислить за времени) так, чтобы . Итак, за время O ((n + m) \ log m) мы можем вычислитьε > 0 ε>0D DR nRn f : R n → R O ( log m )f:Rn→RO(logm)O(nlogm)P r x ∼ D [ ∀ я⟨ Х , v я ⟩ - ε ( | | х | | + | | v я ‖ ) 2 & le ; ⟨ F ( х ) , F ( v я ) ⟩ & le ; ⟨ х , v я ⟩ + ε ( | | х | | + | | V я | | ) 2 ] ≥ 1 - ε O ( ( nPrx∼D[∀i⟨x,vi⟩−ε(∥x∥+∥vi∥)2≤⟨f(x),f(vi)⟩≤⟨x,vi⟩+ε(∥x∥+∥vi∥)2]≥1−ε+ м ) лог м )O((n+m)logm)что-то, что в некотором смысле близко к mini⟨x,vi⟩mini⟨x,vi⟩ для большинства xx (по крайней мере, если нормы ‖x‖∥x∥ и ‖vi‖∥vi∥ малы).
UPD Упомянутая выше граница может быть несколько увеличена до времени запроса O(n+m)O(n+m) если мы используем локальное хеширование. Точнее, мы выбираем k:=O(1ε2)k:=O(1ε2) независимых гауссовских векторов r1,r2,…,rkr1,r2,…,rk . Затем мы отображаем RnRn в {0,1}k{0,1}k следующим образом: v↦(⟨r1,v⟩≥0,⟨r2,v⟩≥0,…,⟨rk,v⟩≥0)v↦(⟨r1,v⟩≥0,⟨r2,v⟩≥0,…,⟨rk,v⟩≥0) . Затем мы можем оценить угол между двумя векторами в пределах аддитивной ошибки εε , вычислив ℓ1ℓ1 расстояние на изображении этого отображения. Таким образом, мы можем оценить точечные произведения в пределах аддитивной ошибкиε‖x‖‖vi‖ε∥x∥∥vi∥за O(1ε2)O(1ε2) время.
Ответы:
Рассмотрим специальный случай, когда вы просто хотите определить, является ли ваш вектор запроса ортогональным к какому-либо вектору в вашей предварительно обработанной коллекции. (То есть вы хотите определить, если , где обсуждаемые векторы имеют неотрицательные коэффициенты.) Этот случай уже очень интересен.mini⟨x,vi⟩=0mini⟨x,vi⟩=0
Предположим, что вы можете ответить на запросы за времени для некоторого , с предварительной обработкой ( степени многочлена не должны зависеть от или или ).nO(1)m1−δnO(1)m1−δ δ>0δ>0 mO(1)nO(1)mO(1)nO(1) mm nn δδ
В статье «Новый алгоритм оптимального удовлетворения 2-ограничений и его последствия» я заметил, что такая структура данных фактически позволит вам решить CNF-SAT за времени для некоторого , где - количество переменных. Это опровергнет «гипотезу сильного экспоненциального времени», согласно которой для k-SAT требуется, по существу, времени для неограниченного .2αv2αv α<1α<1 vv 2n2n kk
Чтобы понять почему, предположим, что время предварительной обработки ограничено . Рассмотрим формулу CNF с переменными и предложениями. Разобьем множество переменных на две части и размером и соответственно. Перечислите все возможные назначения для переменных в частях (получая и соответственно). Свяжите каждое из этих частичных присвоений с битным вектором где если(nm)c(nm)c FF vv nn P1P1 P2P2 v(1−1/(2c))v(1−1/(2c)) v/(2c)v/(2c) 2v(1−1/(2c))2v(1−1/(2c)) 2v/(2c)2v/(2c) AiAi nn wiwi wi[j]=1wi[j]=1 jj абзац не удовлетворен . Таким образом, у нас есть два списка экспоненциально многих битовых векторов.FF AiAi
Обратите внимание, что выполнимо, если существует вектор из назначения на и вектор из назначения на такой что .FF w1P1w2P2⟨w1,w2⟩=0
Теперь давай m=2v/(2c) и предварительно обработает предполагаемую структуру данных со всеми векторами из части . По предположению, это занимает времени. Запустите алгоритм запроса для всех векторов из присвоений детали . По предположению, это займет . Пусть .P2n2v/2P12v(1−1/(2c))⋅nO(1)m1−δ=nO(1)2v−δv/(2c)α=1−δ/(2c)
Возможно, можно получить эффективную предварительную обработку и с помощью существующих методов. Самые известные алгоритмы CNF-SAT не исключают этого. (Они получают что-то вроде .) Но вычислить немного сильнее - в этой настройке это будет похоже на решение MAX CNF-SAT.nO(1)m1−1/(loglogm)2n−n/lognmini⟨x,vi⟩
источник
Вот одна идея для точного ответа, на которую, я подозреваю, намекал Чао Сюй. Во-первых, заметим, что мы могли бы также нормализовать x , как указывает Чао. Теперь рассмотрим гиперплоскость h, перпендикулярную направлению x . Цель состоит в том, чтобы найти точку, ближайшую к этой гиперплоскости. По двойственности это соответствует запросу съемки луча в расположении гиперплоскостей, чтобы найти ближайшую плоскость «выше» точки запроса. Так как это может быть предварительно обработано, основной сложностью является местоположение точки, поэтому ваша задача теперь сводится к сложности определения местоположения точки в расположении гиперплоскостей. Используя черенки, это можно сделать за O ( log n ) за n d Космос.
источник