This document describes the material covered by each of the sufficiency examinations.

Overview

Each sufficiency examination assesses the students learning to see if it is sufficient for the course’s learning outcomes. Students can take the sufficiency examination just before their first semester in the professional masters track of the Computer Science masters degree.

This document describes the material covered by each of the courses listed in the Undergraduate Requirements for the Professional Track.

CS 317: Discrete Information Structures


Topics: logic, sets, functions, proofs, mathematical induction, counting, binomial coefficients and identities, discrete probability, basic graph theory.

Suggested Text: Kenneth Rosen, Discrete Mathematics and its Applications, 7th ed., McGraw-Hill, 2012. Chapters 1, 2.1-2.3, 5.1, 5.2, 6.1-6.5, 7, 10.

CS 351: Data Structures and Algorithms


Topics: objects, recursion, exceptions, container ADTs, dynamic arrays, iterators, linked lists, generic classes, stacks, queues, binary search trees, graphs (depth-first and breadth-first search), hashing, sorting, min-heaps.

Suggested Text: Michael Main. Data Structures and Other Objects Using Java, 4th ed., Addison-Wesley. 2011.

CS 431: Programming Language Concepts


Topics: Syntax, BNF grammar, language systems, types, scopes, memory location for variables, polymorphism, memory management, parameter passing, formal semantics, functional programming (ML language, pattern matching, higher order functions, data types), object-oriented programming (classes, abstract classes and interfaces, iterators, subtype polymorphism).

Suggested Text: Adam Webber. Modern Programming Languages: A Practical Introduction, Franklin, Beedle and Associates, 2013. Chapters 1—18.

CS 535: Algorithms Design and Analysis

Topics: asymptotic notation, solving recurrence relations, stacks, queues, vectors, lists, trees, priority queues and heaps, hashing, binary search trees (including AVL trees and red black trees), sorting and selection, structures/algorithms for disjoint sets, algorithm design techniques (the greedy method, divide and conquer, recursion, dynamic programming), graph algorithms (including minimum spanning tree algorithms and shortest path algorithms).

Suggested Texts:

  • Michael Goodrich and Roberto Tamassia, Algorithm Design, John Wiley and Sons Inc., 2002. Chapters 1.1-1.4, 2 to 7.
  • Sanjoy Dasgupta, Christos Papadimitriou and Umesh Vazirani, Algorithms, 2008. Chapters 0, 2 to 6.

CS 537: Operating Systems

Topics: Process management including process creation, switching, multithreading, scheduling, communication and concurrency control; memory management including paging, segmentation and virtual memory; Systems programming.

Suggested Texts:

  • William Stallings. Operating Systems: Internals and Design Principles, 7th ed.
  • Kay A. Robbins, Steve Robbins, UNIX Systems Programming: Communication, Concurrency and Threads, Prentice Hall; 2nd Revised edition (June 27, 2003) (Available on Safari Online)
  • Allen Downey. The Little Book of Semaphores (Open Source Textbook)

Last updated: 2026-08-17