我想生成一个名为
listt
的列表,其中包含所有可能的正整数,总和为特定数字 d
。例如,我正在查看 x's
的所有可能正整数值的列表,使得 x1 + x2 + ... + xk = d
。
在这种情况下,
listt
的行大小应为(d+k-1) choose (k-1)
。
我已经有了
MATLAB code
来执行此操作(见下文),但主要问题是此代码允许 listt
中重复行。 我需要帮助才能更改此代码,确保listt
中没有重复的行。
k = 2;
d = 2;
m = nchoosek(d+k-1, k-1);
% generate non-negative integer random (m x k) array row-sum to d
ss=rand(m,d+k-1);
[~,r] = maxk(ss,k-1,2);
z = zeros(m,1);
listt = diff([z, sort(r,2), (d+k)+z],1,2)-1;
任何帮助将不胜感激!
这称为整数分区。它以n为指数,Python中有一个很好的实现,https://ics.uci.edu/~eppstein/PADS/IntegerPartitions.py。
我找到了 MATLAB 实现,但从未使用过它:https://www.mathworks.com/matlabcentral/fileexchange/36437-integer-partition-generator