**1. Introduction**

Enumerating a finite set of objects is one of the most basic tasks that can be done by any person. Anybody begins to do it at first while learning the basic arithmetic operations at school. In a very general setting, to enumerate a finite set of things is to put in bijective relation a finite subset of the natural numbers with the things to be counted. As simple as it can be at first sight, the enumeration of things can become a very interesting mathematical activity when we start to count, for instance, in how many ways can we dispose or can we select the *n* elements of set in *k* places without repeating them, sometimes allowing repetitions of all of them, or just some of them, etc. That is the starting point of the combinatorics subject. Combinatorics is the field of discrete mathematics that allows us, among other things, to calculate in how many ways some objects can be selected or arranged to comply with any given property.

Within the topic of combinatorial analysis, there is a subfield that is interested in accurately predicting large structured configurations under the analytical method approach and that uses the tool known as generating functions. The analytic combinatorics is devoted to the study of finite structures whose construction follows a certain finite number of given rules. On the other hand, the use of generating

functions is a tool that allows to relate discrete analysis proper to discrete mathematics with continuous analysis.

allow to estimate an upper bound of that kind of enumeration problems. We take the enumeration of labeled trees as an example of combinatorial enumeration problem that can be solved in a closed mathematical form and make an overview of some different methods devised for that end in Section 4. In Section 5, we roughly describe how the generating functions can be used to solve graph enumeration problems. In Section 6, we take the problem of enumerating regular graphs as an example of a problem whose closed mathematical form is hard to obtain and apply the analytic combinatorics techniques for estimating an upper bound. In Section 7, I give an application of the combinatorial enumeration for proving the almost sure applicability of a node selecting criteria for controlling virus spreading in a complex network. Finally in Section 8, we make some comments about the possible future

applications of the combinatorial enumeration methods.

*Combinatorial Enumeration of Graphs DOI: http://dx.doi.org/10.5772/intechopen.88805*

of *combinatorial class* whose definition is as follows:

be defined as follows:

*A x*ð Þ¼ <sup>P</sup>*anx<sup>n</sup>* as follows:

form

**223**

function is defined, satisfying the following conditions:

i. The size of an element is a nonnegative integer.

ii. The number of elements of any given size is finite.

The notion of ordinary generating functions (OGF) as P<sup>∞</sup>

**3. Generating functions and analytic combinatorics overview**

In this section of the chapter, we are going to make a revision of the basic mathematical tools that have been developed and that facilitate the solution of many combinatorial enumeration problems. We are going to start with some basic conceptual definitions that can be found in many textbooks about this topic. In order to be able to clearly expose the mathematical tools used, it will be necessary to make use of some basic concepts about them that can be consulted more widely in texts such as [3]. One of these basic notions that can be found in [3] is the concept

Definition 1.1 A combinatorial class is a finite or denumerable set in which a size

On the other hand, it is necessary to know if two *combinatorial classes* are related in any way which can be determined using the concept of *isomorphism* and that can

Definition 1.2 The combinatorial classes A and B are said to be (combinatorially)

*<sup>i</sup>*¼<sup>0</sup> *aixi* where the

*:* (1)

isomorphic which is written A ffi B if and only if their counting sequences are identical. This condition is equivalent to the existence of a bijection from A to B that preserves size, and one also says that A and B are bijectively equivalent.

coefficients *ai* are elements of the sequence A ¼ f g *a*0*; a*1*;* … or combinatorial class A. This function is also the generating function of the numbers A*<sup>n</sup>*

whose sizes *an* ¼ cardð Þ A*<sup>n</sup>* such that the OGF of class A admits the combinatorial

*A x*ð Þ¼ <sup>X</sup>

one that allows to extract the coefficient of the term *xn* in the power series

*α*∈ A

This means that the variable *x* marks size in the generating function. The OGF form (1) can be easily interpreted by observing that the term *xn* occurs as many times as there are objects in A of size *n*. A basic operation that can be defined is the

*x*<sup>∣</sup>*α*<sup>∣</sup>

One of the most beautiful and ingenious applications of combinatorial enumeration is the probabilistic method. The probabilistic method is intimately related to the important role that randomness plays in the field of theoretical computer science. The utility and beauty of the probabilistic method consists of being an indirect or nonconstructive proof method. This method has been used successfully during the last 60 years and constitutes one of the most important scientific contributions of the great Hungarian mathematician Erdös [1, 2]. Commonly, this method has been used to prove the existence of a certain mathematical object by showing that if we choose some object of a given class in a random way, the probability that this mathematical object complies with certain property is greater than zero.

The probabilistic method has been used with great success to obtain important results in fields as diverse as number theory, combinatorics, graph theory, linear algebra, computational sciences, or information theory.

One aim of combinatorial analysis is to count the different ways of arranging objects under given constraints. Sometimes the structures to be counted are finite and some other times they are infinite. To enumerate is very important in many scientific fields because it allows to evaluate and compare different solutions to a given problem. For example, in computer science, if I want to compare different algorithms that solve a given kind of information processing problem, it is necessary to enumerate the number of steps taken by each one of them in the worst case and to choose the one whose performance is the best. The task of enumerating things can evolve in complexity to some point that the elementary arithmetical operations are not enough to reach the goal. For that reason many enumeration problems have inspired the most talented mathematicians for developing very ingenious methods for solving them. Some of these techniques for solving combinatorics enumeration problems are going to be exposed in the next section. One very interesting subject of the discrete mathematics is the graph theory. It is in the graph theory where many of the most interesting enumerations of graphs arise that have some given structural property that require the utilization of mathematical tools that facilitate the discovery of closed mathematical forms for the calculation of the number of graphs that accomplish some topological property. In this context it can be important to enumerate how many labeled graphs can be constructed with *n* vertex or how many connected graphs with *n* vertex exist, etc. For some of these problems, clever methods have been devised for their calculation that lead to closed mathematical forms by the use of generating functions. For other problems, it is very hard to obtain a closed mathematical form solution, and in that case some asymptotic methods have been developed for estimating a bound when the number of vertex is very large by means of the Cauchy theorem. These mathematical tools are going to be covered in the following sections of the present chapter.
