【问题标题】:Is it possible to develop an algorithm to solve a graph isomorphism?是否有可能开发一种算法来解决图同构?
【发布时间】:2017-04-30 23:43:55
【问题描述】:

或者我是否需要为每个独特的图形开发一种算法?给用户一种图,然后他们应该使用该界面将节点和边添加到初始图。然后他们提交图,算法应该确认用户的图是否与给定的图匹配。

算法不仅需要确认每个节点的邻居,还需要确认每个节点和每条边都有正确的值。初始图总是有一个根节点,这是算法可以开始的地方。

我想知道我是否可以在一般意义上为这种算法开发逻辑,或者我是否需要为每个独特的图实际编写一个独特的算法。如果是后一种情况,这没什么大不了的,因为我只有大约 20 个独特的图表。

谢谢。我希望我很清楚。

【问题讨论】:

  • 您的问题是“图同构问题是否可判定?”如果是这样,答案是肯定的。如果您的问题是“图同构是否有渐近可行的算法?”,答案是没有人知道。

标签: algorithm graph-theory


【解决方案1】:

Graph isomorphism problem 可能并不难。但是很难证明这个问题不难。

这个问题有三种可能。
1.图同构问题是NP-hard.
2.图同构问题有多项式时间解。
3.图同构问题既不是NP难也不是P。

如果两个图是同构的,那么这个同构存在一个排列。以这个排列为证明,我们可以证明这两个图在多项式时间内彼此同构。因此,图同构位于 NP 集的范围内。然而,30 多年来,没有人能证明这个问题是 NP 难还是 P。因此,尽管问题描述很简单,但这个问题本质上是难的。

【讨论】:

    【解决方案2】:

    如果我正确理解了这个问题,您可以使用 ONE 单一算法,该算法将通过接受几个 reference 图之一作为其输入来工作(除了与同构的未知图的输入之外)参考图将被断言)。

    您似乎试图断言一个给定的图是否完全与另一个图相同,而不是断言这些图是否相对于一组特定的操作或特征是同构的。这意味着为算法提供了一些特定参考图,而不是处理一些“抽象”规则,例如两个图是否都没有循环,或者两个图是否完全连接等,即使图可能以其他方式有所不同。

    编辑,确认以下内容:
    是的,该算法将提供一个参考图(这是答案),然后将检查用户的图以查看它是否与引用同构(包括边和节点的值)

    在那种情况下,是的,很有可能开发出一个相对简单的算法来断言这两个图的同构。请注意,其他评论和答案中提到的考虑因素以及与问题可能是NP-Hard这一事实相关的因素仅表明简单算法[或任何 算法] 对于尺寸和复杂性太大的图,可能不足以在合理的时间内解决问题。但是,假设图相对较小,并利用优势(!)边和节点的权重也需要匹配的要求,通常应该适用以下算法。

    总体思路
    对于与图的其余部分断开连接的每个子图,识别用户图中的一个(或可能多个)节点,该节点必须与参考图的特定节点匹配。通过遵循来自该节点的路径 [以有序的方式,更多内容见下文],断言其他节点的身份和/或确定存在一些无法匹配的节点(因此这两个结构不是同构的)。

    粗略伪代码:
    1. 对于参考图和用户提供的图,制作他们的列表Connected Components,即其中与图的其余部分断开连接的子图列表。查找这些连接的组件是通过从给定节点开始遵循广度优先或深度优先路径并使用任意 [通常是递增的] 元素 ID 号“标记”该路径上的所有节点来完成的。一旦给定路径已被完全访问,从任何其他非标记节点重复该操作,直到没有更多非标记节点为止。

    2. 建立一个每个图的特征的“数据库”。 这对于识别匹配的候选者以及在早期确定非同构实例很有用。 每个“数据库”将有两种“记录”:节点和边,分别具有以下字段: - node_id、Connected_element_Id、节点权重、出边数、入边数、出边权重总和、入边权重总和。 节点 - edge_id、Connected_element_Id、边权重、node_id_of_start、node_id_of_end、weight_of_start_node、weight_of_end_node

    3. 为每个图建立一个连接元素的数据库
    每条记录应具有以下字段:Connected_element_id、节点数、边数、节点权重总和、边权重总和。

    4. [可选] 发送非同构的简单案例
    4.连通元素个数不匹配
    4.b 连接元素数不匹配,按除 id 以外的所有字段分组(节点数、边数、节点权重总和、边权重总和)

    5. 对于参考图中的每个连通元素
    5.1 在用户提供的图中识别匹配连接元素的候选者。候选者必须具有相同的连接元素特征(节点数、边数、节点权重总和、边权重总和)并且包含相同的节点和边列表,再次通过分组计数除了id之外的所有特征。
    5.2 对于每个候选者,将其确认最终确定为相对于参考图中相应连接元素的同构图。这是通过从候选节点匹配开始的,即一个节点,希望是唯一的,在两个图上具有完全相同的特征。如果没有这样的节点,则需要取消每个可能的候选者的资格,直到可以确认同构(或所有候选者都用尽)。对于候选节点匹配,遍历图,例如,广度优先,然后根据边的方向和权重以及节点的权重找到其他节点的匹配项。

    该算法的主要技巧是保持对候选者的正确计算(无论是较高级别的候选连接元素还是较低级别的候选节点),并且还可以记住并标记其他已识别的项目(以及如果假设的候选人最终被证明不可行,请标记它们。)

    我意识到上面没有正式的算法描述,但这应该让您了解所需的内容以及可能的起点,您是否决定实施它。

    您可以注意到,匹配节点和边权重的要求似乎是断言同构的一个额外困难,有效地简化算法,因为底层节点/边特征呈现这些更独特,因此使算法更有可能 a) 找到唯一的节点候选者和 b) 快速找到路径上的其他候选者和/或快速断言非同构。

    【讨论】:

    • 是的,该算法将提供一个参考图(这是答案),然后将检查用户的图以查看它是否同构(包括边和节点的值)到参考.
    猜你喜欢
    • 2012-06-23
    • 1970-01-01
    • 2019-01-01
    • 2012-03-10
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多