Counting Triangles in Large Graphs using Randomized Matrix Trace Estimation
概要
-
タイトルそのまんまの内容
-
トレースを愚直に求めるのは難しいので、ランダムベクトルで挟んでいっぱい計算して平均をとる
-
サンプル数は結構多いけど、実験的にはO(log^2|V|)個でよい
-
実験は微妙…
既存手法とか
-
簡単なアルゴリズム
-
行列積とかで頑張る…O(|E|^1.41)
-
近似する場合…サンプリング
-
Spectral counting
-
$$ \Delta(G) = \frac{1}{6}\mathrm{trace}(A^3) = \frac{1}{6}\sum_{i=1}^{n}\lambda_i^{3} $$
-
元のグラフの固有値求めればいいのでよさげ
-
いくつ固有値求めればいいかよく分からん、データ依存なので辛い
提案手法
-
M回以下を繰り返す
-
x: ランダムベクトル
-
y = Ax
-
T_i = y^TAy/6
-
Δ = ΣT_i/M
-
Aは疎なので(当然)ベクトルとの積はO(|E|)でできる
-
普通にやろうとするとA^3を計算しないといけなくて大変、挟み込んだことで速い
-
ただし、各T_iの分散がかなり大きい、Chernoff boundを使っても…
-
アルゴリズムN
-
アルゴリズムR
-
ベクトルの各要素をRademacher分布(±1が等確率)から抽出
-
ちょっと速いしちょっと良い?
-
アルゴリズムM
-
適当に決めるのはよくないから、一個だけ特別視してDCTするようなベクトル
-
一個だけっていうのをランダムに決める、ベクトルはn個しかない
-
いくつサンプルをとればいいってのは実験からO(log^2|V|)でおk、とかいってる
実験
-
大体真の値の10%以内には収まっている?
-
とおもいきや、全体の試行の60%程度しか10%以内に収まっていないのも…
-
ただし、固有値を頑張って求めて計算するよりはよほど良い
-
固有値を求める場合の8倍位速い、最大で
まとめ
-
普通っぽい
-
結構解析が長い
-
実験がう~ん
-
期待していた程の面白みは無かった
-
K_3=C_3だが、K_4=C_4なので4の時は悲しい(´・ω・`)
COSN triangle
2013-12-18 23:08:43 (Wed)
最終更新:2013年12月18日 23:08