这是我问题的更详细描述:对于我的Molecule类(目前而言),我打算拥有一个Atom数组和一个Bond数组。每个Bond将指向两端的两个Atom,并且会有一个权重(即该边中化学键的数量)。换句话说,这最接近于一个边缘列表图。我的第一个猜测是在一个分子中迭代Atom,并尝试基于包含该Atom的Bond找到另一个分子中相应的Atom,但这是一种相当幼稚的方法,复杂度似乎非常大(最好的猜测接近于O(n!)。天啊)。无论复杂度如何,这种方法似乎在大多数情况下都有效,但对于某些分子来说似乎不起作用。以这些为例(注意OH基团的不同位置):
H H H OH H
| | | | |
H - C - C - C - C - C - H (2-Pentanol)
| | | | |
H H H H H
H H OH H H
| | | | |
H - C - C - C - C - C - H (3-Pentanol)
| | | | |
H H H H H
如果我们检查这些分子,对于一个分子中的每个原子,在另一个分子中都有一个独特的同种元素原子具有相同数量和类型的键,但是这两个分子显然不同,也不是立体异构体(我现在没有考虑这个)。相反,它们是结构异构体。有没有一种方法可以检查这种相对结构?使用邻接列表而不是边缘列表会更容易吗?是否有任何图形等价算法需要研究(最好是Java)?我稍微了解了一下图形规范化,但这似乎可能是NP难问题。
编辑:查看图同构问题维基百科文章,似乎具有有界度数的图形对于该问题有多项式时间解决方案。此外,平面图也有多项式解决方案(即,边仅在其端点交汇)。对我来说,分子满足这两个条件,那么这个问题的多项式时间解决方案在哪里可以找到?我的Google搜索没有结果。