How to get all possible permutations in binary format?

Hello, I want to get possible permutation of the vector v which actually contains a boolean values. Suppose the first permutation is v=[b2 b3 b1] . So it put the second column first then third column and finally the first colum and convert it into decimals
B=[0,1,0;0,0,1;1,1,0;0,1,1;1,0,1;1,0,0];
b1=B(:,1);
b2=B(:,2);
b3=B(:,3);
v=[b1 b2 b3];
c=perms(v);
final =bi2de(c)

2 件のコメント

Voss
Voss 2022 年 4 月 29 日
You say v is a vector, but in the code v is a matrix. And it's not clear why in the code you split the columns of matrix B into three separate variables b1, b2, and b3, only to recombine them into matrix v, so that v is the same as B.
B=[0,1,0;0,0,1;1,1,0;0,1,1;1,0,1;1,0,0];
b1=B(:,1);
b2=B(:,2);
b3=B(:,3);
v=[b1 b2 b3];
isequal(B,v)
ans = logical
1
Can you please clarify what exactly you want to do? You want all permutations of what exactly?
lilly lord
lilly lord 2022 年 4 月 29 日
v=[b1 b2 b3] I want to permute v ,for exapmle v=[b1,b3 b2] then v=[b3 ,b2,b1] and by doing so it actually takes the valurs for b1=B(:,1) etc. I need different decimal values after each permutation

サインインしてコメントする。

 採用された回答

DGM
DGM 2022 年 4 月 29 日
編集済み: DGM 2022 年 4 月 30 日

0 投票

I'm not sure, but are you thinking of something like this?
B = [0,1,0;0,0,1;1,1,0;0,1,1;1,0,1;1,0,0];
% all permutations of the columns of B
v = B(:,perms(1:size(B,2)));
v = reshape(v.',3,[]).'
v = 36×3
0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 0 1 1 0 0 0 0 0 0 1 0 1 0
% convert to dec
c = bi2de(v,'left-msb')
c = 36×1
1 4 4 1 2 2 6 0 1 2

3 件のコメント

lilly lord
lilly lord 2022 年 4 月 29 日
Is it possible store the result of each permutation (in decimal format) separately. when I extend this problem to large matrices like 8 columns (b1,-,-,b8) then definately the set of all permutations(8!) would be very large array.
DGM
DGM 2022 年 4 月 30 日
If you want to organize the results in something other than one long vector, you can represent the results for each permutation as columns of a numeric array:
B = [0,1,0;0,0,1;1,1,0;0,1,1;1,0,1;1,0,0];
v = B(:,perms(1:size(B,2)));
v = reshape(v.',3,[]).';
c = bi2de(v,'left-msb');
c = reshape(c,size(B,1),[]) % one column for each perm
c = 6×6
1 6 1 7 6 0 4 0 7 4 3 3 4 1 6 5 3 2 1 2 5 3 6 4 2 0 7 2 5 5 2 5 2 7 5 0
If you're thinking of making a bunch of dynamically-created variables for each vector, just don't. It would only make things slower and more problematic. For 8 columns, there are only 107520 permutations, so it's still manageable. You may find that the vast majority are nonunique.
lilly lord
lilly lord 2022 年 5 月 2 日
Thank you sir. YOur answer clearify the problem I am facing.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

質問済み:

2022 年 4 月 29 日

コメント済み:

2022 年 5 月 2 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by