comb = ONECOMB(N,K,M) returns the M-th combination of the sorted list of all combinations from NCHOOSEK.
Makes use of a fast algorithm for the generation of a single combination.
[ 1 2 3
1 2 4
1 3 4
2 3 4 ]
[ 1 3 4 ]
What's about reverse function converting conbination to its index?
Very useful submission, well written.
This well coded and does what it says. Can be substantially faster than nchoosek. For example:
>> tic, for i=1:1E4;onecomb(10,5,5);end,toc/1E4
>> tic, for i=1:1E4;NCHOOSEK(1:10,5);end,toc/1E4
The 1 star review seems to have missed the point.
It is exactly correct that this function with call structure
C1 = onecomb(N,K,M)
returns the same result as
AC = nchoosek(N,K);
C2 = AC(M,:)
The advantage of this function is that the intermediate array AC is not computed by ONECOMB. The array AC can be immensely large for large N and K approx N/2, and is a waste to compute if one only requires a small number of combinations from the total.
Additionally, if one requires many combinations, my testing (not included here but simple to duplicate) showed that the time to compute all the combinations using NCHOOSEK was approximately the same as computing all the combinations one-at-a-time using ONECOMB.