This book studies exponential time algorithms for NP-hard problems. In this modern area, the aim is to design algorithms for combinatorially hard problems that execute provably faster than a brute-force enumeration of all candidate solutions. After an introduction and survey of the field, the text focuses first on the design and especially the analysis of branching algorithms. The analysis of these algorithms heavily relies on measures of the instances, which aim at capturing the structure of the instances, not merely their size. This makes them more appropriate to quantify the progress an algorithm makes in the process of solving a problem. Expanding the methodology to design exponential time algorithms, new techniques are then presented. Two of them combine treewidth based algorithms with branching or enumeration algorithms. Another one is the iterative compression technique, prominent in the design of parameterized algorithms, and adapted here to the design of exponential time algorithms. This book assumes basic knowledge of algorithms and should serve anyone interested in exactly solving hard problems.