Lecture Summaries and Tutorial Exercises

Tutorial exercises

At the end of every week, a set of tutorial exercises will be posted for the following week. You will be expected to work on these exercises (either alone or in group) and to bring your solution ideas to tutorial, where your TA will discuss them with you.
All exercises will be plain text (ASCII) files, unless otherwise indicated.

  1. Week 1 (Sep 10–14) — no tutorial
  2. Week 2 (Sep 17–21): sample solutions.
  3. Week 3 (Sep 24–28): sample solutions.
  4. Week 4 (Oct 1–5): sample solutions.
  5. Week 5 (Oct 8–12) — no tutorial because of Thanksgiving; for evening section, lecture will be moved to 6-8 (in usual room).
  6. Week 6 (Oct 15–19): sample solutions.
  7. Week 7 (Oct 22–26) — no tutorial because of Midterm Test; for daytime section, lectures will be moved MW10.
  8. Week 8 (Oct 29–Nov 2): sample solutions.
  9. Week 9 (Nov 5–9): sample solutions.
  10. Week 10 (Nov 12–16): sample solutions.
  11. Week 11 (Nov 12–16): sample solutions.
  12. Week 12 (Nov 26–30): sample solutions.
  13. Week 13 (Dec 3–7): sample solutions.

Lecture summaries

Every week, specific sections of the textbook will be posted as readings. You can read these sections to prepare for the following week's lectures and tutorials.
At the end of each week, a short summary of the material covered during lecture will be posted.
All summaries will be plain text (ASCII) files, unless otherwise indicated.

  1. Week 1 (Sep 10–14); readings: section 1.2 (and review chapters 0 as needed).
  2. Week 2 (Sep 17–21); readings: sections 1.2, 1.3.
  3. Week 3 (Sep 24–28); readings: section 1.1.
  4. Week 4 (Oct 1–5); readings: section 3.2.
  5. Week 5 (Oct 8–12); readings: section 3.2, 3.3.
  6. Week 6 (Oct 15–19); readings: sections 2.1, 2.2, 2.7, 2.8.
  7. Week 7 (Oct 22–26); readings: section 2.7, 2.8, 2.3.
  8. Week 8 (Oct 29–Nov 2); readings: section 2.4, 2.5.
  9. Week 9 (Nov 5–9); readings: section 2.6, 7.1.
  10. Week 10 (Nov 12–16); readings: section 7.2, 7.3.
  11. Week 11 (Nov 19–23); readings: section 7.3, 7.4, 7.6.
  12. Week 12 (Nov 26–30); readings: section 7.5, 7.7, 8.1.
  13. Week 13 (Dec 3–7); readings: section 8.2, 8.3, 8.5.

Course outline

Lecture/tutorial topics

The following topics will be covered in this course, in the order listed. For each topic, we have indicated the approximate number of weeks required to cover that topic as well as a list of the relevant sections in the textbook.

  • Induction (simple, complete, well-ordering, structural) — Chapters 1, 4. [3 weeks]
  • Algorithm complexity and recurrence relations — Chapter 3. [2 weeks]
  • Algorithm correctness — Chapter 2. [2 weeks]
  • Regular languages, finite-state automata, and regular expressions — Chapter 7. [3 weeks]
  • Context-free languages, context-free grammars, and pushwon automata — Chapter 8. [3 weeks]

Learning objectives

By the end of this course, students should

  • understand induction and be able to use its various forms (simple, complete, structural);
  • understand how to state and prove the correctness of algorithms, including basic complexity analysis:
    • be able to write preconditions and postconditions,
    • be able to write and prove loop invariants,
    • be able to prove properties of recursive algorithms,
    • understand the difference between upper and lower bounds on algorithm complexity,
    • be able to setup recurrence relations for the running time of recursive algorithms,
    • be able to solve general recurrence relations, including simple non-linear examples;
  • understand basic properties of languages:
    • know the formal definition of a language and related concepts (strings, alphabets, etc.),
    • understand the concept of regular languages:
      • know regular expressions (regexps),
      • know finite-state automata (FSAs),
      • know the equivalence of regexps and FSAs,
      • be aware of the limitations of regular languages,
    • understand the concept of context-free languages:
      • know context-free grammars (CFGs),
      • know pushdown automata (PDAs),
      • know the equivalence of CFGs and PDAs,
      • be aware of the limitations of context-free languages.