我有一张无向图。该图中的一个边缘是特殊的。我想找到包含第一条边的偶数周期的所有其他边。
我不需要列举所有周期,我认为这本身就是NP。我只需知道每个边缘是否满足上述条件。
蛮力搜索当然有效,但速度太慢,我正在努力想出更好的东西。任何帮助表示赞赏。
答案 0 :(得分:1)
我认为我们有一个答案(我必须相信我的同事的想法)。基本上他的想法是通过偶数周期的空间进行洪水填充算法。这是有效的,因为如果你通过合并两个较小的周期形成一个大的偶数周期,那么较小的周期必须是偶数或两者都是奇数。类似地,合并奇数和偶数周期总是形成更大的奇数周期。
这是一个实用的选择,因为我可以想象由偶数和奇数周期交替组成的病理情况。在这种情况下,我们永远不会找到两个相邻的偶数周期,因此算法会很慢。但我相信这种情况不会出现在真正的化学中。至少在目前已知的化学中,30年前我们从未听说过富勒烯。
答案 1 :(得分:-1)
如果您的图表具有较小的节点度,您可以考虑使用不同的图表表示:
设三个原子u,v,w
和两个化学键e=(u,v)
和k=(v,w)
。表示此类数据的典型方法是将u,v,w
存储为节点,将e,k
存储为图表中的边。
但是,可以将e
和k
表示为图表中的节点,其边缘类似于f=(e,k)
,其中f
表示来自{{1}的两步链接} u
,w
或f=(e,k)
。运行任何算法以在这样的图上查找循环将返回原始图上的所有偶数循环。
当然,只有原始图形具有较小的节点度时,这才有效。当用户执行编辑时,您可以轻松地相应地编辑替代表示。