Here are some basic combinatorial functions.
Random subsets and random tuples:
RandomSubsetIndices(n) -- returns a random subset of {0,1,2...,n-1}
RandomSubsetIndices(n,r) -- returns a size r random subset of {0,1,2...,n-1}
RandomTupleIndices(n,r) -- returns a random r-tuple from {0,1,2,...,n-1}
Notes:
n indicates the range {0,1,2,...,n-1} so that the integers produced are valid indices into a C++ vector of size n.
vector<long>
The algorithm for RandomSubsetIndices(n,r) was taken from the
Wikipedia page on "Reservoir Sorting".
Ugly fn names RandomSubsetIndices and RandomTupleIndices
2015