Algorithms and Complexity: Topics in theoretical aspects of computer science being studied at Waterloo can be loosely categorized into two major areas: design and analysis of algorithms (including computational geometry, number theory, etc.), and models of computation and computational complexity (including Kolmogorov complexity, formal languages, parallel computation, etc.).
Artificial Intelligence: The research activities include natural language understanding and computational linguistics, knowledge representation and automated reasoning, planning, reasoning with uncertainty, user modelling, and data mining.
Bioinformatics: Research focusses on inference of evolutionary trees, target sequence search in drug design, sequence alignment, and tools for modeling sequence evolution and conducting simulation studies.
Computer Graphics: Most research within CGL falls into three interconnected activities: modelling of curves and surfaces; development of workstation-based tools for studying information visualization and interactive techniques in the human-computer interface; and the creation, reproduction and evaluation of high-quality colour imagery.
Databases: Research in database management is broad-based and has applications both to traditional relational databases and to non-standard databases that contain complex objects, geometric data, text, images, or real-time data.
Distributed Systems: Current research activities include management of distributed applications and systems, performance and quality of service in mobile computing environments, broadband systems and services in high-speed networks, and enabling technologies for distributed multimedia applications.
Programming Languages: Emphasis is placed on both practical implementations and theoretical investigations of new language constructs and designs, including light-weight concurrency, persistence, compiler tools and compilation schemes, and type systems and semantics.
Scientific Computation: Research is pursued on sparse matrix methods, unstructured mesh generation, scientific visualization, C++ implementations, and parallel computation. As a test bed for this research, the research group collaborates with modellers engaged in computations for finance, for goundwater transport and contamination remediation, for turbulent fluid dynamics, for semiconductor device simulation, and for other transport phenomena based on partial differential equations.
Software Engineering: Research activities concern problems of how to build, verify, modify and maintain large, complex software systems. Specific areas of investigation include: requirements engineering, software design methods, models, processes and reuse, software architecture, CASE tools, software visualization, design validation and verification, and program comprehension.
Symbolic Computation: Research concerns the design, analysis, and implementation of algorithms for symbolic computation, and algorithms for hybrid symbolic-numeric computation.
Text Management: The focus for activities has evolved from research in conventional databases, information retrieval, programming languages, and document management. Projects have involved the development of new approaches and algorithms for text database design, storage, compression, search, display, editing and transduction, with applications to personal and institutional document preparation, access to reference works and works of literature, distributed text management and management of software documents.
User Interfaces: The research into user interfaces interacts with work in software architecture, digital media, computer animation, economics, psychology, linguistics and fine arts. The main areas of research include user-interface software, digital media, studies of users and visualization.