找到 bin 和 objects 的所有可能性
Find all possibilities of bin and objects
给定一组有限的箱子和对象,其中箱子的大小是无限的(它们可以容纳的对象数量没有限制。计算箱子中对象的所有可能性的有效算法是什么。
例如:
假设我们有容器:B1、B2 和对象 O1、O2,解决方案是:
B1 => [O1, O2]
B2 => []
B1 => []
B2 => [O1, O2]
B1 => [O2]
B2 => [O1]
B1 => [O1]
B2 => [O2]
根据我的理解,一个简单的解决方案可能是这样的:
假设我们有两个垃圾箱(根据您提到的解决方案):
B1 => [O1, O2]
B2 => []
这意味着,B1 有 2 个对象,B2 是空的,所以 1 因为 2^0 = 1
总计 = 3
和可能性总数 = 2^3 = 8
合并所有的bin,如果你使用add all(不知道它的复杂度是多少,但你可以看看Collections.addAll [具体来说java,会有其他更复杂的算法合并两个或多个数组]) 然后你可以用这里提到的算法在 O(n!) 中找到 N 个元素的所有组合。
Best way to find all combinations
假设 B 是箱数,O 是对象数。该算法应该只以 base-B 计数(而不是 base-10 或 base-2),从 0B 到 AA...AAB,其中 A = B - 1
,位数等于 O.
以 B 为基数进行计数的最简单方法是使用长度为 O 的数组。在每个步骤中,将 ...XAA..AA 转换为 ...Y00..00,其中 X < A
和Y = X + 1
,部分 AA..AA 的长度甚至可以为零。尽可能重复。转换子数组的最简单方法是 运行 内部一个循环,从数组的一端开始 运行s,以模 B 递增项目,并在第一个不为零的项目之后停止递增,或者在数组的另一端。
每一步数组内容的解释就是每一个O位告诉我们On位于哪个bin对象
给定一组有限的箱子和对象,其中箱子的大小是无限的(它们可以容纳的对象数量没有限制。计算箱子中对象的所有可能性的有效算法是什么。
例如:
假设我们有容器:B1、B2 和对象 O1、O2,解决方案是:
B1 => [O1, O2]
B2 => []
B1 => []
B2 => [O1, O2]
B1 => [O2]
B2 => [O1]
B1 => [O1]
B2 => [O2]
根据我的理解,一个简单的解决方案可能是这样的:
假设我们有两个垃圾箱(根据您提到的解决方案):
B1 => [O1, O2]
B2 => []
这意味着,B1 有 2 个对象,B2 是空的,所以 1 因为 2^0 = 1
总计 = 3 和可能性总数 = 2^3 = 8
合并所有的bin,如果你使用add all(不知道它的复杂度是多少,但你可以看看Collections.addAll [具体来说java,会有其他更复杂的算法合并两个或多个数组]) 然后你可以用这里提到的算法在 O(n!) 中找到 N 个元素的所有组合。
Best way to find all combinations
假设 B 是箱数,O 是对象数。该算法应该只以 base-B 计数(而不是 base-10 或 base-2),从 0B 到 AA...AAB,其中 A = B - 1
,位数等于 O.
以 B 为基数进行计数的最简单方法是使用长度为 O 的数组。在每个步骤中,将 ...XAA..AA 转换为 ...Y00..00,其中 X < A
和Y = X + 1
,部分 AA..AA 的长度甚至可以为零。尽可能重复。转换子数组的最简单方法是 运行 内部一个循环,从数组的一端开始 运行s,以模 B 递增项目,并在第一个不为零的项目之后停止递增,或者在数组的另一端。
每一步数组内容的解释就是每一个O位告诉我们On位于哪个bin对象