ERROR DETECTING AND CORRECTING CODES 149 



using such codes there will be extra equipment for encoding and correcting 

 errors as well as the lowered effective channel capacity referred to above. 

 Because of these considerations applications of these codes may be expected 

 to occur first only under extreme conditions. Some typical situations seem 

 to be: 



a. unattended operation over long periods of time with the minimum of 

 standby equipment. 



b. extremely large and tightly interrelated systems where a single failure 

 incapacitates the entire installation. 



c. signaling in the presence of noise where it is either impossible or un- 

 economical to reduce the effect of the noise on the signal. 



These situations are occurring more and more often. The first two are par- 

 ticularly true of large scale digital computing machines, while the third 

 occurs, among other places, in "jamming" situations. 



The principles for designing error detecting and correcting codes in the 

 cases most likely to be applied first are given in this paper. Circuits for 

 implementing these principles may be designed by the application of well- 

 known techniques, but the problem is not discussed here. Part I of the paper 

 shows how to construct special minimum redundancy codes in the follow- 

 ing cases: 



a. single error detecting codes 



b. single error correcting codes 



c. single error correcting plus double error detecting codes. 



Part II discusses the general theory of such codes and proves that under 

 the assumptions made the codes of Part I are the "best" possible. 



PART I 

 SPECIAL CODES 



2. Single Error Detecting Codes 



We may construct a single error detecting code having n binary digits 

 in the following manner: In the first n — \ positions we put n — \ digits of 

 information. In the w-th position we place either or 1, so that the entire n 

 positions have an even number of I's. This is clearly a single error detecting 

 code since any single error in transmission would leave an odd number of 

 I's in a code symbol. 



The redundancy of these codes is, since m = n — 1, 



i? = -^ = 1 + ^ 



w — 1 n — \' 



It might appear that to gain a low redundancy we should let n become very 

 large. However, by increasing w, the probability of at least one error in a 



