本节书摘来华章计算机《大数据算法》一书中的第2章 ,第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)。
本小节将讨论一个亚线性的近似算法,这个算法的计算结果可能不是最好的,但是可以计算出一个和原来的结果相差不多的结果。近似算法的动机就是无法在要求的时间内得到精确解,就退而求其次,求出近似的解。
补充知识:近似算法
近似算法主要用来解决优化问题,它不一定能得到最优解但能够给出一个近似解,最优解和近似解相差很小。