定义:
线性时间、空间、IO、通讯、能量等消耗是o(输入规模)
亚线性时间算法:亚线性时间近似算法、性质检测算法。
亚线性空间算法:数据流算法
亚线性时间问题:求图中节点的平均度。能否在不访问所有顶点的情况下完成此任务。
亚线性空间问题:源源不断的数据流,只扫描一次,如何求中位数。
水库抽样——亚线性空间算法
问题概述:一组数据,大小未知,要求扫描数据一次,空间复杂度O(k),扫描到数据的前n个数字(n>k)时,保存当前已扫描数据的k个均匀抽样。
算法:1、申请一个长度为k的数组保存抽样。
2、保存首先接收到的k个元素
3、当接收到第i个新元素t时,以k/i的概率随机替换A中的元素(即生成[1,i]间随机数j,若j<=k,则以t替换A[j])
性质1:该采样是均匀的。对于第i个数,k/i * (1-1/(i+1)) * (1-1/(i+2)) *……*(1-1/n)=k/n
性质2:空间复杂性o(k)。
平面图的直径——一个亚线性时间计算算法
输入:m个顶点的平面图,任意连点之间的距离存储在矩阵中,点之间的距离对称,并且满足三角不等式Dij<=Dik+Dkj,求最大的Dij。输入大小为n=m^2。(m*m矩阵)
要求运行时间为o(n)。
近似算法:
1、任意选择k<=m
2、选择使得Dki最大的l
3、输出Dkl和(k,l)
近似比:
Dij<=Dik+Dkj<=Dkl+Dkl<=2Dkl
近似比为2
运行时间:O(m)=O(根号n)=o(n)
关于近似算法
定义:近似算法主要用来解决优化问题,能够给出一个优化问题的近似优化解的算法。
近似算法解的近似度:问题的每一个可能的解都有一个代价,优化解可能具有最大或最小代价。
分析近似解代价与优化解代价的差距:ratio bound、相对误差
ratio bound: max{c/c*,c*/c}<=p(n)
相对误差:|c-c*|/c*
全0数组判定——时间亚线性判定算法
输入:包含n个元素的0,1数组A
输出:A中的元素是否全是0
要求:运行时间为o(n)
判定问题的近似:
ε-远离:对于输入x,如果从x到L中任意字符串的汉明距离至少为ε|x|,则x是ε-远离L的。
对于该问题,是否A=00……0或者其包含1的个数大于εn?
算法描述:
1、在A中随机独立抽取s=2/ε个位置上的元素
2、检查抽样,若不包含1,则输出“是”,若包含1,则输出“否”
判定精确性分析:
如果A是全0数组,始终输出“是”
如果A是ε-远离的,Pr[eeror]=Pr[抽样中没有1]<=(1-ε)^s 约为e^2<1/3
运行时间O(s)
证据引理:如果一次测试以大于等于p的概率获得一个证据,那么s=2/p轮测试得到证据的概率大于等于2/3.