Computer Science Curriculum

  • EECS 328 - Numerical Methods for Engineers

    CATALOG DESCRIPTION:Introduction to numerical methods; numerical differentiation, numerical integration, solution of ordinary and partial differential equations. Students write programs in C++, FORTRAN, C, or Matlab using methods presented in class.

  • EECS 335 - Introduction to the Theory of Computation

    CATALOG DESCRIPTION:This course gives an introduction to the mathematical foundations of computation. The course will look at Turing machines, universal computation, the Church-Turing thesis, the halting problem and general undecidability, Rice’s theorem, the recursion theorem, efficient computation models, time and space (memory) bounds, deterministic and nondeterministic computation and their relationships, the P versus NP problem and hard problems for NP and beyond.

    Note:This course will replace Math 374 (Theory of Computability and Turing Machines) which is listed as a recommended way to fulfill the undergraduate theory breadth requirement in CS but hasn’t been taught in several years. The Math department is happy to give it up.


  • EECS 336 - Design and Analysis of Algorithms

    CATALOG DESCRIPTION:Algorithm design and analysis is fundamental to all areas of computer science and gives a rigorous framework for the study optimization. This course provides an introduction to algorithm design through a survey of the common algorithm design paradigms of greedy optimization, divide and conquer, dynamic programming, network flows, reductions, and randomized algorithms. Important themes that will be developed in the course include the algorithmic abstraction-design-analysis process and computational tractability (e.g., NP-completeness).


  • EECS 356 - Introduction to Formal Specification and Verification

    CATALOG DESCRIPTION: Introduction to formal techniques used for system specifications and verifications: temporal logic, set theory, proofs, and model checking. TLA+ (Temporal Logic of Actions) specifications. Safety and liveness properties. Real time specs and verifications.

  • EECS 357 - Introduction to VLSI CAD

    CATALOG DESCRIPTION: Basic concepts in VLSI CAD with emphasis on physical design, fundamental algorithms for CAD problems, development of CAD tools.

  • EECS 395/495 - Algorithmic Techniques for Bioinformatics


  • EECS 395/495 - Computational Geometry

    CATALOG DESCRIPTION:After a brief introduction to numerical computation issues, the course will continue with a sequence of canonical problem settings (e.g., Intersections; Arrangements/Duality), mostly focusing on the combinatorial aspects of the algorithms and the impact of the data structures. Each part will be casted in respective applications settings (GIS; Motion Planning; etc). The last part of the course will present several potpourri-like topics, e.g., Skeletons/Medial Axis; Davenport-Shinzel sequences.

    • This course fulfills the AI Depth & Theory Depth requirement.
  • EECS 399 - Independent Study

    CATALOG DESCRIPTION:Independent Study (can be taken multiple times)

    • Approved for Systems Breadth and Depth in the CS curriculum in McCormick and Weinberg
    • This course satisfies the project requirement. 
  • EECS 428 - Information Theory

    CATALOG DESCRIPTION:  Information measures and their properties: entropy, divergence, mutual information, channel capacity. Shannon's fundamental theorems for data compression and coding for noisy channels. Applications in communications, statistical inference, probability, physics.

    Prerequisites by course: EECS 302 (Probabilities Systems and Random Signals).
    Prerequisites by topic: Good understanding of basic probability.  (A review of probability theory will be given in Week 1.)

    • This course fulfills the Theory Depth requirement.
  • EECS 457 - Advanced Algorithms

    CATALOG DESCRIPTION:Design and analysis of advanced algorithms: graph algorithms; maximal network flows; min-cost flow algorithms; convex cost flows.

  • EECS 459 - VLSI Algorithmics

    CATALOG DESCRIPTION: Introduction to advanced topics in synthesis and modeling of complex VLSI systems at behavioral and logic level. Topics include resource allocation, resource binding, scheduling, and controller design in high level synthesis, C to hardware compilation flows, logic synthesis, survey of stat-of-the-art in high level and system level design methods and tools.