VOOZH about

URL: https://www.geeksforgeeks.org/dsa/compute-parity-number-using-xor-table-look/

⇱ Compute the parity of a number using XOR and table look-up - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Compute the parity of a number using XOR and table look-up

Last Updated : 28 Aug, 2022

Parity of a number refers to whether it contains an odd or even number of 1-bits. The number has “odd parity”, if it contains odd number of 1-bits and is “even parity” if it contains even number of 1-bits.

1 --> parity of the set is odd
0 --> parity of the set is even

Examples:

Input : 254
Output : Odd Parity
Explanation : Binary of 254 is 11111110. 
There are 7 ones. Thus, parity is odd.

Input : 1742346774
Output : Even

Method 1 : (Naive approach) We have already discussed this method here. Method 2 : (Efficient) Pre-requisites : Table look up, X-OR magic If we break a number S into two parts S1 and S2 such S = S1S2. If we know parity of S1 and S2, we can compute parity of S using below facts :

  1. If S1 and S2 have the same parity, i.e. they both have an even number of bits or an odd number of bits, their union S will have an even number of bits.
  2. Therefore parity of S is XOR of parities of S1 and S2

The idea is to create a look up table to store parities of all 8 bit numbers. Then compute parity of whole number by dividing it into 8 bit numbers and using above facts. Steps:

1. Create a look-up table for 8-bit numbers ( 0 to 255 )
 Parity of 0 is 0.
 Parity of 1 is 1.
 .
 .
 .
 Parity of 255 is 0.
2. Break the number into 8-bit chunks
 while performing XOR operations.
3. Check for the result in the table for
 the 8-bit number.

Since a 32 bit or 64 bit number contains constant number of bytes, the above steps take O(1) time. Example :

1. Take 32-bit number : 1742346774

2. Calculate Binary of the number : 
 01100111110110100001101000010110

3. Split the 32-bit binary representation into 
 16-bit chunks :
0110011111011010 | 0001101000010110 

4. Compute X-OR :
 0110011111011010
^ 0001101000010110
___________________
= 0111110111001100

5. Split the 16-bit binary representation 
 into 8-bit chunks : 01111101 | 11001100

6. Again, Compute X-OR :
 01111101
^ 11001100
___________________
= 10110001
10110001 is 177 in decimal. Check
 for its parity in look-up table :
Even number of 1 = Even parity.

Thus, Parity of 1742346774 is even.

Below is the implementation that works for both 32 bit and 64 bit numbers. 

Output:

Even Parity

Time Complexity : O(1). Note that a 32 bit or 64 bit number has fixed number of bytes (4 in case of 32 bits and 8 in case of 64 bits). 

Auxiliary Space: O(1)

Comment
Article Tags: