MATLAB: How to obtain discernable permutations of a vector

discernablepermutations

Hi everyone,
I have the following problem : let's say I have the vector v=(1,1,1,0,0) and I want to generate the permutations of this vector. The problem is, if I simply use perms(v), matlab is going to generate many degenerate vectors because it does not understand that the elements of my vector are similar (so for instance I will have like ten exemplars of (1,0,1,1,0) , then ten of (0,1,1,1,0), etc). Of course I can easily make a code that gets rid of those degenerate vectors, but it is very time consuming when the length of the vector gets bigger.
Thank you for your help guys.
Alex.

Best Answer

In your particular example, (1,1,1,0,0), the number of possible distinct permutations is 5!/3!/2! = 10 (corrected), and these can be generated using matlab's 'nchoosek' function. In general if there are a copies of one number, b of another number, c of another, d of another, etc., the total number of distinct permutations will be (a+b+c+d+...)!/(a!*b!*c!*d!*...). In Answers #69232, #84215, and #140986, as well as newsgroup #337667, I have given examples of ways of calling on 'nchoosek' to solve problems of this kind.