# Enumerative combinatorics

**Enumerative combinatorics** is an area of combinatorics that deals with the number of ways that certain patterns can be formed. Two examples of this type of problem are counting combinations and counting permutations. More generally, given an infinite collection of finite sets *S*_{i} indexed by the natural numbers, enumerative combinatorics seeks to describe a *counting function* which counts the number of objects in *S*_{n} for each *n*. Although counting the number of elements in a set is a rather broad mathematical problem, many of the problems that arise in applications have a relatively simple combinatorial description. The twelvefold way provides a unified framework for counting permutations, combinations and partitions.

The simplest such functions are *closed formulas*, which can be expressed as a composition of elementary functions such as factorials, powers, and so on. For instance, as shown below, the number of different possible orderings of a deck of *n* cards is *f*(*n*) = *n*!. The problem of finding a closed formula is known as algebraic enumeration, and frequently involves deriving a recurrence relation or generating function and using this to arrive at the desired closed form.

Often, a complicated closed formula yields little insight into the behavior of the counting function as the number of counted objects grows. In these cases, a simple asymptotic approximation may be preferable. A function is an asymptotic approximation to if as . In this case, we write

## Generating functions

Generating functions are used to describe families of combinatorial objects. Let denote the family of objects and let *F*(*x*) be its generating function. Then

where denotes the number of combinatorial objects of size *n*. The number of combinatorial objects of size *n* is therefore given by the coefficient of . Some common operation on families of combinatorial objects and its effect on the generating function will now be developed.
The exponential generating function is also sometimes used. In this case it would have the form

Once determined, the generating function yields the information given by the previous approaches. In addition, the various natural operations on generating functions such as addition, multiplication, differentiation, etc., have a combinatorial significance; this allows one to extend results from one combinatorial problem in order to solve others.

### Union

Given two combinatorial families, and with generating functions *F*(*x*) and *G*(*x*) respectively, the disjoint union of the two families () has generating function *F*(*x*) + *G*(*x*).

### Pairs

For two combinatorial families as above the Cartesian product (pair) of the two families () has generating function *F*(*x*)*G*(*x*).

### Sequences

A (finite) sequence generalizes the idea of the pair as defined above. Sequences are arbitrary Cartesian products of a combinatorial object with itself. Formally:

To put the above in words: An empty sequence or a sequence of one element or a sequence of two elements or a sequence of three elements, etc. The generating function would be:

## Combinatorial structures

The above operations can now be used to enumerate common combinatorial objects including trees (binary and plane), Dyck paths and cycles. A combinatorial structure is composed of atoms. For example, with trees the atoms would be the nodes. The atoms which compose the object can either be labeled or unlabeled. Unlabeled atoms are indistinguishable from each other, while labelled atoms are distinct. Therefore, for a combinatorial object consisting of labeled atoms a new object can be formed by simply swapping two or more atoms.

### Binary and plane trees

Binary and plane trees are examples of an unlabeled combinatorial structure. Trees consist of nodes linked by edges in such a way that there are no cycles. There is generally a node called the root, which has no parent node. In plane trees each node can have an arbitrary number of children. In binary trees, a special case of plane trees, each node can have either two or no children. Let denote the family of all plane trees. Then this family can be recursively defined as follows:

In this case represents the family of objects consisting of one node. This has generating function *x*. Let *P*(*x*) denote the generating function .
Putting the above description in words: A plane tree consists of a node to which is attached an arbitrary number of subtrees, each of which is also a plane tree. Using the operation on families of combinatorial structures developed earlier, this translates to a recursive generating function:

After solving for *P*(*x*):

An explicit formula for the number of plane trees of size *n* can now be determined by extracting the coefficient of *x*^{n}:

Note: The notation [*x*^{n}] *f*(*x*) refers to the coefficient of *x*^{n} in *f*(*x*).
The series expansion of the square root is based on Newton's generalization of the binomial theorem. To get from the fourth to fifth line manipulations using the generalized binomial coefficient is needed.

The expression on the last line is equal to the (*n* − 1)^{st} Catalan number. Therefore, *p*_{n} = *c*_{n−1}.