Welcome to CS250/EE387!

Algebraic Error Correcting Codes, Stanford University, Winter 2019.

Course Overview

Instructor: Mary Wootters

TA: Noah Shutty

When and where? M/W 4:30-5:50pm, Sapp Center for Science Teaching and Learning (STLC), Room 118.

Course Description: Introduction to the theory of error correcting codes, emphasizing algebraic constructions and diverse applications throughout computer science and engineering. Topics include basic bounds on error correcting codes; Reed-Solomon and Reed-Muller codes; list-decoding, list-recovery and locality. Applications may include communication, storage, complexity theory, pseudorandomness, cryptography, streaming algorithms, group testing, and compressed sensing.

Prerequisites: Linear algebra, basic probability (at the level of, say, CS109, CME106 or EE178) and "mathematical maturity" (students will be asked to write proofs). Familiarity with finite fields will be helpful but not required.

What do I need to do? Four homework assignments and a final project.


  • (2/25) Mary's office hours on Tuesday 2/26 will be 10-11 instead of 3-4 (just this once).
  • (2/16): Noah's regular office hours will be Thursdays 3:30-4:30pm. (Gates 486)
  • (2/7): A hint was added to HW4, Section 2, Problem 1.
  • (1/29): Clarification about notation on HW2: "poly(x)" means "polynomial in x" and "polylog(x)" means "polynomial in log(x)."
  • (1/28): Noah will have office hours this week Thursday Jan 31 in Gates 486, 5:30-6:30. In future weeks he will have Thursday afternoon office hours, precise time TBD.
  • (1/23): Inspired by a problem on HW2, Milan did some extra reading on Newton's identities and compiled this nice document with several proofs. Thanks Milan!
  • (1/14): There was a bug in problem 4c! The PSET has been updated and problem 4c is now optional. That is, you can do just 4(a) and 4(b) to get full credit on problem 4.
  • (1/13): Bonus office hours: Mary will stay after class on Monday 1/14 (in addition to her normal office hours on Tuesday) for some extra office hours in case there is demand.
  • (1/13): Problem 2 in Section 2 on Homework 1 has been updated to make it easier and also to fix a typo in the hint.


The following is a tentative schedule. It is subject to change, especially the lectures that have not happened yet. Lectures that have not happened yet have broken links. If a lecture that has happened has broken links, please alert marykw.

Monday Wednesday
1/7. Lecture 1: Logistics and the basics of coding theory.

Lecture Notes

1/9. Lecture 2: Intro to finite fields and linear codes.

Lecture Notes

Optional reading: Forney's introduction to finite fields.

Homework 1 released.

1/14. Lecture 3: More linear codes. Application: McEliece Cryptosystem; Asymptotics, Hamming and GV bounds.

Lecture Notes

1/16. Lecture 4: Singleton and Plotkin bounds; Reed-Solomon Codes!!!

Lecture Notes

Homework 1 due. Homework 2 released.

1/21. MLK Day. No Class. 1/23. Lecture 5: More Reed-Solomon Codes! Welch-Berlekamp and Berlekamp-Massey algorithms

Lecture Notes

1/28. Lecture 6: Binary codes! BCH codes, code concatenation.

Lecture Notes

1/30. Lecture 7: More Concatenated Codes and the Zyablov bound

Lecture Notes

Homework 2 due. Homework 3 released.

2/4. Lecture 8: Algorithmic applications of RS codes: streaming, compressed sensing, group testing

Lecture Notes

2/6. Lecture 9: Random errors and efficiently achieving capacity on the BSC

Lecture Notes

Homework 3 due. Homework 4 released.

2/11. Lecture 10: List-Decoding! (List-decoding capacity theorem and the Johnson bound)

Lecture Notes

Relevant reading: Extensions to the Johnson Bound (Guruswami and Sudan 2001)

2/13. Lecture 11: Guruswami-Sudan Algorithm

Lecture Notes

Homework 4 due. Start thinking about your projects!

2/18. President's Day: No Class 2/20. Lecture 12: List recovery and applications

I'm counting this as lectures 12 and 13 together since we missed on on President's day...(either I'll talk double speed or we will skip things, depending on demand :P)

Lecture notes

Project proposals due.

2/25. Lecture 14: Folded Reed-Solomon Codes

Lecture notes

2/27. Lecture 15: Reed-Muller Codes and Locality

Lecture notes

3/4. Lecture 16: Local list-decoding and applications (Goldreich-Levin, Kushilevitz-Mansour)

Lecture notes

3/6. Lecture 17: Applications in storage: Regenerating codes from RS codes

Lecture notes

3/11. Project Presentations 3/13. Project Presentations
3/18. -- 3/20. Final projects due, 11:59pm. (by email to marykw)