File Exchange

image thumbnail


version (2.1 KB) by Darren Rowland
Obtain a single combination of N numbers taken K at a time.

1 Download

Updated 22 Feb 2009

View License

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.

NCHOOSEK(1:4,3) =
[ 1 2 3
1 2 4
1 3 4
2 3 4 ]

onecomb(4,3,3) =
[ 1 3 4 ]

Cite As

Darren Rowland (2021). ONECOMB (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (6)

Alphan Sahin

An update for the reverse function:

N = 50;
K = 6;
M = 498
m = onecomb(N,K,M);

% Reverse
m = fliplr(m)
Mreverse = nchoosek(N,K);
for i = 1:K
if N-m(i)>=i
Mreverse = Mreverse - nchoosek(N-m(i),i);

Alphan Sahin

Very useful. M can be obtained from the combination as follows:

clear all
close all

N = 50;
K = 6;
M = 498
m = onecomb(N,K,M)

% Reverse
m = fliplr(m);
Mreverse = nchoosek(N,K);
for i = 1:K
Mreverse = Mreverse - nchoosek(N-m(i),i);


Very useful!

What's about reverse function converting conbination to its index?

Husam Aldahiyat

Very useful submission, well written.

Rob Campbell

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
ans =
>> tic, for i=1:1E4;NCHOOSEK(1:10,5);end,toc/1E4
ans =

The 1 star review seems to have missed the point.

Darren Rowland

@ Marco/PXlab

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.

MATLAB Release Compatibility
Created with R14
Compatible with any release
Platform Compatibility
Windows macOS Linux

Inspired: MATLAB PPT

Community Treasure Hunt

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

Start Hunting!