- looping through your array (from end to beginning) and remove all rotations (use circshift)
- design your own implementation of perms that avoids rotations
All possible permutation of a given vector.
4 次查看(过去 30 天)
显示 更早的评论
Given a vector, e.g [1 2 3 4 1], I would like to obtain all the possible permutations with NO REPETITION and NO ROTATION.
With
v = [1 2 3 4 1];
P = unique(perms(v),'rows');
I can avoid repetition but no rotation.
With rotation I mean that [1 2 1 4 3] and [2 1 4 3 1] are the same vector because the sequence is the same, just view from a different initial position.
I would like to be able to obtain all the possible combinations that avoid also this fact (rotation).
Thanks
1 个评论
Rik
2019-7-23
I suspect there are two options:
Neither is likely to be fast, and the first will also require the generation of a very large array for slightly larger vectors.
采纳的回答
Stephen23
2019-7-23
编辑:Stephen23
2019-7-23
V = [1,2,3,4,1];
N = numel(V);
% Permutations:
P = perms(V(2:N));
P(:,N) = V(1);
P = unique(P,'rows')
% Rotations:
R = P; % just to allow comparison.
X = hankel(2:N,[N,1:N-1]);
for k = size(R,1):-1:1
T = R(k,:);
if any(ismember(T(X),R,'rows'))
R(k,:) = [];
end
end
Giving a 12x5 matrix:
R =
1 2 3 4 1
1 2 4 3 1
1 3 2 4 1
1 3 4 2 1
1 4 2 3 1
1 4 3 2 1
2 1 3 4 1
2 1 4 3 1
2 3 1 4 1
2 4 1 3 1
3 1 4 2 1
3 2 1 4 1
See also:
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Orientation, Position, and Coordinate Systems 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!