Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 分配组_Algorithm_Set_Combinations - Fatal编程技术网

Algorithm 分配组

Algorithm 分配组,algorithm,set,combinations,Algorithm,Set,Combinations,我有一个问题,我是分配变量集。每个集合都有一个可以分配给它的变量限制,每个变量都可以分配给集合的某些子集 例如: a可以是a组或B组 b可以是集合b c可以是A组或B组 d可以是集合A 因此,我们可以有A:A,d;B:B,c或A:c,d;B:a,B集合中变量的顺序无关紧要/ 当然,有时无法分配所有变量,有时有多个选项,有时只有一个选项 我觉得这个问题有一个简单的版本,但我似乎不能把我的手指放在它上面。任何提示都将不胜感激。这个问题是NP完全问题,这意味着没有多项式时间的解决方案。 在这种情况下,

我有一个问题,我是分配变量集。每个集合都有一个可以分配给它的变量限制,每个变量都可以分配给集合的某些子集

例如:

a可以是a组或B组 b可以是集合b c可以是A组或B组 d可以是集合A 因此,我们可以有A:A,d;B:B,c或A:c,d;B:a,B集合中变量的顺序无关紧要/

当然,有时无法分配所有变量,有时有多个选项,有时只有一个选项


我觉得这个问题有一个简单的版本,但我似乎不能把我的手指放在它上面。任何提示都将不胜感激。

这个问题是NP完全问题,这意味着没有多项式时间的解决方案。 在这种情况下,您必须使用回溯

请查看以下链接:


这个问题是NP完全问题,这意味着没有多项式时间的解决方案。 在这种情况下,您必须使用回溯

请查看以下链接:


可使用最大流量有效解决。准备一个流量网络,从源到每个变量的单位容量弧,从每个变量到它所属的每组的单位容量弧,以及从每组到容量等于该组容量的汇的弧。比如说,

ARCS

tail head capacity
------------------
s    a    1
s    b    1
s    c    1
s    d    1
a    A    1
a    B    1
b    B    1
c    A    1
c    B    1
d    A    1
A    t    2
B    t    2

使用您最喜欢的最大流算法生成积分流,并根据设置弧有流的变量提取赋值。

可使用最大流有效求解。准备一个流量网络,从源到每个变量的单位容量弧,从每个变量到它所属的每组的单位容量弧,以及从每组到容量等于该组容量的汇的弧。比如说,

ARCS

tail head capacity
------------------
s    a    1
s    b    1
s    c    1
s    d    1
a    A    1
a    B    1
b    B    1
c    A    1
c    B    1
d    A    1
A    t    2
B    t    2

使用您最喜欢的最大流算法生成积分流,并根据设置弧的变量提取赋值。

我会尝试简单的回溯,首先分配大多数约束变量,例如示例中的b和d。@tobias_k对,但在多个等约束变量的情况下,到目前为止,您复制了列表并重新运行,以便生成所有可能的集合组合?这就是我的想法,但似乎不必要的复杂-似乎有一种更快/更简单的方法来实现这一点。我会尝试简单的回溯,首先分配大多数约束变量,例如,在您的示例中的b和d。@tobias_k对,但在多个同等约束变量的情况下,到目前为止,您复制了列表并重新运行,以便生成所有可能的集合组合?这就是我的想法,但似乎不必要的复杂-似乎有一种更快/更简单的方法来实现这一点似乎是。@nii75435eoopy对于这个问题,具体来说,流和赋值之间的关系有点陈词滥调。更一般地说,如果我试图弄清楚一个问题是否有多项式时间算法,我会寻找一个动态规划或一个恰好可以有效求解的整数规划。动态规划往往不适用于分配问题,因为有太多的状态。整数规划在这里更有效;每个潜在赋值都有一个0-1变量,约束条件确保每个问题变量都是赋值,每个集合都不会超出容量。@nii75435eoopy一旦我们写下这些方程,并翻转一组不等式上的符号,使所有的值都小于或等于,我们就可以观察到矩阵是,这意味着通过网络单纯形法有一个多项式时间算法。在这一点上,选择适当的一般网络流子问题是一个问题。@nii75435eoopy一旦我有了一个有效的算法,我就会进入我的数据结构技巧包,看看是否可以让它运行得更快,但由于这是一个非常直接的流/匹配问题,没有太多的意义。@nii75435eoopy除了动态规划和线性规划之外,还有其他获取算法的方法,特别是对于涉及计算指数数量的问题,但这些方法涵盖了实践中的绝大多数问题。算法课程往往过分强调分而治之的技巧;根据我的经验,这对于理解常见的排序和搜索问题以及类似于凸包的东西非常有用。@nii75435eoopy是的,我做了很多练习,但我很喜欢,即使我不打算马上面试,我也会这么做。有很多不同的竞争性编程网站。我不熟悉leetcode,但我听说它有助于面试准备。@nii75435eoopy对于这个问题,具体来说,流程和任务之间的关系有点陈词滥调。更一般地说,如果我试图弄清楚一个问题是否有多项式时间算法,我会寻找一个动态程序或一个恰好是s的整数程序
可以有效地解决问题。动态规划往往不适用于分配问题,因为有太多的状态。整数规划在这里更有效;每个潜在赋值都有一个0-1变量,约束条件确保每个问题变量都是赋值,每个集合都不会超出容量。@nii75435eoopy一旦我们写下这些方程,并翻转一组不等式上的符号,使所有的值都小于或等于,我们就可以观察到矩阵是,这意味着通过网络单纯形法有一个多项式时间算法。在这一点上,选择适当的一般网络流子问题是一个问题。@nii75435eoopy一旦我有了一个有效的算法,我就会进入我的数据结构技巧包,看看是否可以让它运行得更快,但由于这是一个非常直接的流/匹配问题,没有太多的意义。@nii75435eoopy除了动态规划和线性规划之外,还有其他获取算法的方法,特别是对于涉及计算指数数量的问题,但这些方法涵盖了实践中的绝大多数问题。算法课程往往过分强调分而治之的技巧;根据我的经验,这对于理解常见的排序和搜索问题以及类似于凸包的东西非常有用。@nii75435eoopy是的,我做了很多练习,但我很喜欢,即使我不打算马上面试,我也会这么做。有很多不同的竞争性编程网站。我不熟悉leetcode,但我听说它对面试准备很好。如何将其建模为顶点/集合覆盖?如何将其建模为顶点/集合覆盖?