GDS图算法:理论基础、核心方法与应用实践
摘要
图数据结构作为描述复杂关系网络的重要工具,在现代计算机科学与数据工程领域占据着举足轻重的地位。Neo4j图数据科学库(Graph Data Science,简称GDS)作为当前最具代表性的图计算平台之一,集成了丰富的图算法体系,涵盖路径查找、中心性分析、社区检测、节点相似度计算及机器学习嵌入等多个维度。本文旨在系统性地梳理GDS图算法的理论基础、核心分类、典型算法原理及其在实际业务场景中的应用价值,并对其技术架构特点与未来发展趋势进行深入探讨,以期为相关领域的研究者与工程实践者提供全面的参考依据。
一、引言
在信息化高速发展的当代,数据的形态日趋复杂,传统的关系型数据模型在处理高度互联、动态演化的网络数据时已逐渐显现出其局限性。无论是社交网络中用户之间的关联关系、知识图谱中实体与概念的语义联系、金融系统中交易主体的资金流向,还是生物信息学中蛋白质与基因的相互作用网络,其本质均可抽象为图结构——由节点(Vertex/Node)和边(Edge)所构成的拓扑模型。
图算法(Graph Algorithms)作为专门针对图结构数据进行分析与计算的方法论体系,能够从复杂的网络关系中挖掘出隐藏的结构性规律、关键节点特征以及群体聚集模式,从而为决策支持、风险识别、推荐系统等多类业务场景提供强有力的数据智能支撑。
Neo4j GDS(Graph Data Science Library)是由Neo4j公司推出的一套专为图数据科学设计的算法库,构建于原生图数据库Neo4j之上,提供了经过高度优化的并行图算法实现。自2019年正式发布以来,GDS库持续迭代升级,目前已成为企业级图计算领域应用最为广泛的工具平台之一。其核心价值在于:将学术界长期研究积累的经典图算法工程化、产品化,使业务开发者能够以较低的技术门槛在真实数据环境中运行复杂的图分析任务。
本文将从图论基础出发,逐步深入剖析GDS库的技术架构设计、主要算法分类与具体原理,并结合典型应用场景加以阐述,最后对GDS图算法领域的未来发展方向提出展望。
二、图论基础与图计算概述
2.1 图的基本概念
图(Graph)在数学上被定义为一个有序二元组,其中 表示节点集合,$E \subseteq V \times V$ 表示边的集合。根据边是否具有方向性,图可分为有向图(Directed Graph)与无向图(Undirected Graph);根据边是否携带数值权重,又可分为加权图(Weighted Graph)与非加权图(Unweighted Graph)。此外,若图中存在自环或重边,则称为多重图(Multigraph)。
在图的表示层面,常用的数据结构包括邻接矩阵(Adjacency Matrix)与邻接表(Adjacency List)。邻接矩阵适合表达稠密图,查询节点间连接关系的时间复杂度为,但空间复杂度为,在节点数量庞大时存在明显的内存开销问题。邻接表则适合稀疏图的表示,空间效率较高,是大规模图计算中更为常用的存储形式。
2.2 图计算的核心挑战
图计算相较于传统数据分析,面临着若干独特的技术挑战:
一是数据规模的挑战。 现实世界中的图往往包含数十亿乃至数千亿的节点与边,如何在有限的计算资源下高效完成大规模图遍历与计算,是图算法工程实现的首要难题。
二是计算复杂性的挑战。 部分图算法(如最短路径、社区检测)在最坏情况下具有较高的时间复杂度,如何通过近似算法、并行计算或分布式架构降低实际运行开销,是算法设计的重要课题。
三是动态性的挑战。 真实业务场景中的图数据往往处于持续变化之中,如何支持增量更新与流式计算,是图数据库与图计算框架共同面临的核心问题。
四是结果可解释性的挑战。 图算法的输出结果(如社区划分、节点重要性排序)往往需要结合业务语义加以解释,纯粹的数值输出难以直接转化为可操作的决策依据。
2.3 GDS的技术架构定位
Neo4j GDS库在技术架构层面采用了内存图投影(In-Memory Graph Projection)机制,即在执行算法前,将持久化存储于磁盘的图数据加载至内存中构建一个优化过的内存图表示,从而显著提升算法的执行效率。GDS的整体工作流程可概括为三个阶段:
图投影阶段(Graph Projection):通过
gds.graph.project等Cypher查询语句,将Neo4j数据库中满足条件的子图投影至内存,形成命名图(Named Graph)供后续算法调用。算法执行阶段(Algorithm Execution):在命名图上调用相应的图算法,支持
stream(流式返回)、write(写回数据库)、mutate(修改内存图)与stats(统计摘要)四种执行模式。结果消费阶段(Result Consumption):将算法输出结果以适当方式集成至下游系统,如数据可视化平台、机器学习管道或业务应用逻辑。
三、GDS图算法的主要分类
GDS库将其所集成的算法体系划分为若干主要类别,各类别在计算目标、适用场景与算法原理上均存在显著差异。以下将逐一进行系统性阐述。
3.1 路径查找算法(Pathfinding Algorithms)
路径查找算法旨在图中寻找满足特定条件的节点间路径,是图算法体系中历史最为悠久、应用最为广泛的类别之一。
3.1.1 Dijkstra单源最短路径算法
Dijkstra算法由荷兰计算机科学家Edsger W. Dijkstra于1956年提出,用于计算从单一源节点出发到图中所有其他节点的最短路径。其核心思想是贪心策略:在每一轮迭代中,从尚未处理的节点中选取当前已知距离最小的节点,对其所有邻居节点的距离估计值进行松弛更新(Relaxation),直至所有节点均被处理完毕。
Dijkstra算法要求图中所有边的权重为非负值。在使用优先队列(如二叉堆或斐波那契堆)优化的情况下,其时间复杂度可达。GDS中的Dijkstra实现支持并行化加速,适用于交通路网规划、网络路由优化等场景。
3.1.2 A*算法
A算法是对Dijkstra算法的启发式扩展,通过引入启发函数 对节点到目标节点的预估代价进行引导,从而减少不必要的节点探索,在保证最优性的前提下提升搜索效率。当启发函数满足可采纳性条件(即不高估实际代价)时,A算法可保证找到最优路径。GDS中的A*实现支持基于地理坐标的欧几里得距离作为启发函数,适合空间网络中的路径规划任务。
3.1.3 Yen's K条最短路径算法
在实际业务场景中,往往需要获取不止一条最优路径,以便提供备选方案或评估路径多样性。Yen's算法通过迭代地屏蔽已发现路径中的边,逐步枚举出从源节点到目标节点的前K条最短简单路径(Simple Path,即不包含重复节点的路径)。该算法在物流配送、应急路由等需要备份路径的场景中具有重要应用价值。
3.1.4 广度优先搜索与深度优先搜索
广度优先搜索(Breadth-First Search,BFS)以层次扩展的方式遍历图,适合寻找无权图中的最短路径以及计算节点间的跳数距离(Hop Distance)。深度优先搜索(Depth-First Search,DFS)则沿路径深入探索,适合拓扑排序、连通性分析等任务。两者均是图遍历的基础工具,时间复杂度均为。
3.2 中心性算法(Centrality Algorithms)
中心性算法用于量化图中各节点的重要性或影响力,不同的中心性度量从不同维度定义了"重要性"的内涵。
3.2.1 PageRank算法
PageRank算法最初由Larry Page与Sergey Brin于1998年为Google搜索引擎设计,其核心思想是:一个节点的重要性不仅取决于指向它的节点数量,还取决于这些节点自身的重要性。形式化地,节点 的PageRank值定义为:
其中 为阻尼系数(通常取0.85),$N$ 为节点总数,$M(i)$ 为指向节点 的节点集合,$L(j)$ 为节点 的出度。该算法通过迭代计算收敛至稳定分布,可有效识别网络中的权威节点。在GDS中,PageRank支持有向图与无向图,并提供了基于容忍度阈值的收敛控制机制。
3.2.2 介数中心性(Betweenness Centrality)
介数中心性衡量的是节点在图中充当"桥梁"的程度,其定义为经过该节点的所有节点对最短路径数量之比:
其中 为节点 到节点 的最短路径总数,$\sigma_{st}(v)$ 为其中经过节点 的数量。介数中心性高的节点往往是网络中信息流通的关键枢纽,其移除可能对网络连通性造成严重影响。该指标在识别网络脆弱点、发现关键意见领袖等场景中具有重要价值。由于精确计算的时间复杂度为,GDS提供了基于随机采样的近似算法以支持大规模图的高效计算。
3.2.3 度中心性(Degree Centrality)
度中心性是最为直观的中心性度量,直接以节点的连接边数作为重要性指标。对于有向图,可进一步区分入度中心性(In-Degree Centrality)与出度中心性(Out-Degree Centrality),分别反映节点被指向的程度与主动连接的程度。度中心性计算复杂度低,适合作为快速筛选高影响力节点的初步手段。
3.2.4 特征向量中心性(Eigenvector Centrality)
特征向量中心性与PageRank思想相近,同样考虑邻居节点的重要性对目标节点的贡献。其数学定义基于图的邻接矩阵的主特征向量:节点 的中心性分数正比于其邻居节点中心性分数之和。在无向图中,特征向量中心性与PageRank(阻尼系数为1时)等价;在有向图中,两者存在一定差异。
3.2.5 接近中心性(Closeness Centrality)
接近中心性定义为节点到图中所有其他节点的平均最短路径长度的倒数,反映节点向全网传播信息的效率。接近中心性高的节点能够以最短的平均步数触达网络中的其他成员,因而在信息扩散、流行病传播等动态过程的研究中具有重要意义。
3.3 社区检测算法(Community Detection Algorithms)
社区检测算法旨在将图中的节点划分为若干内部连接紧密、外部连接稀疏的子群(即社区或聚类),揭示网络的中观结构。
3.3.1 Louvain模块度优化算法
Louvain算法是当前应用最为广泛的社区检测算法之一,由Vincent Blondel等人于2008年提出。其优化目标为模块度(Modularity)指标,该指标衡量当前社区划分相对于随机图基准的质量:
其中 为边的总权重,$A_{ij}$ 为邻接矩阵元素,$k_i$ 为节点 的加权度,$\delta(c_i, c_j)$ 为指示函数(当两节点属于同一社区时取1)。
Louvain算法采用两阶段迭代策略:第一阶段,每个节点尝试将自身并入能够使模块度增益最大的邻居社区;第二阶段,将每个社区收缩为一个超级节点,构建新的压缩图,并重复上述过程。该算法的时间复杂度接近线性,能够在大规模图上高效运行,且产生层次化的社区结构,具有良好的可解释性。
3.3.2 Leiden算法
Leiden算法是对Louvain算法的改进版本,由Traag等人于2019年提出。研究发现,Louvain算法在某些情况下可能产生内部连通性不足的社区(即社区内部存在断开的子图),Leiden算法通过引入细化(Refinement)步骤解决了这一问题,同时保证了社区划分结果满足强连通性约束,从而在理论严格性与实践质量上均优于Louvain算法。
3.3.3 标签传播算法(Label Propagation Algorithm,LPA)
标签传播算法是一种基于局部信息的半启发式社区检测方法。算法初始时为每个节点分配唯一标签,随后在每轮迭代中,每个节点将自身标签更新为其邻居中出现频率最高的标签,直至标签分配不再发生变化。LPA计算复杂度极低,适合超大规模图的快速社区划分,但由于初始化的随机性,每次运行结果可能存在差异,稳定性相对较弱。
3.3.4 强连通分量(Strongly Connected Components,SCC)与弱连通分量
连通分量分析是图结构分析的基础任务。强连通分量(适用于有向图)指子图中任意两个节点之间均存在有向路径;弱连通分量(Weakly Connected Components,WCC)则忽略边的方向,将图视为无向图后计算连通分量。GDS中的WCC算法基于Union-Find(并查集)数据结构实现,时间复杂度接近线性,常用于图数据质量评估与预处理。
3.3.5 三角计数与聚类系数
三角计数(Triangle Count)统计图中每个节点参与的三角形数量,聚类系数(Clustering Coefficient)则以此为基础,衡量节点邻居之间的互连程度。高聚类系数表明局部网络结构紧密,是识别社交圈子、检测团伙欺诈等场景的重要特征指标。
3.4 节点相似度算法(Node Similarity Algorithms)
节点相似度算法通过量化节点在图结构或属性层面的相似程度,为推荐系统、链接预测等任务提供计算基础。
3.4.1 Jaccard相似度
Jaccard相似度定义为两个节点邻居集合的交集大小与并集大小之比:
该指标取值范围为,值越高表明两节点的拓扑邻域越相似。Jaccard相似度在协同过滤推荐、学术论文相关性分析等领域有着广泛应用。
3.4.2 余弦相似度(Cosine Similarity)
余弦相似度将节点的邻居集合视为特征向量,通过计算两向量夹角的余弦值来衡量相似程度。与Jaccard相似度相比,余弦相似度对节点度数差异的敏感性较低,在节点度分布不均匀的图中往往能够产生更为合理的相似度排序。
3.4.3 K近邻算法(K-Nearest Neighbors,KNN)
GDS中的KNN算法在节点相似度矩阵的基础上,为每个节点筛选出相似度最高的K个节点,并在图中构建相应的相似度边,从而形成一个以相似关系为语义的新图结构,可进一步用于社区检测、推荐路径构建等下游任务。
3.5 图机器学习算法(Graph Machine Learning Algorithms)
随着图神经网络与图表示学习研究的深入发展,GDS库亦逐步引入了若干图机器学习相关算法,以支持更为复杂的预测与推理任务。
3.5.1 节点嵌入算法
节点嵌入(Node Embedding)旨在将图中的节点映射至低维连续向量空间,同时尽可能保留原始图的结构信息,以便将图数据纳入传统机器学习框架。GDS目前支持以下主要嵌入算法:
FastRP(Fast Random Projection):基于随机投影理论,通过多轮迭代聚合邻居节点的随机特征向量,生成能够捕捉高阶邻域信息的节点表示。FastRP在计算效率上远优于基于随机游走的方法,适合大规模图的批量嵌入生成。
Node2Vec:基于有偏随机游走(Biased Random Walk)策略,通过调整游走的广度优先与深度优先倾向(参数 与),灵活控制所捕获的图结构特征是以同质性(Homophily)还是结构等价性(Structural Equivalence)为主导,随后将游走序列输入Word2Vec模型训练节点向量。
GraphSAGE:基于归纳式图神经网络框架,通过对节点局部邻域进行采样与聚合,学习可泛化至未见节点的嵌入函数,适合动态变化的图数据场景。
3.5.2 链接预测
链接预测(Link Prediction)任务旨在预测图中尚未存在但在未来可能出现的边,是知识图谱补全、社交网络好友推荐等应用的核心问题。GDS提供了基于节点嵌入的链接预测管道,支持将节点对的嵌入向量经由特定组合算子(如哈达玛积、L1距离)转换为边特征,随后训练二分类模型进行预测。
四、GDS算法的执行模式与工程实践
4.1 四种执行模式的比较分析
GDS为每种算法提供了四种标准执行模式,各模式在输出行为与适用场景上有所区别:
Stream模式:以流式方式逐行返回算法计算结果,不对数据库或内存图进行任何修改。适合探索性分析与结果预览,但不持久化输出,需由调用方自行处理数据流。
Write模式:将算法结果作为节点属性或关系写回Neo4j图数据库,实现结果的持久化存储。适合将算法输出集成至后续业务查询或报表生成流程。
Mutate模式:将算法结果写入内存中的命名图,不影响持久化数据库,适合在多步骤算法管道中将前序算法的输出作为后续算法的输入。
Stats模式:仅返回算法执行的统计摘要信息(如运行时间、迭代次数、模块度值等),不产生节点级别的详细输出,适合快速评估算法配置的合理性。
4.2 图投影的设计策略
图投影是GDS工作流的起点,其设计质量直接影响算法的执行效率与结果准确性。在实践中,需重点关注以下几个方面:
投影粒度的选择:应根据算法需求精确控制投影的节点标签与关系类型,避免将无关数据载入内存,以减少内存占用与算法处理量。
关系方向的处理:不同算法对边的方向性有不同要求。例如,PageRank通常需要有向图,而无向图的社区检测算法(如Louvain)则需在投影时将有向关系转换为无向关系(UNDIRECTED配置)。
节点属性与关系权重的引入:若算法支持权重感知(如加权PageRank、加权最短路径),需在投影阶段显式指定关系属性作为权重字段,确保算法能够正确读取权重信息。
4.3 算法管道(Pipeline)的构建
GDS支持将多个算法步骤组合为端到端的机器学习管道(ML Pipeline),实现从特征工程到模型训练、预测的全流程自动化。典型的节点分类管道包括以下步骤:
执行节点嵌入算法(如FastRP)生成结构特征向量;
将嵌入向量与节点原始属性拼接为特征矩阵;
基于已标注的训练节点集训练分类器(如逻辑回归、随机森林);
对未标注节点进行类别预测并输出置信度分数。
这一管道化设计极大地降低了图机器学习任务的工程复杂度,使业务团队能够以声明式的方式定义与执行完整的预测工作流。
五、GDS图算法的典型应用场景
5.1 金融风险控制与反欺诈
在金融行业,欺诈行为往往以复杂的关联网络形式存在,单纯依赖个体特征的传统机器学习模型难以有效识别团伙欺诈。图算法能够从关系网络视角揭示隐藏的风险模式:
社区检测:通过Louvain或Leiden算法识别账户、设备、IP地址等实体之间形成的异常聚集群体,发现团伙欺诈环节;
中心性分析:通过PageRank或介数中心性识别资金流转网络中的核心枢纽账户,定位洗钱链条的关键节点;
路径查找:追踪资金在账户间的流转路径,还原可疑交易链条,为反洗钱调查提供证据支撑。
5.2 知识图谱与智能搜索
知识图谱以图结构组织实体与关系,图算法在知识图谱的构建、补全与应用层面均发挥着重要作用:
节点相似度与链接预测:用于发现知识图谱中缺失的实体关系,实现知识图谱的自动化补全;
路径查找:支持基于知识图谱的多跳推理,如在医疗知识图谱中查找药物与疾病之间的间接关联路径;
中心性分析:评估实体在知识网络中的权威性,辅助搜索排名与答案生成。
5.3 推荐系统
图算法为推荐系统提供了强大的协同过滤基础:
节点相似度:基于用户-物品二部图,通过Jaccard或余弦相似度计算用户间的行为相似性,实现基于近邻的协同过滤推荐;
节点嵌入:将用户与物品统一嵌入向量空间,通过向量相似度检索实现高效的个性化推荐;
随机游走:基于图上的随机游走路径建模用户的兴趣扩散过程,生成多样化的推荐候选集。
5.4 网络基础设施管理
在IT运维与网络管理领域,图算法可用于基础设施拓扑的分析与优化:
连通分量分析:快速识别网络分区与孤立节点,辅助故障定位与网络健康评估;
最短路径算法:优化数据包路由策略,降低网络延迟;
中心性分析:识别网络拓扑中的关键节点,评估单点故障风险,指导冗余架构设计。
5.5 生物信息学与医疗健康
生物网络(如蛋白质相互作用网络、基因调控网络)天然具有图结构,图算法在生物信息学领域有着广泛应用:
社区检测:识别蛋白质功能模块与基因共表达簇,辅助生物功能注释;
中心性分析:发现疾病网络中的关键基因或蛋白质,为药物靶点筛选提供线索;
路径查找:探索信号传导通路与代谢反应链条,支持系统生物学研究。
六、GDS图算法的性能优化策略
6.1 并行计算与内存优化
GDS的核心算法实现均采用多线程并行设计,充分利用多核处理器的计算资源。在实际部署中,需合理配置GDS的并发线程数(concurrency参数),在计算效率与系统资源占用之间取得平衡。对于内存密集型任务,应预先估算内存图的大小,确保JVM堆内存(Heap Memory)配置充足,避免频繁的垃圾回收影响算法性能。
6.2 近似算法的合理运用
对于计算复杂度较高的算法(如介数中心性、节点相似度),GDS提供了基于采样的近似版本,在精度与效率之间提供可配置的权衡空间。在对精度要求不极端苛刻的业务场景中,优先考虑使用近似算法,可在可接受的精度损失范围内将计算时间降低一到两个数量级。
6.3 算法参数调优
图算法的输出质量对参数配置高度敏感。例如,Louvain算法的迭代轮数与容忍度阈值直接影响社区划分的精细程度;Node2Vec的游走长度与游走次数影响嵌入向量的质量;PageRank的阻尼系数与收敛阈值影响排名结果的稳定性。在实际应用中,建议通过系统性的参数敏感性分析确定最优配置,而非直接采用默认参数。
七、GDS图算法的局限性与未来展望
7.1 现有局限性分析
尽管GDS库在图算法工程化方面取得了显著进展,但仍存在若干值得关注的局限性:
其一,内存限制。 GDS基于内存图投影的设计虽然带来了高效的计算性能,但也对系统内存容量提出了较高要求。对于超大规模图(数十亿节点与边),单机内存往往难以容纳完整的图数据,需要借助分布式图计算框架(如Apache Giraph、GraphX)加以补充。
其二,动态图支持不足。 当前GDS主要面向静态图批量计算设计,对于实时变化的流式图数据,缺乏原生的增量计算支持,每次图更新后均需重新执行投影与算法,时效性有所欠缺。
其三,算法覆盖的局限。 尽管GDS已集成数十种主流图算法,但图算法领域的研究进展极为迅速,仍有大量新兴算法(如时序图算法、异构图神经网络)尚未纳入GDS的支持范围。
7.2 未来发展趋势
展望未来,GDS图算法的发展将可能在以下几个方向上取得突破:
图神经网络的深度整合。 随着图神经网络(GNN)在节点分类、图分类等任务上的卓越表现,GDS将逐步扩充对GNN模型(如GCN、GAT、RGCN)的原生支持,推动图数据库与图深度学习的深度融合。
分布式图计算的扩展。 面向超大规模图的计算需求,GDS可能推出基于分布式架构的计算引擎,支持跨机器的并行图算法执行,突破单机内存的物理限制。
实时流式图计算。 随着业务场景对实时性要求的不断提升,支持动态图上的增量算法更新将成为重要的技术方向,以满足实时反欺诈、动态推荐等对时效性极为敏感的应用需求。
自动化图分析(AutoGraph)。 借鉴AutoML的设计理念,未来的图数据科学工具有望实现自动化的算法选择、参数调优与管道构建,进一步降低图分析的使用门槛,推动图计算技术在更广泛业务领域的普及应用。
八、结论
图数据科学作为连接图数据库技术与机器学习方法论的新兴交叉领域,正以前所未有的速度改变着企业对复杂关系数据的分析与应用方式。Neo4j GDS图算法库凭借其完善的算法体系、高效的工程实现与友好的开发接口,已成为图计算领域不可忽视的重要工具平台。
本文系统性地梳理了GDS库在路径查找、中心性分析、社区检测、节点相似度与图机器学习等主要算法类别上的核心原理与技术细节,并探讨了其在金融风控、知识图谱、推荐系统、网络管理及生物信息学等典型场景中的应用价值。同时,本文亦对GDS的性能优化策略与现有局限性进行了客观评估,并对未来的发展方向提出了展望。
在数字化转型持续深化的时代背景下,图算法的应用价值将随着数据互联程度的不断提升而日益凸显。理解并掌握GDS图算法的核心理论与工程实践,对于数据科学家、图数据库工程师以及业务分析师而言,不仅是应对当前技术挑战的必要能力储备,更是把握未来数据智能发展趋势的重要基础。期待学界与业界共同推动图数据科学领域的持续创新,使图算法在更广泛的人类知识生产与社会治理实践中发挥更为深远的价值。
参考文献
Needham, M., & Hodler, A. E. (2019). Graph Algorithms: Practical Examples in Apache Spark and Neo4j. O'Reilly Media.
Blondel, V. D., Guillaume, J. L., Lambiotte, R., & Lefebvre, E. (2008). Fast unfolding of communities in large networks. Journal of Statistical Mechanics: Theory and Experiment, 2008(10), P10008.
Page, L., Brin, S., Motwani, R., & Winograd, T. (1999). The PageRank Citation Ranking: Bringing Order to the Web. Stanford InfoLab.
Traag, V. A., Waltman, L., & Van Eck, N. J. (2019). From Louvain to Leiden: guaranteeing well-connected communities. Scientific Reports, 9(1), 5233.
Grover, A., & Leskovec, J. (2016). Node2vec: Scalable feature learning for networks. In Proceedings of the 22nd ACM SIGKDD, 855–864.
Hamilton, W. L., Ying, R., & Leskovec, J. (2017). Inductive representation learning on large graphs. Advances in Neural Information Processing Systems, 30.
Neo4j, Inc. (2023). Neo4j Graph Data Science Library Manual. Neo4j Documentation.
Dijkstra, E. W. (1959). A note on two problems in connexion with graphs. Numerische Mathematik, 1(1), 269–271.
Brandes, U. (2001). A faster algorithm for betweenness centrality. Journal of Mathematical Sociology, 25(2), 163–177.
Yen, J. Y. (1971). Finding the k shortest loopless paths in a network. Management Science, 17(11), 712–716.