A computational problem can be solved by designing and implementing an algorithm for it, or by expressing it by a computer program in an intuitive modelling language that comes with software for processing programs written in the language. The latter is an example of what is called declarative problem solving and knowledge representation. I am interested in all aspects of declarative problem solving and paradigms, such as answer set programming, constraint programming, SMT solving, data access with ontology and rules, etc. My research typically focuses on semantic issues, computational properties, implementation strategies, and applications.
The first of two courses on algorithm design and analysis, with emphasis on fundamentals of searching, sorting, and graph algorithms. Examples include divide and conquer, dynamic programming, greedy methods, backtracking, and local search methods, together with analysis techniques to estimate program efficiency. Prerequisites: CMPUT 175 or 275 and CMPUT 272; one of MATH 100, 113, 114, 117, 134, 144, 154, or SCI 100.Winter Term 2022
A study of the theory, run-time structure, and implementation of selected non-procedural programming languages. Languages will be selected from the domains of functional, and logic-based languages. Prerequisites: CMPUT 201 and 204 or 275; one of CMPUT 229, E E 380 or ECE 212, and MATH 125.Winter Term 2022