matlab中全排列的问题,matlab中全排列的问题 10

2020-11-17 21:36:42 字数 6575 阅读 9994

1楼:功诚蹉燕

perms

产生所有可能的排列语法p

=perms(v)p=

perms(v),这里v是一个长度为n的行向量,此函数产生v中这n个元素的全排列矩阵,每行为一个排列。矩阵p包含有n!

2楼:真

clear;clc

n=4;

m=3;

x=nchoosek(1:n,m);

y=cell2mat(arrayfun(@(k)perms(x(k,:)),1:nchoosek(n,m),'uniformoutput',0)')

z=nchoosek(n,m)*prod(1:m)

matlab的全排列问题

3楼:匿名用户

哈哈,我用的是"递增进位制数法"(方法源自网上)**如下:

%%%%%%%%%%%%以下计算出新的排列%%%%%%%%%%%%%%% author by wacs5

%% 排列的总个数为n!

%% 在指定位置插入**即可

%clc

%clear

n=3;

n_1=prod(1:n);

allorder_k=zeros(1,n-1);

ticfor allorder_m=1:n_1 %产生n!个排列

allorder_flag=zeros(1,n);

allorder_p=zeros(1,n);

for allorder_i=1:n-1

position=n-allorder_k(allorder_i);

allorder_j=n;

while(allorder_j>=position)if (allorder_flag(allorder_j)==1)position=position-1;

endallorder_j=allorder_j-1;

endallorder_p(position)=n+1-allorder_i;

allorder_flag(position)=1;

endfor allorder_i=1:nif (allorder_flag(allorder_i)==0)allorder_p(allorder_i)=1;

break;

endend

%%%%以下更新k

for allorder_i=1:n-1

allorder_k(n-allorder_i)=mod(allorder_k(n-allorder_i)+1,allorder_i+1);

if (allorder_k(n-allorder_i)~=0)break;

endend

%%%下面,可以引用allorder_p进行相关处理allorder_p

endtoc

matlab 全排列问题

4楼:匿名用户

用笨办法直接编程的 不知道有没有现成的函数 你可以再查一下 数组b就是你要求的结果

a=[1 2 3 4];

e=1;

for i=1:4

for j=1:4

for l=1:4

b(e)=a(i)*100+a(j)*10+a(l);

e=e+1;

endend

endb

在matlab中、如何进行全排列

5楼:匿名用户

a=perms([1 2 3 4 5 0 0]);

a1=find(a(:,1)==0);a2=find(a(:,7)==0);

aa=union(a1,a2);

a(aa,:)=;

da=diff(a,1,2);

[i,j]=find(da==0);

a(i,:)=;

matlab排列组合问题

6楼:匿名用户

1、数据都是[n1 n2]这种形式?比如n=10,对应的就是[101 102]?

2、最后这句话【从这些数列中选取4个然后从选取的4个数列中任选一个列出所有的排列组合】不明确,详细说明一下。

matlab 排列组合问题 ,**等~

7楼:匿名用户

这是最容易理解的方法了,虽然复杂点

a =[3 0 1 1 2 3 0;

4 3 6 3 1 6 6;

5 6 3 7 3 2 2];

b=for i1=1:3

for i2=1:3

for i3=1:3

for i4=1:3

for i5=1:3

for i6=1:3

for i7=1:3

b=[b;[a(i1,1) a(i2,2) a(i3,3) a(i4,4) a(i5,5) a(i6,6) a(i7,7)]];

endend

endend

endendend

8楼:匿名用户

依照下面的方法,你可以实验一下。

matlab做排列组合:比如要abcd的全排列,可以用perms函数

perms(['abcd'])运行结果

dcba

dcab

dbca

dbac

dabc

dacb

cdba

cdab

cbda

cbad

cabd

cadb

bcda

bcad

bdca

bdac

badc

bacd

acbd

acdb

abcd

abdc

adbc

adcb

以下是几个常用的排列、组合与阶乘等函数。

1、***bntns(x,m)

列举出从n个元素中取出m个元素的组合。其中,x是含有n个元素的向量。

2、perms(x)

给出向量x的所有排列。

3、nchoosek(n,m)

从n各元素中取m个元素的所有组合数。 nchoosek(x,m)从向量x中取m个元素的组合

4、factorial(n)

求n的阶乘。

5、prod(n:m) %求排列数:m*(m-1)*(m-2)*…*(n+1)*n prod(1:2:2n-1)或prod(2:2:2n) %

求(2n-1)!!或(2n)!!

6、cumprod(n:m)

输出一个向量[n n*(n+1) n(n+1)(n+2) … n(n+1)(n+2)…(m-1)m]

7、gamma(n)

求n!8、v='n!';

vpa(v)

更详细资料如下:

nchoosek

binomial coefficient or all ***binations

syntax:

c = nchoosek(n,k)

函数描述: 从 n 个元素中 一次选 k 个元素的所有组合数 c(注意,c是一个数值)。

c = n!/((n–k)! k!);

c = nchoosek(v,k)

函数描述: 从 向量 v 中 一次选其中 k 个元素 的所有组合 c (注意:c是一个矩阵,列

数 为 k )

matlab里,特定位置的排列组合问题 10

9楼:穆萨去**

这个问题可以这样解决,增加一个meshgrid()函数,即 x=linspace(0,3,6); y=linspace(0,3,6); [x,y]=meshgrid(x,y) z=4*(x-1).^2-(y+1).^2 运行结果

10楼:尉易壤驷茂典

1、数据都是[n1

n2]这种形式?比如n=10,对应的就是[101102]?

2、最后这句话【从这些数列中选取4个然后从选取的4个数列中任选一个列出所有的排列组合】不明确,详细说明一下。

matlab全排列 急!!

11楼:匿名用户

你的这个是2行11列,要全排列方式为;首先要定义这个矩阵才行。

perms(a(1,:))和perms(a(2,:)),举个例子吧:

a=[1 2 3;4 5 6]

a =1 2 3

4 5 6

>> perms(a(1,:))

ans =

3 2 1

3 1 2

2 3 1

2 1 3

1 2 3

1 3 2

>> perms(a(2,:))

ans =

6 5 4

6 4 5

5 6 4

5 4 6

4 5 6

4 6 5

我相信你明白了,呵呵。

12楼:廖鲜于白霜

function strc=funstr2(str1,str2)clc,

%检验参数是否是字符串

ls1=length(str1);

for i=1:ls1

if ~ischar(str1(i))

error('input must be string');

endend

ls2=length(str2);

for i=1:ls2

if ~ischar(str2(i))

error('input must be string');

endend

slen=ls1+ls2;

a=nchoosek(1:slen,ls1);

[m,n]=size(a);

a1=zeros(m,slen);

for i=1:m

for j=1:n

a1(i,a(i,j))=1;

endend

strc=cell(m,1);

for ir=1:m

ic=1;

i1=0;

i2=0;

output=;

while ic<=slen;

if(i1<=ls1)&(a1(ir,ic)==1);

i1=i1+1;

output(ic)=str1(i1);

else if (i2<=ls2)&(a1(ir,ic)==0)i2=i2+1;

output(ic)=str2(i2);

endendic=ic+1;

endstrc=char(output);end

用matlab 解决m=[-1,-1......,1,1...]的全排列问题,其中1和-1等概率 10

13楼:匿名用户

n=8;

n_1=prod(1:n);

allorder_k=zeros(1,n-1);

ticfor allorder_m=1:n_1 %产生n!个排列

allorder_flag=zeros(1,n);

allorder_p=zeros(1,n);

for allorder_i=1:n-1

position=n-allorder_k(allorder_i);

allorder_j=n;

while(allorder_j>=position)

if (allorder_flag(allorder_j)==1)

position=position-1;

endallorder_j=allorder_j-1;

endallorder_p(position)=n+1-allorder_i;

allorder_flag(position)=1;

endfor allorder_i=1:n

if (allorder_flag(allorder_i)==0)

allorder_p(allorder_i)=1;

break;

endend

%%%%以下更新k

for allorder_i=1:n-1

allorder_k(n-allorder_i)=mod(allorder_k(n-allorder_i)+1,allorder_i+1);

if (allorder_k(n-allorder_i)~=0)

break;

endend

%%%下面,可以引用allorder_p进行相关处理,你的原始数组为data,你可以用data进行引用

%%如果输出的话,比较耗时间,如果不输出的话,10!大约是30秒左右

allorder_p;

endtoc