【问题标题】:How to match find maximum number of pairs between object type A and object B?如何匹配查找对象类型 A 和对象 B 之间的最大对数?
【发布时间】:2013-11-24 14:52:57
【问题描述】:

我有一个对象类型列表A 和另一个对象类型列表B。每个A 类型的对象都有一个对象类型B 的列表,它可以匹配或兼容。 (例如,对象A3 可以与对象B1B5B7 任意配对)。每个对象 A 可以有一个不同的对象 B 列表,它可以兼容(某些对象 A 可能与来自 B 的相同对象兼容)。但是每个对象A 只能与B 中的一个对象配对。一个对象B只能与一个对象A

什么样的算法可以帮助找到可能的最大对数?

【问题讨论】:

  • 我是否正确假设您不是在寻找一种简单地遍历每个可能的配对场景的蛮力算法?
  • @BlueMonkMN,只有在没有其他方法的情况下。这会被认为是多项式时间内无法计算的吗?

标签: c algorithm data-structures


【解决方案1】:

在不知道其名称的情况下,很难知道如何最好地询问或搜索此问题的答案,但我相信这是二部图的最大匹配示例。您可以在 Wikipedia 和 Google 上找到示例,例如:

我对建议解决方案的理解如下:

  1. 对于每个 A,将其链接到第一个有效的 B。
  2. 如果 B 已链接到另一个 A,则递归检查另一个 A 是否可以链接到另一个 B,不包括通过其余递归搜索链接到的 B。
  3. 如果可以,则将其他 A 重新分配给其他 B,否则为该 A 选择下一个 B,并从步骤 2 重复(递归)。

在不知道这个解决方案的情况下,我在一两年前实现了自己可能不完美的解决方案,如下所述:

How to prune duplicate associations to yield a unique most-complete set

我在此过程中注意到可能对您有所帮助的一件事:如果您遇到任何 A 或 B 只能链接到另一侧的 1 个节点,您可能希望自动选择该路径并消除节点的所有其他可能性在两端(重复直到不再被消除)。如果您知道应该链接每个节点,这可能有助于优化您的搜索时间。

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2021-10-08
    • 2017-07-16
    相关资源
    最近更新 更多