确定是否存在有效的数字排列



我正在尝试创建一种算法,该算法根据规则列表确定是否存在有效的数字排列。

我有n个节点和n个整数,每个节点都包含一个无法与之配对的整数列表,我的目标是确定是否可以将每个节点与整数配对。

目前,我最好的解决方案是尝试选择一个可以配对的数字和节点,将它们从列表中删除,然后递归调用我的函数。

在最坏的情况下,这可能会在阶乘时间内生成所有可能的排列。是否可以在不生成所有排列的情况下确定是否存在有效的配对?

感谢您的任何帮助!

这个问题将简化为最大二分匹配,您可以使用福特-富尔克森算法在 O(nm) http://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm 中求解。

这个想法是,您可以创建一个顶点为 n 个整数和 n 个节点的图,如果您可以使用该整数来表示该节点,则将有一个从节点到整数的有向边。该图可以分为两组,从何时可以应用上述算法。

除非您有关于如何生成这些"无法配对的整数列表"的更多详细信息,否则不会。这类问题的解决方案是分而治之算法:http://en.wikipedia.org/wiki/Divide_and_conquer_algorithm

您也可以将其视为赋值问题。

您可以为不想分配的组合分配巨额成本,为所有可行的组合分配零成本。

最小化你的目标函数,如果结果大于零,则意味着不可能进行可行的赋值。

可以应用标准匈牙利算法

最新更新