Hamming Code
Description
Hamming Code is an error-correcting code used for error detection and correction in data transmission. It adds extra bits to the original data bits to create a code word that can detect and correct single-bit errors. The positions of the extra bits are determined based on powers of two, providing redundancy to ensure data integrity.
C++ Code
#include <iostream>
#include <vector>
using namespace std;
vector<int> generateHammingCode(vector<int>& data) {
int n = data.size();
vector<int> hammingCode;
int r = 0;
while ((1 << r) < (n + r + 1)) {
r++;
}
int j = 0;
for (int i = 1; i <= n + r; i++) {
if ((i & (i - 1)) == 0) {
hammingCode.push_back(0);
} else {
hammingCode.push_back(data[j]);
j++;
}
}
for (int i = 0; i < r; i++) {
int parityIndex = (1 << i) - 1;
int parity = 0;
for (int j = parityIndex; j < n + r; j += (1 << (i + 1))) {
for (int k = 0; k < (1 << i) && j + k < n + r; k++) {
parity ^= hammingCode[j + k];
}
}
hammingCode[parityIndex] = parity;
}
return hammingCode;
}
int main() {
vector<int> data = {1, 0, 1, 0};
vector<int> hammingCode = generateHammingCode(data);
cout << "Hamming code: ";
for (int bit : hammingCode) {
cout << bit << " ";
}
cout << endl;
return 0;
}
Time and Space Complexity
Operation | Time Complexity | Space Complexity |
---|---|---|
Hamming Code Generation | O(n) | O(n) |
Where:
- n: Number of data bits.