同等:
セットのための非直交ベクトルの問題(上記で定義した)のブールは、長さの各ベクトル、正の整数以下と等価です。Sndk
発見によって与えで部分行列の1のによってブール行列。2knd
最初の頂点セットのサイズがで、2番目の頂点セットのサイズがである、与えられた二部グラフで完全なサブグラフを見つけます。K2,knd
単純なアルゴリズム:
非直交ベクトルの問題を実行するための単純なアプローチの時間はかかるため、単純ベクトルのすべての対の内積を計算する時間。O(d⋅n2)O(d⋅n2)
質問(2)および(3)への回答:
はい、さまざまなケースでより効率的なアルゴリズムがいくつかあります。
最初のアプローチ:
時間で非直交ベクトル問題を解くことができます。O(d⋅n+k⋅n2)
注: 2つの長さブールベクトルの内積はで囲まれる必要があるため、この問題は場合にのみ意味があります。ddk≤d
証明。それぞれ長さと正の整数のブールベクトルの セットが与えられたとします。の要素の列挙を考えます。Sndk{si}i∈[n]S
ペアからへのハッシュマップを作成します。最初に、は各入力を値0にマップします。m(a,b)∈[n]×[n]Nm
各について、次のことを行います。、番目のビットが1、番目のビットが1になるように、ベクトルとペアを列挙します場合、そのようなとそれぞれについての場合、とは非直交です。つまり、です。それ以外の場合は、をインクリメントして続行します。i∈[d]sasba<bisaisbsasbm(a,b)=k−1sasbsa⋅sb≥km(a,b)
列挙を終えると、直交しないベクトルのペアはありません。
すべてのベクトルのすべてのビットをスキャンするには、時間かかります。次に、ベクトルのペアを列挙するために追加の時間がかかります。ベクトルのペアは最大であり、各ペアは非直交であることが示される前に最大で回表示されるため、ペアを列挙すると最大で時間。したがって、総実行時間はです。O(n⋅d)(n2)k−1O(k⋅n2)O(d⋅n+k⋅n2)
注:場合、このアプローチを時間に改善できます。これは、ときに、我々は間で非直交ベクトルのペア発見減らすことができの長さのブールベクトルうち、非直交ベクトルのペア発見に長さのブールベクトル。k=2O(n⋅d)k=2nddn
2番目のアプローチ:
時間で非直交ベクトル問題を解くことができ。O(k⋅(dk)⋅n)
証明。それぞれ長さと正の整数のブールベクトルのセットが与えられたとします。Sndk
サイズがように、セット列挙します。すべてのベクトル、がの位置にすべて1を持っているかどうかを確認します。の位置にすべて1がある2つのベクトルが存在する場合、2つの非直交ベクトルが見つかります。P⊆[d]Pkv∈SvPP
合計すると、には可能な選択肢があります。そして、選択ごとに、ベクトルからビットをスキャンします。したがって、全体として、ランタイムはです。(dk)Pk⋅nO(k⋅(dk)⋅n)
3番目のアプローチ:
場合、非直交ベクトル問題を時間で解くことができます。ここで、は整数行列乗算の指数です。場合、非直交ベクトル問題を時間で解くことができます。d≤nO(dω−2⋅n2)ωd>nO(d⋅nω−1)
注: @Rasmus Paghが指摘したように、場合、このアルゴリズムを時間に改善できます。詳細については、こちらをご覧ください:https : //arxiv.org/abs/1204.1111O(n2+o(1))d≤n0.3
証明。それぞれ長さと正の整数のブールベクトルのセットが与えられたとします。Sndk
行列と考えます。第1のマトリックス寸法を有するによっての各列からベクトルである。第二行列寸法が有するによっての各列からベクトルである。ABAndASBdnBS
高速整数行列乗算のアルゴリズムを使用してを計算により、すべてのベクトルのペアのドット積を計算できます。SA⋅B
場合、1つのアプローチは、四角形行列乗算を変換することである正方形の乗算によってマトリックス。高速正方行列の乗算を使用することにより、時間。d≤n(nd)2ddO((nd)2⋅dω)=O(dω−2⋅n2)
とき、1つのアプローチは、四角形行列乗算を変換することである正方形の乗算によって行列。高速正方行列乗算を使用すると、すべての乗算を計算できます時間。d>ndnnnO((dn)⋅nω)=O(d⋅nω−1)