Course Description:

This course is an introduction to the mathematics behind coding, specifically codes used for data compression, error detection and correction. The plan for the semester includes:
 Basics of information theory and coding theory
 Simple compression coding, including Huffman Coding and the KraftMcMillan inequality.
 Basic ideas behind error detection and correction, including the Noisy Coding Theorem.
 Error detecting/correcting codes, with a focus on linear codes. We will also examine bounds on how efficient these codes can be.
 Cyclic linear codes (Hamming, BCH, ReedSolomon)
Covering these topics requires reviewing and learning a wide variety of mathematics, including counting, probability, modular arithmetic, various abstract properties and algorithms involving the integers, primitive polynomials, and more! Many of these topics will be tied together when we talk about the structure of finite fields. We won't cover any of these concepts in full detail, but we want enough math to understand why these coding techniques work; they won't just be algorithms which happen to work.
Please note that this is not a course about encrypting information to make it secret (see Math 5248: Cryptology and Number Theory), compression using wavelets (see Math 5467: Introduction to the Mathematics of Image and Data Analysis), or the serious details about implementing these codes (see any number of EE courses, such as 5501, 5581 and 5585). For more about finite fields, groups, and the abstract properties of the integers, consider a course like Math 5286H: Fundamentals of Abstract Algebra.
I should also note that most of the previous instructors of this course haven't covered Goppa codes, based on algebraic codes, even though these objects are sometimes included in the title of the course. If this topic is important to you, let me know (early!), and I may be able to rearrange things so that we can fit in a brief overview.
