## 1.3.6 Generating Partitions

INPUT OUTPUT

**Input Description:**
An integer *n*.

**Problem:**
Generate (1) all, or (2) a random, or (3) the next integer or set partitions
of length *n*.

**Excerpt from**
The Algorithm Design Manual:
There are two different types of combinatorial objects denoted by the term ``partition'', namely integer
partitions and set partitions. Although they are quite different beasts, it is a good idea to make both a part
of your vocabulary:

*Integer partitions *of *n* are sets of nonzero integers that add up to exactly *n*.
For example, the seven distinct integer partitions of 5 are {5}, {4,1}, {3,2}, {3,1,1}, {2,2,1}, {2,1,1,1},
and {1,1,1,1,1}. An interesting application I encountered that required the generation of integer partitions
was in a simulation of nuclear fission. When an atom is smashed, the nucleus of protons and neutrons is broken
into a set of smaller clusters. The sum of the particles in the set of clusters must equal the original size
of the nucleus. As such, the integer partitions of this original size represent all the possible ways to
smash the atom.
*Set partitions *divide the elements *1,\ldots,n* into nonempty subsets.
For example, there are fifteen distinct set partitions of *n=4*:
{1234}, {123,4}, {124,3},{12,34},{12,3,4},{134,2},{13,24},{13,2,4},{14,23},{1,234},{1,23,4},{14,2,3},{1,24,3},
{1,2,34}, and {1,2,3,4}. Several of the problems in this catalog return set partitions as results, such as
vertex coloring and connected components.

## Recommended Books

## Related Problems

This page last modified on 2008-07-10
.
www.algorist.com