skip to main content

CS 374 -

Summer 2020

Official Description

Analysis of algorithms, major paradigms of algorithm design including recursive algorithms, divide-and-conquer algorithms, dynamic programming, greedy algorithms, and graph algorithms. Formal models of computation including finite automata and Turing machines. Limitations of computation arising from fundamental notions of algorithm and from complexity-theoretic constraints. Reductions, undecidability and NP-completeness. Course Information: Same as ECE 374. Prerequisite: CS 225.

Learning Goals

Be able to design regular expressions, finite automata or conftext free languages from a given language specification . (1), (3), (6)
Be able to prove that a given language is not regular (3)(6)
Be able to analyze the asymptotic running time of an algorithm via sums and recurrences (3)(6)
Model an algorithmic problems via graphs and apply appropriate graph algorithm to yield a solution (1)(3)(6)
Given problem specification, design efficient algorithms via techniques such as recursion, divide and conquer, dynamic programming and greedy (1)(3)(6)
Be able to prove the correctness of an algorithm by induction or via reductions (3)(6)
Prove NP-hardness via polynomial-time reductions from known NP-hard problems (3)(6)
Prove a language undecidable via reduction from known undecidable problems such as Halting. (3)(6)

Topic List


  • Strings and languages
  • Finite automata (DFA, NFA) and regular expressions
  • Context free grammars and languages


  • Recursion, Divide and conquer, Backtracking
  • Dynamic programming
  • Greedy
  • Basic graph algorithms: reachability, BFS, DFS, shortest paths, MST, modeling via graphs

NP Completness

  • Polynomial-time reductions, P, NP, NP-Complete, NP-Hard

Turing Machines (TMs)

  • Universal TM, RAM, decidability, undecidability, Church-Turing thesis

Required, Elective, or Selected Elective


Last updated

3/26/2019by Elsa Gunter