Coding theory began in the late 1940's with the work of Golay, Hamming and Shannon. Although it has its origins in an engineering problem, the subject has developed by using more and more sophisticated mathematical techniques. It is our goal to present the theory of error-correcting codes in a simple, easily understandable manner, and yet also to cover all the important aspects of the subject. Thus the reader will find both the simpler families of codes – for example, Hamming, BCH, cyclic and Reed-Muller codes – discussed in some detail, together with encoding and decoding methods, as well as more advanced topics such as quadratic residue, Golay, Goppa, alternant, Kerdock, Preparata, and self-dual codes and association schemes.
Our treatment of bounds on the size of a code is similarly thorough. We discuss both the simpler results – the sphere-packing, Plotkin, Elias and Gaschamov bounds – as well as the very powerful linear programming method and the McEliece-Rodemich-Rumsey-Welch bound. Therefore this book can be used both by the beginner and by the expert, as an introductory textbook and as a reference book, and both by the engineer and the mathematician. Of course, this has not resulted in a thin book, and so we suggest the following menus:
[Sequence of chapters for an elementary first course on coding theory for mathematicians, a second course for mathematicians, an elementary first course on coding theory for engineers, and a second course for engineers.]
[List of principal codes discussed, encoding methods given, and decoding methods given.]
When reading the book, keep in mind this piece of advice, which should be given in every preface: if you get stuck on a section, skip it, but keep reading! Don't hesitate to skip the proof of a theorem: we often do. Starred sections are difficult or dull, and can be omitted on the first (or even second) reading.
The book ends with an extensive bibliography. Because coding theory overlaps with so many other subjects (computers, digital systems, group theory, number theory, the design of experiments, etc.) relevant papers may be found almost anywhere in the scientific literature. Unfortunately this means that the usual indexing and reviewing journals are not always helpful. We have therefore felt an obligation to give a fairly comprehensive bibliography. The notes at the ends of the chapters give sources for the theorems, problems and tables, as well as small bibliographies for some of the topics covered (or not covered) in the chapter.
Only block codes for correcting random errors are discussed; we say little about codes for correcting other kinds of errors (burst or transpositions) or about variable length codes, convolutional codes or source codes (see the Notes to Ch. 1). Furthermore we have often considered only binary codes, which makes the theory a lot simpler. Most writers take the opposite point of view; they think in binary but publish their results over arbitrary fields.
[List of omitted topics.]Table of Content