尝试在 MATLAB 中实现简单/高效的组合函数

计算科学 矩阵 matlab 效率 组合学
2021-12-20 05:26:13

所以,最近,我发现自己不得不在 MATLAB 中实现组合函数。我的意思如下:我只需要列出(mn)问题的所有可能组合。

更具体地说,假设给我一个m=4长度向量,其中它的索引从1增加到m(例如[1,2,3,4])。让我们也说在这个例子中,n=2因此,我想找到所有(42)=6可能的组合,我希望例程因此吐出:

[121314232434]

(我需要这样一个列表的原因是因为这些数字将被用作另一个矩阵的索引,但这并不重要)。现在,我四处搜索,MATLAB 有一个函数可以做到这一点,但我没有它,因为我没有统计工具箱。尽管如此,我想我可以收集一些东西,但我认为它不会太有效,更糟糕的是,它可能不适用于任何mn

因此,我不介意编写我自己的例程,如果它不是太复杂的话,但我想要一些关于如何完成的帮助。谢谢!

1个回答

您可以在Octave中找到实现该函数与 Matlab 中一样,称为nchoosek. 文档在这里对于此类算法背后的理论,您可以参考 Donald Knuth 的计算机编程艺术第 4A 卷第 7.2.1 节。