大数据 | 大数据基础--算法之亚线性时间算法求点集合的直径

网页链接:http://bbit.vip/service/main.php?version=1&type=article&id=117
这一部分要介绍的亚线性时间算法总共有四个,这篇短文介绍的是其中之一,求点集合的直径。

我们先来看一下问题定义:

定义

已知:有 m m m个点,点与点之间的距离使用邻接矩阵表示,则 D i j D_{ij} Dij表示点 i i i到点 j j j的距离, D D D是一个对称矩阵,并且满足三角不等式 D i j ≤ D i k + D k j D_{ij} \leq D_{ik} + D_{kj} DijDik+Dkj

求出:点对 ( i , j ) (i,j) (i,j)使得 D i j D_{ij} Dij是最大的,则 D i j D_{ij} Dij是这 m m m个点的集合的直径。

普通求解方法

当数据量小的时候这个问题非常简单,只需要把矩阵中所有的数字都扫一遍,复杂度是 O ( m 2 ) O(m^2) O(m2),记作 O ( n ) O(n) O(n)

或者数据量再稍微大一些,也可以用并行的方法将时间进一步地缩小,但是这样做就比较依赖于硬件资源。

当数据量进一步扩大,我们则希望用一个亚线性的方法来解决这个问题,也就是说时间复杂度为 O ( n ) O(\sqrt{n}) O(n ),当然我们之前说过我们采取的是一个近似的算法,那么我们所估计的结果有多精确,也要给出一个衡量。

近似比

算法给出的结果与理论最优结果的一个比较

求解算法:The Indyk’s Algorithm

  1. 任选 k ∈ [ 1 , m ] k \in [1,m] k[1,m]
  2. 选出 l l l,使得 ∀ i , D k i ≤ D k l \forall i,D_{ki} \leq D_{kl} i,DkiDkl
  3. 返回 ( k , l ) , D k l (k,l),D_{kl} (k,l),Dkl

算法分析之近似比分析

最优解记为 o p t opt opt,是点 i i i 和点 j j j 之间的距离

则有 o p t 2 ≤ D k l ≤ o p t \frac{opt}{2} \leq D_{kl} \leq opt 2optDklopt

算法分析之近似比证明不等式

关于不等式的右侧易证,左侧的证明如下所示:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ opt = &D_{ij}\…
算法评价

算法的时间复杂度为 O ( m ) = O ( n ) O(m) = O(\sqrt{n}) O(m)=O(n )。读完整个算法之后会发现其实只做了一件事情(一转化成数学语言看起来就比较抽象了),就是在邻接矩阵中随便选出一行,然后求出其最大值,而这个值便具有 1 / 2 1/2 1/2的近似比,同时算法也是一个亚线性时间复杂度的算法。

计算点集合的直径是一个简单的问题,而后面将要讲解的连通分量等就比较麻烦了,这将会在接下里的短文中慢慢分析,敬请期待~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值