大数据 | 大数据基础--算法之亚线性时间算法:计算图的平均度算法二

    科技2025-02-10  16

    网页版:http://burningcloud.cn/article/120/index.html 亲爱的读者朋友大家晚上好,上次我们分析了计算平均度的第一个估计算法,简而言之就是先分桶,然后估计桶的大小。然而该算法在特定的情境下表现非常不好。这次,我们从一个反例开始。

    反例

    举反例之前先来简单回顾一下上个算法的内容。

    V V V取出样本集合 S S S S i ← S ∩ B i S_i \gets S \cap B_i SiSBi ρ i ← S i S \rho_i \gets \frac{S_i}{S} ρiSSi返回 d ˉ ^ = ∑ i = 0 t − 1 ρ i ( 1 + β ) i \hat{\bar{d}} = \sum_{i=0}^{t-1}\rho_i(1+\beta)^{i} dˉ^=i=0t1ρi(1+β)i

    这样的算法,对于较小的 ∣ B i ∣ |B_i| Bi的估计会很差,比如一个完全二分图 K 3 , n − 3 K_{3,n-3} K3,n3,有 3 3 3个节点度为 n − 3 n-3 n3 n − 3 n-3 n3个节点度为 3 3 3,按照上面的算法,应当存在 a a a b b b,使得 ( 1 + β ) a − 1 < 3 ≤ ( 1 + β ) a & ( 1 + β ) b − 1 < n − 3 ≤ ( 1 + β ) b (1+\beta)^{a-1} < 3 \leq (1+\beta)^{a}\And (1+\beta)^{b-1} < n-3 \leq (1+\beta)^{b} (1+β)a1<3(1+β)a&(1+β)b1<n3(1+β)b。我们记这两个桶分别为 B a , B b B_a,B_b Ba,Bb,于是 ∣ B a ∣ = n − 3 , ∣ B b ∣ = 3 |B_a| = n-3,|B_b| = 3 Ba=n3,Bb=3。当 n n n特别大而抽样的数量特别小的时候,很有可能没有抽样到 B b B_b Bb中的元素,而这个桶中的元素的度都很大,所以对结果的影响也会很大,最坏的情况下,这个桶中的元素一个也没有抽到,结果大约为 3 3 3,而真实情况下平均度大约为 6 6 6,这样一来误差就太大了。道理就是这么个道理,而且这里举出的例子还不是最坏的情况。

    接下来提出的改进算法并不能完全解决这个问题,但是可以将原算法改造成一个 ( ϵ , δ ) (\epsilon,\delta) (ϵ,δ)算法,并且将近似比控制在 2 2 2

    改进算法

    对于较小的桶的 ρ i \rho_i ρi的,并且假定一个 d ˉ \bar{d} dˉ的一个下届 α \alpha α

    V V V中抽取样本 S S S S i ← S ∩ B i S_i \gets S \cap B_i SiSBi f o r   i ∈ { 0 , … , t − 1 }   d o \boldsymbol{for}\ i \in \{0,\dots,t-1\}\ \boldsymbol{do} for i{0,,t1} do i f   ∣ S i ∣ ≥ θ ρ   t h e n \boldsymbol{if}\ |S_i| \geq \theta_\rho\ \boldsymbol{then} if Siθρ then ρ i ← ∣ S i ∣ ∣ S ∣ \rho_i \gets \frac{|S_i|}{|S|} ρiSSi e l s e \boldsymbol{else} else ρ i ← 0 \rho_i\gets 0 ρi0 r e t u r n   d ˉ ^ = ∑ i = 0 t − 1 ρ i ( 1 + β ) i \boldsymbol{return}\ \hat{\bar{d}} = \sum_{i=0}^{t-1}\rho_i(1+\beta)^{i} return dˉ^=i=0t1ρi(1+β)i

    我们将算法的结果调整为以 2 / 3 2/3 2/3的概率有 ( 0.5 − ϵ ) d ˉ < d ˉ ^ < ( 1 + ϵ ) d ˉ (0.5-\epsilon)\bar{d} < \hat{\bar{d}} < (1 + \epsilon)\bar{d} (0.5ϵ)dˉ<dˉ^<(1+ϵ)dˉ

    这里给出一组参数,使得能够满足上述结果:

    β = ϵ 4 \beta = \frac{\epsilon}{4} β=4ϵ ∣ S ∣ = Θ ( n α ⋅ p o l y ( l o g   n , 1 / ϵ ) ) |S| = \Theta(\sqrt{\frac{n}{\alpha}}\cdot poly(log\ n,1/\epsilon)) S=Θ(αn poly(log n,1/ϵ)) t = ⌈ l o g ( 1 + β ) n ⌉ + 1 t = \left \lceil log_{(1+\beta)}n \right \rceil + 1 t=log(1+β)n+1 θ ρ = 1 t 3 8 ⋅ ϵ α n ∣ S ∣ \theta_{\rho} = \frac{1}{t}\sqrt{\frac{3}{8}\cdot\frac{\epsilon\alpha}{n}}|S| θρ=t183nϵα S

    评价

    这个算法并不能彻底解决上述问题,但是基于此算法的改进却能够做到这一点,这些改进的方法将会在接下里的文章中介绍,敬请期待。

    Processed: 0.022, SQL: 8