【问题标题】:graph algorithm to detect even cycles检测偶数周期的图算法
【发布时间】:2012-08-26 07:59:42
【问题描述】:

我有一个无向图。该图中的一条边是特殊的。我想找到属于包含第一条边的偶数循环的所有其他边。

我不需要列举所有的循环,我认为这本质上是 NP。我只需要知道,对于每条边,它是否满足上述条件。

蛮力搜索当然可以,但是太慢了,我正在努力想出更好的方法。任何帮助表示赞赏。

【问题讨论】:

  • 这里没有足够的信息来提供您所寻求的质量的答案。您提前多长时间知道哪个边缘是特殊的?是否允许对数据进行预处理?你事先接触了多少数据(例如加载它),你能修改你预处理数据的方式吗?
  • 此外,您可能需要查看所有循环如果您不能滥用预处理,但我想不出以某种方式证明该断言的证据。
  • @ninjagecko 该图表示一种化学结构,即顶点是原子,边缘是这些原子之间的化学键。用户正在不断地编辑化学结构,并且预计该算法将在用户执行编辑时实时运行。我们为图使用了一个简单的邻接表结构,尽管我们也维护了一些其他结构(例如,我们始终知道一条边是否是循环的一部分)。如果我理解正确,预处理不是一个选项,因为图形(和特殊边)总是在变化。
  • “虽然我们也维护了一些其他结构(例如,我们始终知道边是否是循环的一部分)”——也许这个结构被修改以跟踪它是否是偶数循环的一部分?它是什么样的结构? (预处理应该是可行的,因为用户从文件中加载化学物质,或者它以某种方式生成,这是一个 O(N) 操作,但可能不是必需的。)
  • 循环是否仅限于简单循环?两个三角形通过它们的尖端之间的边缘连接(一种沙漏形状)算作长度为 8 的循环,中间边缘被使用两次吗?

标签: algorithm graph graph-theory


【解决方案1】:

我想我们有一个答案(我必须把这个想法归功于我的同事)。本质上,他的想法是通过偶数周期的空间进行洪水填充算法。这是有效的,因为如果您通过合并两个较小的循环形成一个大的偶数循环,那么较小的循环必须都是偶数或都是奇数。类似地,合并奇偶循环总是会形成一个更大的奇循环。

这是一个实用的选择,只是因为我可以想象由交替的偶数和奇数循环组成的病理病例。在这种情况下,我们永远不会找到两个相邻的偶数循环,因此算法会很慢。但我相信这种情况不会出现在真正的化学中。至少在目前已知的化学领域,30 年前我们从未听说过富勒烯。

【讨论】:

    【解决方案2】:

    如果您的图的节点度数较小,您可以考虑使用不同的图表示:

    让三个原子u,v,w 和两个化学键e=(u,v)k=(v,w)。表示此类数据的典型方式是将u,v,w 存储为节点,将e,k 存储为图中的边。

    但是,可以将ek 表示为图中的节点,具有类似f=(e,k) 的边,其中f 表示从uwf=(e,k) 的两步链接或f=(u,v,w)。运行任何算法来查找此类图上的环将返回原始图上的所有偶数环。

    当然,这只有在原始图的节点度数较小时才有效。当用户执行编辑时,您可以轻松地相应地编辑替代表示。

    【讨论】:

      猜你喜欢
      • 2012-11-10
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多