Effacer les filtres
Effacer les filtres

All possible permutation of a given vector.

6 vues (au cours des 30 derniers jours)
luca
luca le 23 Juil 2019
Modifié(e) : Stephen23 le 23 Juil 2019
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 commentaire
Rik
Rik le 23 Juil 2019
I suspect there are two options:
  1. looping through your array (from end to beginning) and remove all rotations (use circshift)
  2. design your own implementation of perms that avoids rotations
Neither is likely to be fast, and the first will also require the generation of a very large array for slightly larger vectors.

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 23 Juil 2019
Modifié(e) : Stephen23 le 23 Juil 2019
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:
  1 commentaire
luca
luca le 23 Juil 2019
thanks for helping me !

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Dates and Time dans Help Center et File Exchange

Produits


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by