algorithm - 枚举n个球到k个盒子的所有可能分布

标签 algorithm matlab combinations permutation combinatorics

<分区>

我所指的确切问题和问题的分布数量已计算出来 here .我有兴趣明确了解这些分布。

例如,有 5 个球和 3 个盒子:一种分布是盒子 1 中有 2 个球,盒子 2 中有 2 个球,盒子 3 中有 1 个球,称为 221。现在我想列出所有这些可能的分布:-

212

131

104

. . .

一种方法是我运行 matlab 命令:perms([0,0,0,0,0,1,1,1])。这基本上生成了 5 个球和 2 个棍子的所有排列。但是由于命令 perms 无法识别相同的对象,因此存在大量的多算。

最佳答案

非常简单......有点。

function alloc(balls, boxes):

    if boxes = 1
        return [balls]
    else
       for n in range 0:balls
           return alloc(balls-n, boxes-1)

这是基本的递归逻辑:挑选每个可能数量的球,然后对剩余的球和少一个盒子进行递归。

列表粘合方法将依赖于语言;我将它们留作学生的练习。

关于algorithm - 枚举n个球到k个盒子的所有可能分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47360111/

相关文章:

algorithm - 伪数生成

algorithm - 构造一棵二叉树,使得后序遍历应该给出排序后的结果

c++ - Term does not evaluate to a function taking 1 arguments 错误?

javascript - 如何每次删除4个字符得到一个字符串的所有组合?

JavaScript - 从具有 m 个元素的 n 个数组生成组合

string - 根据动态模式匹配符号流

matlab - matlab直方图上的多种颜色

java - java.sql.DriverManager.getConnection 突然出现 "license checkout failed"

Matlab优化

从 n 返回 k 元素的所有组合的算法