Applying theoretical knowledge about algorithms, data structures, and complexity to performing the complete process of analyzing a computational problem, estimating the running time of suggested solutions, and implementing an effective and correct program for the computational problem.