Courses I have taught:
Since 2006 at UOIT
Principles of Computer Science
- Advanced object oriented programming techniques
- Introduction to time and space complexity of algorithms
- Elementary data structures: linked list, hash table
- Trees: search trees, AVL trees, and heaps.
- Elementary algorithms: sorting, searching, recursion.
- Complexity analysis of algorithms
- Matrices, numerical algorithms and numerical stability
- System programming using C, Java and Python.
- File systems, processes, threads
- Multi-language integration with Java Native Interface
- Interprocess communication using pipes, sockets and shared memory.
- Graphical user interface using Java Swing
- UNIX shell and scripting
- Build environment: compiler, make, ant, IDE, version control
- Digital logic
- Digital circuits
- Computer architecture: ALU, memory, CPU, bus, secondary storage
- Assembly programming
- Operating system design
- Optimization in hardware: caching, pipelining
- Relational data model
- Integrity constraints and relational normal forms.
- Relational algebra and its extensions
- SQL
- Query evaluation and optimization
- Indexes
- Semistructured data model
- XQuery
- Embedded databases
- Computational complexity classes
- Comparative sorting algorithms and their fundamental limit
- Linear sorting algorithms
- Searching and indexing using data structures: AVL and B-tree
- Dynamic programming algorithms: string edit distance
- Greedy algorithms: data compression by Huffman coding
- Elementary graph search: AI puzzle solvers
- Graph algorthms: shortest path, network flow and spanning trees
- Intractability of NP-hard problems: P versus NP
- Approximation algorithms of NP-complete problems
Interested at studying at UOIT?
Visit the UOIT web site
for complete course listings.
Computer Science is part of the Faculty of Science .