Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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_Recursion_Combinations - Fatal编程技术网

Algorithm 找到箱子和物品的所有可能性

Algorithm 找到箱子和物品的所有可能性,algorithm,recursion,combinations,Algorithm,Recursion,Combinations,给定一组有限的存储箱和对象,其中存储箱的大小不限(它们可以容纳的对象数量没有限制)。计算存储箱中对象的所有可能性的有效算法是什么 例如: 假设我们有箱子:B1、B2和对象O1、O2,解决方案是: B1 => [O1, O2] B2 => [] B1 => [] B2 => [O1, O2] B1 => [O2] B2 => [O1] B1 => [O1] B2 => [O2] 根据我的理解,一个简单的解决方案可以是: 假设我们有两个箱子(

给定一组有限的存储箱和对象,其中存储箱的大小不限(它们可以容纳的对象数量没有限制)。计算存储箱中对象的所有可能性的有效算法是什么

例如:

假设我们有箱子:B1、B2和对象O1、O2,解决方案是:

B1 => [O1, O2] 
B2 => []

B1 => []
B2 => [O1, O2]

B1 => [O2]
B2 => [O1]

B1 => [O1]
B2 => [O2]

根据我的理解,一个简单的解决方案可以是:

假设我们有两个箱子(根据您提到的解决方案):

这意味着B1有2个对象,B2为空,因此为1,因为2^0=1

总数=3 可能性总数=2^3=8

如果您使用add all(不确定复杂度是多少,但您可以查看Collections.addAll[特别是java,将有其他更复杂的算法来合并两个或多个数组]),则可以使用此处提到的算法找到O(N!)中N个元素的所有组合


假设B是箱子的数量,O是对象的数量。算法应该只在base-B中计数(与base-10或base-2相反),从0B计数到AA…AAB,其中
A=B-1
,位数等于O

在base-B中计数的最简单方法是拥有一个长度为O的数组。在每个步骤中,将…XAA..AA转换为…Y00..00,其中
X
Y=X+1
,而AA..AA部分的长度甚至可能为零。尽可能长地重复。转换子数组的最简单方法是在数组一端运行的内部循环,递增在模B中输入项,并在增量后第一个不为零的项后停止,或在数组的另一端停止


对每个步骤中数组内容的解释是,每个O位数字告诉我们对象所在的位置。

计算可能性的数量不是问题,我想要的是实际的可能性产生所有可能性的算法不同于计算它们的算法。单词find、product和compute都意味着在这种情况下也是一样的。你确定需要递归吗?我不确定,我想我会给它加上标签。总的组合是箱子的数量与对象数量的幂的乘积,否则B^O。这是一个简单的封闭形式的解决方案。我想你可能有一些东西,但你能在变量使用上更正式一些吗?我有一个困难的问题时间理解。例如,你说“位数等于O”是O,在这种情况下是对象的数量吗?@ErikPetersen正确。我把答案扩大了一点。
B1 => [O1, O2] 
B2 => []