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/ε)