使用NCHOOSEK函数一次枚举 n 所有 k 的所有组合很容易。
如何构建组合及其索引的一对一对应关系(从 1 到 n!/(k!(nk)!))?
当然,可以使用NCHOOSEK,但如果 n 相当大(文档中指出超过15个),则不实用。
如何正确实施 COMBINATION_TO_INDEX 和 INDEX_TO_COMBINATION ?
UPD: 找到了组合函数索引的实现:ONECOMB。 仍在寻找逆向功能(组合指数)。
答案 0 :(得分:0)
如果您想了解排列,正如您的标题所示,perms function会生成向量的所有可能排列。
如果你想要组合,你当然可以使用perms函数来强制它 - 就像这样:
x=zeros(n,1);
x(1:k)=1;
y=unique(perms(x),'rows');
combs=y*yourvector;
这是相当低效的,因为它计算所有排列,通常比组合的数量大几个数量级。