matlab的全排列問題,matlab中全排列的問題

2021-03-04 00:47:16 字數 6231 閱讀 5331

1樓:匿名使用者

哈哈,我用的是"遞增進製數法"(方法源自網上)**如下:

%%%%%%%%%%%%以下計算出新的排列%%%%%%%%%%%%%%% 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中全排列的問題 10

2樓:功誠蹉燕

perms

產生所有可能的排列語法p

=perms(v)p=

perms(v),這裡v是乙個長度為n的行向量,此函式產生v中這n個元素的全排列矩陣,每行為乙個排列。矩陣p包含有n!

3樓:真

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 全排列問題

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 =[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

6樓:匿名使用者

依照下面的方法,你可以實驗一下。

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 解決m=[-1,-1......,1,1...]的全排列問題,其中1和-1等概率 10

7樓:匿名使用者

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

matlab排列組合問題

8樓:匿名使用者

1、資料都是[n1 n2]這種形式?比如n=10,對應的就是[101 102]?

2、最後這句話【從這些數列中選取4個然後從選取的4個數列中任選乙個列出所有的排列組合】不明確,詳細說明一下。

matlab全排列 急!!

9樓:匿名使用者

你的這個是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

我相信你明白了,呵呵。

10樓:廖鮮于白霜

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中、如何進行全排列

11樓:匿名使用者

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畫雙曲線的問題,關於matlab的問題,畫三個曲線

y5 到 y8 都有問題 比如y5吧,你的x是x 8 0.1 16 我們把 8帶入 y5 sqrt 負數 這個時候y5就是乙個複數啦,在圖上面表現出來就是零點那裡,其他的幾個是一樣的問題 你可以把這裡x改一下,不要從 8開始 從 7 3 0.5 x 0 開始 懂了沒?關於matlab的問題,畫三個曲...

matlab裡,特定位置的排列組合問題

這個問題可以這樣解決,增加乙個meshgrid 函式,即 x linspace 0,3,6 y linspace 0,3,6 x,y meshgrid x,y z 4 x 1 2 y 1 2 執行結果 1 資料都是 n1 n2 這種形式?比如n 10,對應的就是 101102 2 最後這句話 從這些...

排列組合問題,排列組合的問題

這麼理解把三男先綁在一起把三女也綁在一起這樣,就有2種組合然後三男,有p33排列方式即 3 2 1 6種三女也是一樣所以,最後答案為 2 6 6 72種 小豬儲錢罐有相同的100個5角硬幣,相同的80個1元硬幣,從中選出8個硬幣有9種方式 8個1元硬幣,1個5角7個1元,2個5角6個1元3個5角5個...