You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测邻接链表无向图的3顶点相邻环及对应算法时间复杂度

邻接链表存储无向图的三元环检测方案

问题说明

我们要检测的3个相邻顶点构成的环也叫三元环/三角形,即三个顶点两两之间都有边相连,符合a->b->c->a的结构。

检测步骤

  • 首先给所有顶点赋予全局唯一的数值编号,约定仅检测满足u < v < w的顶点三元组,避免同一个三元环被重复遍历多次,减少冗余计算。
  • 遍历所有无向边,仅处理符合u < v的边(无向图的同一条边会在两个顶点的邻接链表中各出现一次,该规则避免重复处理同一条边)。
  • 对于每条符合要求的边(u, v),查找同时存在于u、v的邻接链表中,且编号大于v的顶点w:如果存在任意满足条件的w,说明(u, v, w)构成三元环,即当前图存在符合要求的三顶点环。

优化技巧:可以提前将每个顶点的邻接链表排序,或者转为哈希集合,能大幅提升公共顶点的查找效率。

示例验证

题目给出的示例邻接链表如下:

1->2->5
2->3->1->4
3->2->4
4->2->5->3
5->1->4

我们处理边(2, 3)(符合2<3的规则)时,查找两个顶点的公共邻接顶点,且编号大于3的顶点,可以找到4,因此三元环2->3->4->2存在,和示例结果一致。

时间复杂度分析

该算法的整体时间复杂度为O(m√m),其中m为图的边数,推导逻辑如下:

  • 我们可以对每条边(u, v),选择度更小的顶点遍历其邻接表,到度更大的顶点的邻接哈希集合中查找元素,单次查找的时间复杂度为O(1)。
  • 度大于√m的顶点最多有√m个,这部分顶点参与的边的处理总开销为O(m√m);度小于√m的顶点,每条边的处理开销不超过O(√m),总开销同样为O(m√m)。
  • 题目给定边数大于顶点数的前提,该复杂度结论完全适用。

内容的提问来源于stack exchange,提问作者user7196157

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:15:08