给定 n 个球和 m 个箱子,每个箱子都有一定的容量,有多少种组合?
Given n balls and m bins, each bin with a certain capacity, how many combinations are there?
给定 n 个相同的球和 m 个不同的箱子,其中每个箱子都有一定的容量(从 0 到 z,其中 z 是一个 non-negative 小于或等于 15 的整数),有多少种不同的方式那里分配球?是否有解决此类问题的通用算法?
我遇到过“星条旗”和“inclusion/exclusion”原则,但我也在 Whosebug 上找到了一些 questions/answers,但 none 的答案似乎很笼统足以扩展到任意大小的 n。似乎解决它的一种方法是使用动态编程。如何做到这一点,对于任意 n(下面的解决方案的问题是递归深度在 Python 中对于相对较小的 n 变得太大,例如 n = 1000)。
我是不是理解错了?有人能像对五岁孩子那样向我解释吗?
这个问题可以通过生成函数来建模,其中每个 bin 产生一个多项式 (1 + z + z2 + … + zc) 其中 c 是 bin 的容量,我们取 bin 多项式的乘积并提取 zn.
的系数
简单的非递归动态规划算法是从左到右评估产品。如果需要,您可以花哨并混合搭配您的乘法算法,尤其是在 c ≤ 15 的情况下。
给定 n 个相同的球和 m 个不同的箱子,其中每个箱子都有一定的容量(从 0 到 z,其中 z 是一个 non-negative 小于或等于 15 的整数),有多少种不同的方式那里分配球?是否有解决此类问题的通用算法?
我遇到过“星条旗”和“inclusion/exclusion”原则,但我也在 Whosebug 上找到了一些 questions/answers,但 none 的答案似乎很笼统足以扩展到任意大小的 n。似乎解决它的一种方法是使用动态编程。如何做到这一点,对于任意 n(下面的解决方案的问题是递归深度在 Python 中对于相对较小的 n 变得太大,例如 n = 1000)。
我是不是理解错了?有人能像对五岁孩子那样向我解释吗?
这个问题可以通过生成函数来建模,其中每个 bin 产生一个多项式 (1 + z + z2 + … + zc) 其中 c 是 bin 的容量,我们取 bin 多项式的乘积并提取 zn.
的系数简单的非递归动态规划算法是从左到右评估产品。如果需要,您可以花哨并混合搭配您的乘法算法,尤其是在 c ≤ 15 的情况下。