大数据算法: 亚线性算法概述

–中国大学生MOOC 王宏志老师大数据算法 听课笔记–

什么是亚线性算法?

亚线性算法与线性算法相比,顾名思义区别就在“亚”字上。表示时间/空间复杂度低于线性算法的一种算法的统称。

具体定义:时间/空间/IO/通讯/能量等消耗o(输入规模)。
【注】:消耗为o(输入规模)而非O(输入规模)。

亚线性

水库抽样算法

水库抽样是一种经典的亚线性空间算法。

问题背景:
有时候我们需要在海量数据中进行均匀的抽样,但是由于海量数据无法进行存储,所以我们只能让它从我们面前流过一次。

问题描述:
输入:一组数据,其大小未知
输出:这组数据的k个均匀抽样
要求:

  1. 仅扫描数据一次
  2. 空间复杂性为O(k) 和抽样大小有关,和整个数据无关
  3. 扫描到数据的前n个数字时(n>k),保存当前已扫描数据的k个均匀抽样

算法步骤:

  1. 申请一个长度为k的数组保存抽样。
  2. 保存首先接收到的k个元素
  3. 当接收到第i个新元素t时,以k/i的概率随机替换A中的元素(即生成[1,i]间随机数j,若j<=k,则以t替换A[j])

算法原理:
当接收到第i个新元素t时,以k/i的概率保存在水库中,所以在接收第i+1个数时,第i个数还能保存在水库当中的概率是1-1/(i+1),因为在接收到第i+1个数时要以k/(i+1)的概率随机替换,而第i个数被选中的概率是1/k,它们相乘即为1/(i+1)。1/(i+1)为第i个元素被换出水库的概率,所以1-1/(i+1)就是在接收第i+1个元素时第i个元素在数组中的概率。同理,在接收第i+2个元素时,第i个元素让然保留在水库中的概率为1-1/(i+2)。以此类推,当接收第n个元素时,第i个元素保存在水库中的概率为1-1/n。只有这些事件都放生了,最终第i个元素才能保留在水库当中。因此第i个元素最终被保留在水库抽样当中的概率,就是这些事件的概率的乘积,即
在这里插入图片描述
算法伪代码:

Init : a reservoir with the size: k
 
for i= k+1 to N
 
    M=random(1, i);
 
    if( M < k)
 
     SWAP the Mth value and ith value
 
end for 

平面图的直径近似算法

平面图的直径近似算法是一种经典的亚线性时间算法。
【注释】:在图论中,平面图是可以画在平面上并且使得不同的边可以互不交叠的图。
【注释】:近似算法是计算机科学中算法研究的一个重要方向。所谓“近似”,就是指结果不一定是最优的,但是也在可以承受的范围内,而且可以比精确求解消耗更少的资源。

问题背景:
当输入的距离矩阵过大时,我们无法通过正常的算法对其进行求解。所以我们希望通过近似算法对其求得一个尽量相似的解。

问题描述:
输入:m个顶点的平面图,任意两点之间的距离存储在矩阵D中,即点i到点j的距离为Dij

  1. 输入大小是n=m的平方
  2. 最大的Dij是图的直径
  3. 点之间的距离对称且满足三角不等式

输出:该图的直径和距离最大的Dij
要求:运行时间为o(n)

算法步骤:

  1. 任意选择k<=m
  2. 选择使得Dkl最大的l
  3. 输出Dkl和(k, l)

算法原理:
根据三角不等式,我们可以得到Dij <= Dik + Dkj,又因为Dkl是我们所求最大值,所以有Dik <= Dkl,Dkj <= Dkl.可以得到Dij <= Dkl+Dkl <= 2Dkl。得到近似比2。
在这里插入图片描述

你可能感兴趣的:(大数据算法: 亚线性算法概述)