matlab如何实现任意长序列所有排列方式

最近被问到一个问题,如何计算一个由3个0和3个1组成的序列的所有组合情况,处理这个问题我没有找到特别恰当的函数(如果有能直接做的函数欢迎评论告知),所以采用比较接近需求的perms函数来解决这个问题

首先看perms函数的定义,matlab官网是这么说的:

那么这个函数是列出了指定序列的所有可能排列,简单来说是考虑了元素顺序,但显然我们的三个0和三个1都是一样的,这就导致了perms函数生成的二维数组比我们实际需要的二维数组大得多,直接使用perms函数会得到一个720*6的二维数组

可以看出这里面是有很多重复项的,我们找排列实际上就是找一个C63=20,不过这里面已经完全包含了我们想要的信息,所以只要继续对这个数组稍做处理即可,这里我用到了isequal函数 来比较每一维序列,它的定义如下:

通过两个for循环就能滤掉这个二维数组中的重复项,得到我们需要的信息,下面是我的具体代码:

matlab 复制代码
clc
clear

v = [0 0 0 1 1 1]; % 1x5 vector with three 0s and two 1s
p = perms(v); % 10x5 matrix with all permutations of v
[r,l]=size(p);
tru=zeros(20,6);


for i=1:r
    for j=i+1:r
        if isequal(p(i,:),p(j,:))
            p(j,:)=[0 0 0 0 0 0];
        end
    end
end

k=1;
for i=1:r
    if ~isequal(p(i,:),[0 0 0 0 0 0])
        tru(k,:)=p(i,:);
        k=k+1;
    end
end

最后也是成功得到了需要的二维数组:

我觉得这个方法还是有些复杂,应该会有直接计算的函数,但是一直没找着,如果有知道的读者也可以告诉我呀。

相关推荐
2zcode2 小时前
基于MATLAB元胞自动机(CA)的AZ80A镁合金动态再结晶(DRX)过程模拟
开发语言·matlab·动态再结晶
jiushiapwojdap3 小时前
LU分解法求解线性方程组Matlab实现
数据结构·其他·算法·matlab
MATLAB代码顾问6 小时前
改进遗传算法(IGA)求解作业车间调度问题(JSSP)——附MATLAB代码
开发语言·matlab
米饭不加菜6 小时前
机器人矩阵运算MATLAB计算
matlab·矩阵·机器人
机器学习之心6 小时前
多智能体遗传算法(MAGA)优化最优投影方向的投影寻踪聚类评价,MATLAB代码
matlab·聚类·投影寻踪聚类评价
MATLAB代码顾问7 小时前
多种群协同进化算法(MPCE)求解大规模作业车间调度问题——附MATLAB代码
开发语言·算法·matlab
Evand J8 小时前
【MATLAB绘图教程】空间误差场图的概念及其应用,附代码
matlab·平面·绘图·定位
alphageek88 小时前
Matlab linspace函数完全指南:从基础用法到进阶技巧
开发语言·其他·matlab
xrgs_shz9 小时前
MATLAB 纹理特征提取:一文读懂 graycomatrix 与 graycoprops
人工智能·计算机视觉·matlab
2zcode11 小时前
基于MATLAB的深度学习工业表面缺陷多分类检测系统设计与实现(GUI界面+数据集+训练代码)
深度学习·matlab·分类