【求助】m个相同的小球放入n个不同的盒子后续
本帖最后由 xiangpan18 于 2013-5-30 15:12 编辑前几天问了一个问题,得到诸位帮助,多谢,现在提出这个问题,增加条件。m个相同小球,n个不同盒子,m>=n,小球全部放进盒子,至少有一个盒子为空,求组合。我按照一个盒子空,两个盒子空,...,直至n-1个盒子空的情况分别计算,然后加和,给出组合数应该为$\sum\limits_{i = 1}^{n - 1} {C_n^iC_{m - 1}^{m - n + i}} $,想得到各个组合,请各位不吝赐教,不胜感激! 本帖最后由 qibbxxt 于 2013-5-31 07:56 编辑
将之前代码稍作修改m = 5;
n = 3;
f = fullfact(m+ones(n, 1))'-1;
f( :,sum(f) ~= m) = [];
index = arrayfun(@(x)nnz(f(:,x)),1:length(f));
% 分别显示
arrayfun(@(x)disp(f(:,index == x)),n -1 : -1 : 1)
% 一起
disp(f(:,index ~= n)) 4 3 2 1 4 0 3 0 2 0 1 0
1 2 3 4 0 4 0 3 0 2 0 1
0 0 0 0 1 1 2 2 3 3 4 4
5 0 0
0 5 0
0 0 5
5 4 3 2 1 0 4 0 3 0 2 0 1 0 0
0 1 2 3 4 5 0 4 0 3 0 2 0 1 0
0 0 0 0 0 0 1 1 2 2 3 3 4 4 5 qibbxxt 发表于 2013-5-31 07:52 static/image/common/back.gif
将之前代码稍作修改
读写版主帮助,不知如何将版主回复选为最佳答案
f(index>=n)=[] 1#公式改过了吧,这次是对的。
不过还有更简洁的形式:(Tex公式显示有问题,就用Matlab的形式来表示。)nchoosek(m+n-1,n-1) - nchoosek(m-n+n-1,n-1) % m>=n
% 符合条件的组合数 = 无条件的所有组合数 -不符合条件的组合数可以比较,验证一下,呵呵。 本帖最后由 xiangpan18 于 2013-6-6 09:08 编辑
lin2009 发表于 2013-6-5 04:11 static/image/common/back.gif
1#公式改过了吧,这次是对的。
不过还有更简洁的形式:(Tex公式显示有问题,就用Matlab的形式来表示。)可以 ...
兄台所言极是,全部的组合数减去每盒至少一个的组合。这个问题本来是这样的,我要把全部组合分组,至少一盒空,所有盒大于一且至少一盒只有一个,所有盒大于二且至少一个盒子只有二,......这样将全部组合分组。如果以三个变量为轴建立一个空间,这样可以看做是一个截面和这个立方体各层的交点
按照之前版主的指导,我这样完成的clear
clc
m=8;
n=3;
j_max=2;
ind=indexcomb(m,n); %这个是之前您的程序段写成一个函数,即用插板法实现功能m个相同小球任意放入n个不同盒子的组合
index = arrayfun(@(x)nnz(ind(x,:)),1:size(ind,1));
j1=ind(index<n,:);
ind(index<n,:)=[];
index = arrayfun(@(x)nnz(ind(x,:)-1),1:size(ind,1));
j2=ind(index<n,:);
ind(index<n,:)=[];
index = arrayfun(@(x)nnz(ind(x,:)-2),1:size(ind,1));
j3=ind(index<n,:); 正在做这方面的工作,很有意义,分享,学习
页:
[1]