This theory studies the complexity of algorithms and problems in terms of time, space, and other resources required for their computation. It is concerned with the classification of computational problems into classes based on the resources they require.