1. Determines number of available unique permutations.
2. Computes a random set of unique permutations, containing the identity permutation.
MATLAB's "perms" is unsuitable for vectors longer than about 11 elements (where the output takes over 3GB). John D'Errico's "uniqueperms" is much better if there are relatively few unique permutations, but is not well suited to randomly sampling a small subset of a large number of unique permutations. On the other hand, repeated calls to randperm can produce duplicates.
"uperms" aims to fill the niche between these, and is ideal for use with statistical permutation testing algorithms (where it is helpful to know if the identity is or isn't present, hence the choice to guarantee it here; just ask for k+1 and use 2:end if you don't want the identity).
Some other routines are also included to provide faster solutions in special cases of permutation test: simple correlation (perms_m); one-sample t-test (signs_m); and two-sample t-test (nchoosek_m). See also: