图算法的分类有哪些?综合当前学术界和工业界图计算领域目前最新的发展情况,把图算法划分为了以下六大类:
❑中心性(Centrality)算法:如节点出入度、全图出入度、接近中心性、中介中心性、图中心性、调和中心性等。
❑相似度(Similarity)算法:如杰卡德(Jaccard)相似度、余弦相似度、欧几里得距离等。
❑连通性和紧密度(Connectivity)算法:如强弱连通分量、三角形计算、二分图、MST、全图k邻等。
❑拓扑链接预测(Topology&Connectivity)算法:共同邻居、AA指标、优先连接等。
❑传播与分类(Propagation & Categorization)算法:如LPA、HANP算法、k均值、鲁汶识别等。
❑图嵌入(Graph Embedding)算法:如随机游走、FastRP、Node2Vec、Struc2Vec、GraphSAGE等。需要指出的是,分类有助于我们梳理知识,但也并非一成不变。
有一些算法可能会横跨在多个分类中,例如MST既属于连通性和紧密度算法又属于拓扑链接预测算法。算法本身也会不断演进,推陈出新。有一些算法在发明之时做了一些假设,但是随着时代的变化,那些假设已不再适合了。仍以MST算法为例,它的最初目标是从一个顶点出发,使用权重最小的边连通与之关联的所有节点,该算法假设全图是连通的(即只有一个连通分量)。而很多真实的场景中存在大量的孤点以及多个连通分量,此时算法就需要去适配这些情况,在算法调用接口及参数上就需要支持多顶点ID、允许指定权重对应的属性字段,以及支持限定返回结果集数量等。
书接上文:图算法 | 图算法的分类有哪些?(上)-CSDN博客
3)按复杂度分类。可分为以下5类:
❑恒定时间。复杂度O(1)就是典型的恒定时间。比如,无论数据集大小,通过数组或向量数据结构访问任一顶点所需的时间恒定为O(1)。
❑线性时间。访问时间与输入数据集大小成正比,例如遍历全部顶点所需时间与数据集大小呈线性。
❑对数时间。典型的是二叉树(或多叉树)搜索类算法,比如在常见的数据库索引数据结构中,定位任一叶子节点所需的时间与数据集大小呈对数关系。显然,在数据集相同的情况下,对数时间要比线性时间更短。
❑多项式时间。从时间复杂度上比较,指数时间要比多项式时间更长。两者量化的区别用一个具体的例子来说明,如果数据量为N,多项式时间可能是aN3+bN2+1,而指数时间是N100,后者比前者复杂度更高。
❑指数时间。通常我们认为,在大数据集上,如果一个算法是指数时间复杂度,则不具备真正意义上的可实施性。因为计算复杂度可以理解为无穷大,问题无法在有限时间内得到解决。例如穷举式暴力搜索算法,其算法复杂度与输入数据集大小呈指数关系,穷举全部可能的结果并不现实,这时通常会采用近似算法把时间复杂度至少降低到多项式时间。
4)按实现方法分类。可分为以下5类:
❑递归与非递归。每一个算法都可以以递归或非递归的方式实现,区别在于实现算法的逻辑步骤以及具体使用的数据结构,进而导致具体的算法实现方式的效率有所不同。
❑串行与并行。几乎所有的图算法初始都是以串行的思路设计的,但是很多都可以通过并行(并发)来得到性能的大幅提升。
❑集中式与分布式。同上,分布式要求对算法的数据结构及系统架构进行大幅改造,有的算法进行简单改造就可以获得很好的分布式条件下的效率提升,但有些算法采用分布式可能会出现指数级的性能下降。因此,改造与否、如何改造是研究算法与系统架构设计的专业人士需要格外注意的地方。
❑确定性与非确定性。所谓启发式算法指的就是后者。
❑精确式与近似式。有一部分图算法可以采用近似求解的方式来使之前极高的算法复杂度得到指数级降低,从而达到资源消耗可控的目的。
5)按研究领域分类。领域划分通常没有明确的边界,且多个领域之间会有大量的重叠,因此这种划分方式并不固定。
❑搜索。搜索又可以细分为路径搜索、元数据搜索、子图(网络)搜索等。
❑排序。排序又可细分为元数据排序、路径长短排序、图规模排序等。
❑合并。在图查询与算法的计算过程中,合并是个极为常见的操作,具体的逻辑类似于合并排序(Merge Sort)算法,特别是在多线程并发情况下的算法实现。
❑数值分析。数值分析在本质上是一种数值化近似方式的算法,通过量化的方式来加速求解,比如,保险行业精算师的主要工作就是进行数值分析,以及金融业中的存贷款定价、风险量化分析等操作,都可以通过数值分析类算法来实现。而通过巧妙设计的图算法,可以让这些数值分析的准确度、效率与可解释性都远超之前基于机器学习、深度学习的方法。
· end ·