大数据算法学习笔记(五):生成树权重

1、问题:无向简单图,求最小生成树的权重。

精确解:prime、kruskal


2、亚线性算法基本思想:用特定子图联通分量的数量估计MST的权重。

假设某个无向图中所有边的权重都是1或者2,求MST的权重。

则其MST的权重=N1+N2(N1:MST中权重至少为i的边的数量)

显然N1=n-1,n为顶点数。

而N2为权重为1的边构成的导出子图的联通分量个数-1,即把MST中边权为2的边去掉后,形成若干个联通分量,将每个联通分量视为1个点,再将去掉的边加入,则形成一个新的树,其边数即为联通分量个数-1.


接下来考虑一般情况:

设Gi:G中包含所有权重小于i的边的子图。

Ci:Gi中的联通分量个数

最小生成树权重大于i的边数为Ci  -1

那么W(G)=n-w+sigma(Ci)  (i=1~w-1)

n是顶点数、w是边的最大权值

于是,问题转为求连通分量个数。


3、连通分量个数的估计

方法:随机化

运行时间和n无关。


设C是连通分量个数。n(u)为结点u所在连通分量的结点个数。

对于连通分量A,其中所有顶点的n(u)的倒数之和为1。

因此所有顶点的n(u)的倒数之和为C

于是可以通过抽样顶点的n(u)来估计这个和。

如果u所在连通分量中的点很少,可以用BFS来求。

如果u所在联通分量中的点很多,即1/n(u)很小,说明对和的贡献很小。

那么就可以考虑在限定步数之内完成BFS,若完成不了,则舍弃,因为其对于结果贡献非常小。


误差:令n(u)'=min(n(u),2/ε)

当n<2/ε时,n(u)'=n(u);否则n(u)'=2/ε,0<1/(n(u)')-1/(n(u))<1/n(u)'=ε/2

由于C'=sigma(1/(n(u)')

则|C'-C|=sigama(1/(n(u)')-1/(n(u))<=n*ε/2


算法如下:

1、抽样个数:和1/ε^2同阶

2、随机选择点u,从u开始BFS,将顶点序列放到序列L中,当完成BFS或者L=2/ε时停止,将L的大小作为n(u)的估计值

3、N=N+n(u)'

4、返回C'=s/N*n ,平均值*n作为对整体的估计值。


运行时间:O(d/ε^3*log(1/ε)





你可能感兴趣的:(大数据算法)