<Ul> <Li> Convolutional codes are processed on a bit - by - bit basis . They are particularly suitable for implementation in hardware, and the Viterbi decoder allows optimal decoding . </Li> <Li> Block codes are processed on a block - by - block basis . Early examples of block codes are repetition codes, Hamming codes and multidimensional parity - check codes . They were followed by a number of efficient codes, Reed--Solomon codes being the most notable due to their current widespread use . Turbo codes and low - density parity - check codes (LDPC) are relatively new constructions that can provide almost optimal efficiency . </Li> </Ul> <Li> Convolutional codes are processed on a bit - by - bit basis . They are particularly suitable for implementation in hardware, and the Viterbi decoder allows optimal decoding . </Li> <Li> Block codes are processed on a block - by - block basis . Early examples of block codes are repetition codes, Hamming codes and multidimensional parity - check codes . They were followed by a number of efficient codes, Reed--Solomon codes being the most notable due to their current widespread use . Turbo codes and low - density parity - check codes (LDPC) are relatively new constructions that can provide almost optimal efficiency . </Li> <P> Shannon's theorem is an important theorem in forward error correction, and describes the maximum information rate at which reliable communication is possible over a channel that has a certain error probability or signal - to - noise ratio (SNR). This strict upper limit is expressed in terms of the channel capacity . More specifically, the theorem says that there exist codes such that with increasing encoding length the probability of error on a discrete memoryless channel can be made arbitrarily small, provided that the code rate is smaller than the channel capacity . The code rate is defined as the fraction k / n of k source symbols and n encoded symbols . </P>

Which of the following would best help to detect errors in data processing