图算法提供了理解、建模和预测复杂动态的手段,例如资源或信息流、传染或网络故障传播的途径,以及对群体的影响和弹性。

本博文系列旨在帮助读者更好地利用图分析和图算法,以便能够使用 Neo4j 等图数据库更快地有效创新和开发智能解决方案。

上周我们总结了对中心性(Centrality)算法的研究,还研究了亲密中心性(Closeness Centrality) 算法。

这一周,我们开始研究社区发现(Community Detection)算法,并了解强连通分量(Strongly Connected Components,SCC)算法,该算法根据关系的方向定位节点组,其中每个节点都可以从同一组中的每个其他节点到达。通常应用于深度优先搜索。

关于强连通分量

强连通分量算法在有向图找到连接节点的集合,其中每个节点可以在两个方向上从同一集合的任何其他节点到达。通常在图分析过程中的早期使用,经常用来让我们了解图的结构。

SCC 是最早的图算法之一,Tarjan 在 1972 年描述了第一个线性时间算法。将有向图分解成强连通分量是深度优先搜寻算法的经典应用。

什么时候应该使用强连通分量?

  • 在对强大的跨国公司的分析中,SCC 用于查找每个成员直接拥有和 / 或间接拥有其他成员股份的公司集合。虽然它具备诸如降低交易成本、增加信任等优点,但这种结构削弱了市场竞争。更多详情请参阅[《全球企业控制网络》(The Network of Global Corporate Control):http://u6.gg/rDnrz](http://u6.gg/rDnrz
  • 在多跳无线网络中测量路由性能时,SCC 已被用于计算不同网络配置的连接性。更多详情请参阅《多跳无线网络中存在单向链路时的路由性能》(Routing performance in the presence of unidirectional links in multihop wireless networks):http://u6.gg/rDnun
  • 强连通分量算法通常用作许多图算法的第一步,这些算法仅适用于强连接图。在社交网络中,一群人通常有密切的关系(例如,一个班级或者任何其他公共场所的学生)。这些群体中的许多人通常喜欢一些常见的网站或玩常见的游戏。SCC 算法用来找到这样的组,并向组中尚未喜欢这些网站或游戏的人群推荐这些内容。

强连通分量示例

让我们看看强连通分量算法的实际应用。以下 Cypher 语句创建了一个 Twitter 式样的图,其中包含了用户、用户之间的 FOLLOW 关系。

MERGE (nAlice:User {id:\u0026quot;Alice\u0026quot;})MERGE (nBridget:User {id:\u0026quot;Bridget\u0026quot;})MERGE (nCharles:User {id:\u0026quot;Charles\u0026quot;})MERGE (nDoug:User {id:\u0026quot;Doug\u0026quot;})MERGE (nMark:User {id:\u0026quot;Mark\u0026quot;})MERGE (nMichael:User {id:\u0026quot;Michael\u0026quot;})MERGE (nAlice)-[:FOLLOWS]-\u0026gt;(nBridget)MERGE (nAlice)-[:FOLLOWS]-\u0026gt;(nCharles)MERGE (nMark)-[:FOLLOWS]-\u0026gt;(nDoug)MERGE (nMark)-[:FOLLOWS]-\u0026gt;(nMichael)MERGE (nBridget)-[:FOLLOWS]-\u0026gt;(nMichael)MERGE (nDoug)-[:FOLLOWS]-\u0026gt;(nMark)MERGE (nMichael)-[:FOLLOWS]-\u0026gt;(nAlice)MERGE (nAlice)-[:FOLLOWS]-\u0026gt;(nMichael)MERGE (nBridget)-[:FOLLOWS]-\u0026gt;(nAlice)MERGE (nMichael)-[:FOLLOWS]-\u0026gt;(nBridget);

现在我们可以运行强连通分量来查看每个人是否相互链接,执行以下查询:

CALL algo.scc.stream(\u0026quot;User\u0026quot;,\u0026quot;FOLLOWS\u0026quot;)YIELD nodeId, partitionMATCH (u:User) WHERE id(u) = nodeIdRETURN u.id AS name, partition

强连通分量的可视化

我们的示例图中有三个强连通分量。

第一个也是最大的分量,有成员 Alice、Bridget 和 Michael,而第二个分量有 Doug 和 Mark。Charies 最终只在自己的分量中,因为从该节点到任何其他节点都之间都没有传出关系。

结论

正如我们所看到的,强连通分量算法通常用于在以识别的集群上独立运行其他算法。作为有向图的预处理步骤,它有助于快速识别断开连接的组。

原文链接:
https://neo4j.com/blog/graph-algorithms-neo4j-strongly-connected-components/

关于Neo4j 强连通分量算法,你了解多少?相关推荐

  1. JavaScript实现strongly Connected Components 强连通分量算法(附完整源码)

    JavaScript实现strongly Connected Components 强连通分量算法(附完整源码) Comparator.js完整源代码 LinkedListNode.js完整源代码 L ...

  2. C++Kosaraju找有向图的强连通分量算法(附完整源码)

    C++Kosaraju找有向图的强连通分量算法 C++Kosaraju找有向图的强连通分量算法完整源码(定义,实现,main函数测试) C++Kosaraju找有向图的强连通分量算法完整源码(定义,实 ...

  3. 强连通分量算法(2)

    Tarjan's strongly connected components algorithm Pku 2186,2553,1236,2762,都是可以用强连通分量算法来解决的.Kosaraju的算 ...

  4. 有向图的强连通分量算法

    有向图的强连通分量算法 强连通分量定义 在有向图中,某个子集中的顶点可以直接或者间接互相可达,那么这个子集就是此有向图的一个强连通分量,值得注意的是,一旦某个节点划分为特定的强连通分量后,此顶点不能在 ...

  5. 强连通分量算法学习笔记

    强连通分量 更好阅读体验请点击此链接 先推荐几道综合性较强的题目,详细题解我写了,持续更新中. 我的博客:整理 + 题解 P2341 [USACO03FALL][HAOI2006]受欢迎的牛 G P2 ...

  6. 算法提高课-图论-有向图的强连通分量-AcWing 1174. 受欢迎的牛:tarjan算法求强连通分量、tarjan算法板子、强连通图

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 强连通图:给定一张有向图.若对于图中任意两个结点x,y,既存在从x到y的路径,也存在从y到x的路径,则称该有向图是"强连通 ...

  7. 图之强连通、强连通图、强连通分量 Tarjan算法

    一.解释 在有向图G中,如果两个顶点间至少存在一条互相可达路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极大强 ...

  8. Kosaraju算法(发现强连通分图算法)

    看论文的时候,看到Kosaraju算法.Kosaraju是一个强连通分图的发现算法,如有代码中有详细的注释,所以就不赘述了.直接上码(使用webgraph库实现,在我之前的文章中,对webgraph有 ...

  9. 【C++】强连通分量

    强连通分量 先来一题例题 题目大意 怎么做? 分析 结论 不要高兴得太早 怎么办呢? 定义 缩点法 原图构建新图 发现 新的结论 强连通分量算法 Kosaraju算法 Tarjan算法 例题:信息传递 ...

  10. Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)...

    转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2194090a96bbed2db1351de8.html 基本概念: 1.割点:若删掉某点后,原连通图 ...

最新文章

  1. 55.npm install 报错 :stack Error: Can't find Python executable python
  2. java实现异步调用实例
  3. linux下运行yolo,deepin(linux)编译安装yolo v4测试效果
  4. html聚光灯特效,css实现聚光灯效果的代码分享
  5. python爬取js动态网页_Python 爬取网页中JavaScript动态添加的内容(一)
  6. 未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。
  7. java高并发之线程池
  8. 计算机技术能力校本培训总结,信息技术校本培训总结
  9. 122、影响爆炸极限的因素
  10. springboot+elasticsearch+bboss框架集成遇到的坑
  11. 品牌公关与传统媒体有什么关联和作用
  12. CSharp 基本知识-数组
  13. Qt数据库:(三)利用QSqlQuery类执行SQL语句(一)
  14. 《MATLAB智能算法30个案例》:第19章 基于模拟退火算法的TSP算法
  15. 概率分布,独立同分布在图像分类与检测中到底代表什么?
  16. python常见算法(chatgpt算法实现)
  17. 2020中国彩礼地图:哪里娶媳妇最贵?
  18. python画虚线代码_python – 使用matplotlib绘制虚线2D矢量?
  19. 一位大学老师写给大学新生的100条肺腑之言
  20. 生产线生产工序自动化信息化管理系统软件生产进度管理

热门文章

  1. 如何设置修改 Windows 7 开机启动项
  2. java基础 第十一章(多态、抽象类、接口、包装类、String)
  3. [UWP]了解模板化控件(8):ItemsControl
  4. 【CS Round #46 (Div. 1.5) B】Letters Deque
  5. Enterprise Solution(2.2.20130525) 解决方案配置与源代码下载
  6. spring中使用i18n(国际化)
  7. 《基于Nginx的中间件架构》学习笔记---3.nginx的目录分析
  8. Redis学习笔记(四)——数据结构之List
  9. 武道之路-炼体期五重天
  10. bzoj 4300绝世好题