フィルターのクリア

Permutation with repeating elements.

20 ビュー (過去 30 日間)
Sourov Kumar Mondal
Sourov Kumar Mondal 2022 年 10 月 16 日
編集済み: Bruno Luong 2022 年 10 月 16 日
Hello, greetings! I have the following array, A= 1:7. I want to get all the possible permutations of seven elements and I am trying to get my answer like this
ans =
1 2 3 4 5 6 7
1 2 5 3 4 7 6
2 3 4 5 1 7 6...... etc
It should be easy. But in the 'A' matrix, 1 and 2 indicates the simillar thing; 3 and 4 indicates the simillar thing; 5, 6, and 7 indicates the simillar thing. So, in the 'ans' 1 2 3 4 5 6 7 and 2 1 4 3 7 6 5 will be same. I want the code to return the values without repitating it. Is there any way to do this?
note: I want this code to do linear indexing. So, I can't replace A with any other matrix. It has to be 1:7.

採用された回答

Bruno Luong
Bruno Luong 2022 年 10 月 16 日
Just brute force of filter out what is considered as duplicated
g = [1 1 2 2 3 3 3];
x = 1:7;
p = perms(x);
[~,i] = unique(perms(g),'rows');
p = p(i,:);
p
p = 210×7
2 1 4 3 7 6 5 2 1 4 7 3 6 5 2 1 4 7 6 3 5 2 1 4 7 6 5 3 2 1 7 4 3 6 5 2 1 7 4 6 3 5 2 1 7 4 6 5 3 2 1 7 6 4 3 5 2 1 7 6 4 5 3 2 1 7 6 5 4 3
  5 件のコメント
Sourov Kumar Mondal
Sourov Kumar Mondal 2022 年 10 月 16 日
Thanks again for the answer!
Bruno Luong
Bruno Luong 2022 年 10 月 16 日
編集済み: Bruno Luong 2022 年 10 月 16 日
Simplify lperms
function p = lperms(x, k)
p = nchoosek(x,k);
p = reshape(p(:,perms(1:k)),[],k);
end

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

その他の回答 (1 件)

KSSV
KSSV 2022 年 10 月 16 日
A = {[1 2], [3 4], [5 6 7]} ;
iwant = perms(A)
iwant = 6×3 cell array
{[5 6 7]} {[ 3 4]} {[ 1 2]} {[5 6 7]} {[ 1 2]} {[ 3 4]} {[ 3 4]} {[5 6 7]} {[ 1 2]} {[ 3 4]} {[ 1 2]} {[5 6 7]} {[ 1 2]} {[5 6 7]} {[ 3 4]} {[ 1 2]} {[ 3 4]} {[5 6 7]}
  2 件のコメント
Sourov Kumar Mondal
Sourov Kumar Mondal 2022 年 10 月 16 日
Thanks for the answer. But this is keeping 1 and 2; 3 and 4; 5, 6, and 7 together always. The output I am looking for is just like normal permutations of 7 elements. but 1 and 2; 3 and 4; and 5,6 and 7 will behave like simillar elements. The no. of expected permutations would be (7! / (2! * 2! * 3!)). Is there any solution to this? thanks is advanced.
Sourov Kumar Mondal
Sourov Kumar Mondal 2022 年 10 月 16 日
Some expected outputs would be like this
1 3 5 7 6 4 2
1 4 3 5 6 2 7.... etc
But there won't be 2 3 5 7 6 1 because 1 and 2 are simillar

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

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by