Matlab 排列组合

1. n的阶乘:factorial(n)

n 为标量、向量、实数数组、非负整数。

2. 组合数:

2.1 nchoosek

n 取 m 的值(即二项式系数):nchoosek(n,m)

b = nchoosek(5,4);
% b = 5

向量 v 中一次取 k 个的所有可能:nchoosek(n,m)

v = 2:2:10;
C = nchoosek(v,4)
C = 5×4
    2     4     6     8
    2     4     6    10
    2     4     8    10
    2     6     8    10
    4     6     8    10
    
b = nchoosek(size(v,2),4);
b = 5

3. 排列数

3.1 perms(v) 向量不重复所有元素排列

v = [2 4 6];
P = perms(v)
P = 6×3
     6     4     2
     6     2     4
     4     6     2
     4     2     6
     2     6     4
     2     4     6

官方提示,length(v)<10 比较实用。

3.2 permn(v,n) 可重复抽取向量 v 中 n 个元素的所有可能

非matlab自带,需下载附加功能
在这里插入图片描述

b = permn([1,2,3],2)
b = 9x2
     1     1
     1     2
     1     3
     2     1
     2     2
     2     3
     3     1
     3     2
     3     3

3.2 其他遇见的问题

e.g. [0 0 0 1]四个数的排列问题

如果直接用 perms([0 0 0 1]), matlab 会把三个 0 当成不一样的元素。加上 unique 函数就可以了。

 perms([0 0 0 1])
 ans =
     1     0     0     0
     1     0     0     0
     1     0     0     0
     1     0     0     0
     1     0     0     0
     1     0     0     0
     0     1     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1
     0     0     1     0
     0     0     0     1
     0     1     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1
     0     0     1     0
     0     0     0     1
     0     1     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1
     0     0     1     0
     0     0     0     1
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 unique(perms([0 0 0 1]),"rows")
 ans =
     0     0     0     1
     0     0     1     0
     0     1     0     0
     1     0     0     0
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值