Discrete mathematics is the branch of mathematics that studies the enumeration and other properties of finite or discrete structures. Its main branches include enumerative combinatorics, graph theory, matroid theory, design theory, and discrete geometry, and the term is sometimes used for combinatorics as a whole. With the growth of computer science it has found wide application in data analysis, cryptography, coding theory, and various optimization problems.