Wikipedia:Reference desk/Archives/Mathematics/2021 October 12

Mathematics desk
< October 11 << Sep | October | Nov >> Current desk >
Welcome to the Wikipedia Mathematics Reference Desk Archives
The page you are currently viewing is a transcluded archive page. While you can leave answers for any questions shown below, please ask new questions on one of the current reference desk pages.


October 12

edit

Combinatorial algorithms

edit

For a given natural number k, and a given set S, is there an algorithm - generating all subsets of S, each of which is - a k-combination - i.e. containing k elements of S?

I suspect Wikipedia does not give any information about that algorithm (which I guess is recursive) 84.228.239.160 (talk) 11:10, 12 October 2021 (UTC)[reply]

Of course there is one; see Combination § Enumerating k-combinations. Given a set of sets   and an element  , let   be defined as:
  For example,  
Let   denote the set of  -combinations of elements of  . The following is an explicit recursive function definition.
 
 
 
--Lambiam 12:23, 12 October 2021 (UTC)[reply]
Thanks. If k is not given in advance, and I want to generate all subsets of a given set S, should your algorithm be used for generating all k-combinations of S for every (whole non-negative) k not larger than the number of elements of S? or there is a simpler algorithm for that? 84.228.239.160 (talk) 13:07, 12 October 2021 (UTC)[reply]
(I've made a correction to the last clause by replacing   by   which avoids an infinite loop in case  ) To get all subsets, just ignore the subscripts controlling the size, as follows:
 
 
--Lambiam 19:03, 12 October 2021 (UTC)[reply]
Here is a Next Subset algorithm (in Fortran, I think) - you can call it until you get all subsets. When I need to get all subsets, I often do it like counting from 0 to 2n in binary. For instance when it gets to 11002, take the third and fourth members of the set. Also, see several implementations at Rosetta code. Bubba73 You talkin' to me? 04:27, 13 October 2021 (UTC)[reply]

OP's comment: Thank y'all. I thought the algorithm should be recursive, but after reviewing all the suggestions you have put forward, I used the common idea behind all of them - to build a non-recursive algorithm which I found most comfortable for me. 84.228.239.160 (talk) (UTC) 19:56, 13 October 2021 (UTC)[reply]