Theoretical computer science is the study of the fundamental principles of computation under resource constraints. The two core branches are algorithms, which concerns techniques for the design and analysis of efficient algorithms for problems from various domains, and complexity, which is about classifying problems by their inherent difficulty and understanding the fundamental limits of efficient computation. Satellite branches form the theoretical foundations of many other areas of computer science by providing formal models, codifying intuitions, and rigorously analyzing problems from these areas.
Our research group studies problems of central importance in algorithms and complexity, as well as more application-oriented areas such as computational geometry, biomolecular computing, and communication complexity. We also collaborate with other research groups both inside and outside the Computer Science Department.