《大数据算法》一2.1 时间亚线性算法概述

2.1 时间亚线性算法概述

本节我们通过两个简单的例子来介绍时间亚线性算法的基本概念。

2.1.1 平面图直径问题的亚线性算法

1.问题的定义
平面图直径问题
输入:有m个顶点的平面图(平面图可以放置在平面上而边不交叉),任意两点之间的距离存储在矩阵D中,即点i到点j的距离为Dij。输入满足如下条件:

1) 输入大小是D的大小n=m2。
2) 最大的Dij是图的直径。
3) 点之间的距离对称且满足三角不等式。距离对称意味着i到j的距离等于j到i的距离;满足三角不等式意味着对于i、j、k来说i到j的距离加上j到k的距离要大于i到k的距离。

输出:该图的直径和距离最大的Dij。
矩阵D可以通过基于动态规划的Floyd算法得到。本小节关心的不是计算D的算法,而是以这个D为输入,计算图的直径和距离最大的Dij。
计算这个问题一个直观的想法是把D遍历一次,从中选择最大的Dij。但是问题没那么简单,如果要求运行时间为o(n),也就是运行时间比输入规模n阶低,应如何处理?
是否能做到呢?想精确完成这个问题是不可能的,因为如果有一个“坏人”知道处理过程,由于时间复杂度为o(n)的算法不可能访问所有的数据,这个“坏人”就让输入中没有访问到的数据中包含最大的。这样处理就会令亚线性方法出错。因而,处理这个问题的时间复杂度应该是O(n)。
本小节将讨论一个亚线性的近似算法,这个算法的计算结果可能不是最好的,但是可以计算出一个和原来的结果相差不多的结果。近似算法的动机就是无法在要求的时间内得到精确解,就退而求其次,求出近似的解。
补充知识:近似算法
近似算法主要用来解决优化问题,它不一定能得到最优解但能够给出一个近似解,最优解和近似解相差很小。
对于一个近似算法来说,问题的每一个可行解都具有一个代价,最优解要求具有最大代价(最大化问题)或最小代价(最小化问题)。近似算法的目的是寻找问题的一个和精确解差距最小的近似解,因此,需要分析近似解代价与最优解代价的差距。通常衡量这种差距有三种测度:第一个测度是近似比,这是最常见的方法;第二个测度是相对误差;第三个测度是1+ε近似。
首先看近似比的定义,设A是一个优化问题的近似算法,设n是输入大小,C是A产生的解的代价,C是最优解的代价。如果maxCC,C*C≤p(n),则A具有近似比p(n)。
为了覆盖最大化问题和最小化问题,在近似比的定义中取C/C和C/C中较大者。如果是最大化问题,max{C/C,C/C}=C/C;如果是最小化问题,max{C/C,C/C}=C/C。由于C/C<1当且仅当C/C>1,所以近似比不会小于1,等于1就是精确解。近似比越大,近似解越坏,因此近似比越小越好,在算法里面如果能将近似比降低,那么就是算法上的一个贡献。
另一个常用的测度是相对误差。对于任意输入,近似算法的相对误差定义为C-C/C,其中C是近似解的代价,C是最优解的代价。相应的相对误差界指的是一个近似算法相对误差C-C/C*的上界。
对于一个近似算法,如果其相对误差界为ε(n),则称该算法为1+ε(n)近似算法。

2.平面图直径问题的近似亚线性算法
该算法仅有两步:第一步,随机选择k≤m。第二步,选择使得Dkl最大的l。也就是说,随机看算法的一行,在这行中找出最大的值作为直径。
下面进行算法的时间复杂度分析,对一个输入为m×m的矩阵,算法只需要访问其中的一行。也就是说输入是m的平方,而算法只需访问其中的m,因此时间复杂度是

读者会想到上述算法未必得到最优解。确实不一定,但是有了几个输入性质的保证,可以证明该算法在最坏情况下与最优解相差很小,下面的定理说明了这个结论,这意味着即使最坏情况下近似解也不会小于精确解的1/2。
定理2-1 平面图直径问题的亚线性算法的近似比是2。
证明 假设算法的最优解是Dij,那么根据三角不等式,对于选出的k,有Dij≤Dik+Dkj。因为Dkl是所有Dki中的最大值,因此Dik是小于等于Dkl的,Dkj也是小于等于Dkl的。综上所述,因此,Dij小于等于2Dkl,即近似比为2。■

2.1.2 排序链表搜索的亚线性算法

排序链表搜索问题
输入:排序双向有序链表R(R中的元素存储在一个无序的队列中),元素x。
输出:如果x在R中,则返回“是”;如果x不在R中,则返回“否”。
问题的目标是确定x是否是输入中给定的n个元素之一。n个元素存储在一个双向链表中,意味着每一个链表中的元素都可以访问它的后一个以及前一个元素,但是链表不能随机访问。表中的元素存放在一个无序队列中,意味着可以根据元素的索引随机访问元素。显然,通过确定性算法不可能在o(n)时间内完成搜索,然而,如果允许随机选择,那么可以在O(n)时间内完成搜索。
因为R上仅支持顺序查找,因而该算法的基本思想是找出一个抽样,在抽样中顺序查找x所在的小范围,继而在R中的此范围内顺序查找x。从R中抽样S,在抽样S中找出和x最接近的点p和q,使得x在区间[p,q)之中,接下来仅在R中p和q之间搜索x。由于p和q是以R/n为概率在S中随机抽样的点且在S中是相邻的,因而S中的元素在区间[p,q)的数学期望是nS。从而算法的时间复杂度是O(R+n/R),为了满足时间复杂度要求,我们取R=Θ(n),则算法的时间复杂度可以达到O(n)。算法的伪代码如算法2-1所示。算法2-1 随机选择算法Random_search(R,x)

1 从输入R中等概率地随机选取Θ(n)个元素,构成集合S。
2 扫描S中所有元素,在O(n)时间内找到最大的p,q∈S,使得p≤x≤q,且满足S中在p和q之间没有任何元素。
3 在输入列表中从p元素开始搜索直到找到x(返回“是”)或者到达q元素(返回“否”)。

定理2-2证明了该算法执行时间的数学期望是O(n),从而说明了该算法是亚线性算法。
定理2-2 上述算法时间复杂度的数学期望是O(n)。
证明 从算法的过程可以看出,算法的运行时间等于O(n)+(p,q间元素个数)。由于S包含Θ(n)个元素,R中p,q间元素的个数的期望值为O(n/S)=O(n)。这表明算法的期望运行时间为O(n)。■

2.1.3 两个多边形交集问题的多项式时间算法

多边形交集问题
输入:二维空间中两个简单多边形A和B,每个都包含n个顶点。
输出:判断A和B是否相交。这个问题可以在O(n)时间内解决,例如,通过观察,这个问题可以被描述成一个二维线性规划实例,在同样的时间里,可以找到A,B交集中的一点或者找到一条将A,B分隔的直线,该直线包含A和B中各一个点,参见参考文献[1]。
下面我们讨论一个能够达到亚线性的随机算法。这个算法假设多边形A和B的顶点以双向链表的形式存储,每一个顶点都将下一个顶点作为后继,按照顺时针顺序排列。算法的伪代码如算法2-2所示。算法2-2 亚线性多边形交集算法Intersection(A,B)

1 分别从A,B中等概率随机选取Θ(n)个顶点的点集CA,CB。
2 在O(n)时间内检测CA,CB是否相交,如不相交则生成一条将CA和CB分隔的直线L。
3 if CA和CB相交then
4  返回“True”
5 else
6  根据L判断A和B是否相交

显然,算法中第1行的时间复杂度为Θ(n),第2行可以利用线性时间多项式相交判定算法实现。下面讨论第6行的实现方法和时间复杂度。
令a和b分别是L上A和B的点,a1和a2是A中和a相邻的两个点。我们现在用如下方法定义多边形PA。如果a1和a2中的点都与CA在L的同一侧,那么PA为空。否则,由于a在L上,a1和a2中只可能有一个在CA的另一侧。不失一般性,设此点为a1。沿着a到a1的方向遍历A中的点,直到再次通过L,如图2-1所示。用同样的方法可以生成PB。则PA和PB的大小为O(n),这个结论留给读者证明。

显然A和B相交当且仅当A和PB相交或者B和PA相交。我们仅考虑B和PA相交的判定,A和PB相交的判定方法类似。首先判定CB和PA是否相交,如果相交,则完成判定。否则,生成CB和PA的分隔线LB(通过上述线性算法完成)。接下来,用上述构造的算法递归判定B和PA在LB同一侧的子多边形QB是否和PA相关。于是,B和PA相交当且仅当QB和PA相交。因为QA和PB的期望规模都是O(n),这个判定可以在O(n)时间完成。根据上述构造,两个包含n个顶点的多边形相交性判定问题转化为常数个多边形判定问题,每一个的输入规模都是O(n),因而,我们有如下结论。
结论2-1 判断两个n度凸多边形的相交可以在O(n)时间内解决。

时间: 2024-09-19 09:45:59

《大数据算法》一2.1 时间亚线性算法概述的相关文章

《大数据算法》一第2章 时间亚线性算法 

第2章 时间亚线性算法 顾名思义,时间亚线性算法就是计算时间是亚线性的算法.我们对某些有亚线性运行时间的算法很熟悉,例如,二分查找算法.需要预处理(Ω(n))才能在亚线性时间运行的算法,称为"伪亚线性算法".在o(n)时间内运行,且不需要对输入预处理的亚线性算法,称为时间亚线性算法,这样的算法不读取全部输入数据,而仅仅读取其中的很小一部分.

大数据实例:高负载低延迟动态算法解析

本文讲的是大数据实例:高负载低延迟动态算法解析,这篇文章由Datasalt的创始人Ivan de Prado和Pere Ferrera提供,Datasalt是一家专注于大数据的公司,推出了Pangool和Spoilt SQL Big Data等开源项目.在这篇文章中,通过BBVA信用卡支付的例子详解了云计算中的低延时方案. 以下为文章全文: 使用信用卡进行支付的款项是巨大的,但是很明显,通过分析所有的交易,我们也可以从数据中得到内在的价值.比如客户忠诚度.人口统计数据.活动的受欢迎程度.商店的建

我们找了 4 家大数据公司技术 Leader,聊了聊算法和数据挖掘工程师的机会和选择

当话题转向「算法工程师的招聘」时,TalkingData 首席数据科学家张夏天不免面露难色起来.而在此之前,谈论起算法和数据挖掘等具体业务时,他还滔滔不绝.兴致勃勃. 不只是张夏天,自去年 10 月以来,不止一位技术 Leader 曾向我吐过「招聘算法工程师难」的苦水.尽管「算法」背后代表的是「人工智能.机器学习」等被看作是未来发展方向的前沿技术,但招聘相关领域人才确实是摆在不少创业公司面前的一道难题. 100offer 的平台数据也侧面论证了这一点.截至目前,平台上的算法和数据挖掘工程师面试邀

转 大数据实时处理:百分点实时计算架构和算法

当今时代,数据不再昂贵,但从海量数据中获取价值变得昂贵,而要及时获取价值则更加昂贵,这正是大数据实时计算越来越流行的原因.以百分点公司为例,在高峰期每秒钟会有近万HTTP请求发送到百分点服务器上,这些请求包含了用户行为和个性化推荐请求.如何从这些数据中快速挖掘用户兴趣偏好并作出效果不错的推荐呢?这是百分点推荐引擎面临的首要问题.本文将从系统架构和算法两方面全介绍百分点公司在实时计算方面的经验和心得体会,供读者参考. a) 实时计算架构 图 1百分点大数据平台原理示意图 工欲善其事,必先利其器.一

《Hadoop与大数据挖掘》——第2章 大数据存储与运算利器—Hadoop 2.1 Hadoop概述

第2章 大数据存储与运算利器-Hadoop 本章主要介绍了Hadoop框架的概念.架构.组件.生态系统以及Hadoop相关编程,特别是针对Hadoop组件HDFS.MapReduce.YARN,Hadoop MapReduce编程做了较详细的介绍.在介绍各个知识点的同时,结合动手实践章节,帮助读者理解对应的内容. 2.1 Hadoop概述 2.1.1 Hadoop简介 随着现代社会的发展,各种信息数据存量与增量都非常大,很多情况下需要我们能够对TB级,甚至PB级数据集进行存储和快速分析,然而单机

《大数据算法》一1.2 大数据算法

1.2 大数据算法 这一节我们概述大数据算法. 1.2.1 大数据上求解问题的过程 首先我们看一看在大数据上问题求解的过程.我们面对的是一个计算问题,也就是说我们要用计算机来处理一个问题. 拿到一个计算问题之后,首先需要判定这个问题是否可以用计算机进行计算,如果学习过可计算性理论,就可以了解有许多问题计算机是无法计算的,比如判断一个程序是否有死循环,或者是否存在能够杀所有病毒的软件,这些问题都是计算机解决不了的.从"可计算"的角度来看,大数据上的判定问题和普通的判定问题是一样的,也就是

《大数据算法》一导读

前 言 本书的缘起 "大数据"在今天成为一个非常时尚的概念,其影响已经远远超过了计算机学科本身,甚至影响到了自然科学.社会科学.人文科学等.由于其深远的影响和广泛的应用,大数据一直得到IT从业人员的重视,他们对大数据相关理论.技术的学习有着强烈的需求. "算法设计与分析"是计算机科学的重要主题,进行大数据计算,"算法设计与分析"是必不可少的步骤,可以说,算法设计是"大数据落地"的关键之一.然而,虽然在今天的书店里,关于大数据的

《大数据算法》一1.4 本书的内容

1.4 本书的内容 基于大数据的定义.大数据算法的定义以及大数据算法的特点,本书按照如下方式组织:第一部分是亚线性算法,包括时间亚线性算法(第2章)和空间亚线性算法(第3章),其中包括如何利用近似算法和随机化算法设计思想来设计和分析亚线性算法.第二部分是外存算法,将讨论如何面向外存来设计I/O有效的算法,包括外存算法概述(第4章).外存查找结构(第5章)和外存图数据算法(第6章).第三部分是并行算法,由于并行算法的内容非常广泛,本书仅介绍数据密集型并行算法,包括MapReduce算法概述(第7章

《大数据算法》一2.2 最小生成树代价估计

2.2 最小生成树代价估计 本节讨论最小生成树问题的亚线性算法,首先介绍连通分量个数估计算法,接下来基于此基础算法设计最小生成树代价估计算法. 2.2.1 连通分量个数估计算法 连通分量个数估计问题 输入:一个图G=(V,G),有n个顶点,m条边,该图表示为邻接矩阵,图中结点的最大度为d. 输出:G中连通分量的个数. 这个算法如果用BFS实现,那么每个点的邻居都至少要访问一次,因而精确解的时间复杂度为 . 下面考虑随机化方法.这个算法可以有效地估计连通分量的个数,得到的结果是#CC±εn的概率大