设计算法以在d-正则图中查找简单循环的长度

时间:2015-12-07 12:38:36

标签: algorithm graph-theory graph-traversal

enter image description here

我一般理解这个问题,但不知道如何设计和分析问题中的算法。我正在考虑应用某种图搜索算法,如深度优先/广度优先搜索。

更新:这是我尝试过的,从图的任何节点开始(称之为N),访问该节点的每个邻居。现在,我们刚刚访问的N的最后一个邻居(称之为L)访问不是N的L的任何其他邻居?

1 个答案:

答案 0 :(得分:1)

其他人已经在评论中暗示了可能的解决方案,让我们详细说明。当d<=1时,解决方案是即时的(并且取决于您对周期的确切定义),因此我假设d>1

一种这样的算法是:

  1. 构建从任何顶点V开始的路径。在路径长度d之前,不要允许已经访问过的顶点。
  2. 路径长度为d时,请继续向路径添加顶点,但现在只允许顶点与路径的最后d个顶点不同。
  3. 当您添加已在路径中使用过的顶点时,请停止。您可以从该顶点开始和结束的路径段创建结果循环。
  4. 在(1)和(2)中,通过G是d-正则的事实保证了这种顶点的存在。搜索要添加的顶点时,我们只排除最后d个顶点,即最后一个顶点(U)及其d-1个前辈。 U有d个邻居,因此至少有一个邻居可以使用。

    由于条件(3)和G是有限的,因此算法将停止。

    在(2)中选择已经访问过的顶点是有意义的,但它并没有改变最坏情况的复杂性。

    这给我们n*d的最坏情况复杂性 - 因为我们可能必须访问每个顶点一次并检查它的所有边缘。