Matlab如何生成含重复元素向量的所有唯一排列组合
Matlab获取含重复元素向量的所有不重复排列
Matlab没有专门直接输出「含重复元素的唯一排列」的单条内置命令,但组合两个自带函数就能一行代码实现需求,不需要额外编写复杂的递归或循环逻辑:
- 首先用内置的
perms()函数生成输入向量的所有全排列,这一步因为向量内存在重复元素,输出的矩阵会包含大量重复的排列行 - 再用内置的
unique()函数搭配'rows'参数,对全排列结果按行去重,最终得到的就是所有不重复的排列
对应你给出的测试向量,实现代码如下:
A = [1 1 2 2 2]; R = unique(perms(A), 'rows');
运行上述代码得到的矩阵R共10行,和你给出的预期结果完全一致——这个数量也符合多重排列的计算公式:总排列数为5!/(2!*3!) = 10,对应2个1、3个2的所有不重复排布情况。
如果你的向量长度很长、元素重复率极高,perms生成全量排列会占用较多内存,这种场景可以自行实现多重集排列的生成逻辑,但对于常规长度的向量,上述写法是最简洁、不需要额外依赖的实现方案。
内容的提问来源于stack exchange,提问作者Jacqueline Atoche Bravo
相关产品推荐
相关产品推荐

