Saturday, September 21, 2024
Google search engine
HomeLanguagesPython3 Program for Number of unique triplets whose XOR is zero

Python3 Program for Number of unique triplets whose XOR is zero

Given N numbers with no duplicates, count the number of unique triplets (ai, aj, ak) such that their XOR is 0. A triplet is said to be unique if all of the three numbers in the triplet are unique. 

Examples: 

Input : a[] = {1, 3, 5, 10, 14, 15};
Output : 2 
Explanation : {1, 14, 15} and {5, 10, 15} are the 
              unique triplets whose XOR is 0. 
              {1, 14, 15} and all other combinations of 
              1, 14, 15 are considered as 1 only.

Input : a[] = {4, 7, 5, 8, 3, 9};
Output : 1
Explanation : {4, 7, 3} is the only triplet whose XOR is 0 

Naive Approach: A naive approach is to run three nested loops, the first runs from 0 to n, the second from i+1 to n, and the last one from j+1 to n to get the unique triplets. Calculate the XOR of ai, aj, ak, check if it equals 0. If so, then increase the count. 
Time Complexity: O(n3)

Efficient Approach: An efficient approach is to use one of the properties of XOR: the XOR of two of the same numbers gives 0. So we need to calculate the XOR of unique pairs only, and if the calculated XOR is one of the array elements, then we get the triplet whose XOR is 0. Given below are the steps for counting the number of unique triplets:
Below is the complete algorithm for this approach:  

  1. With the map, mark all the array elements.
  2. Run two nested loops, one from i-n-1, and the other from i+1-n to get all the pairs.
  3. Obtain the XOR of the pair.
  4. Check if the XOR is an array element and not one of ai or aj.
  5. Increase the count if the condition holds.
  6. Return count/3 as we only want unique triplets. Since i-n and j+1-n give us unique pairs but not triplets, we do a count/3 to remove the other two possible combinations.

Below is the implementation of the above idea:  

Python3




# Python 3 program to count the number of
# unique triplets whose XOR is 0
 
# function to count the number of
# unique triplets whose xor is 0
def countTriplets(a, n):
     
    # To store values that are present
    s = set()
    for i in range(n):
        s.add(a[i])
     
    # stores the count of unique triplets
    count = 0
     
    # traverse for all i, j pairs such that j>i
    for i in range(n):
        for j in range(i + 1, n, 1):
             
            # xor of a[i] and a[j]
            xr = a[i] ^ a[j]
             
            # if xr of two numbers is present,
            # then increase the count
            if (xr in s and xr != a[i] and
                            xr != a[j]):
                count += 1;
         
    # returns answer
    return int(count / 3)
 
# Driver code
if __name__ == '__main__':
    a = [1, 3, 5, 10, 14, 15]
    n = len(a)
    print(countTriplets(a, n))
     
# This code is contributed by
# Surendra_Gangwar


Output: 

2

Time Complexity: O(n2)

Auxiliary Space: O(n) for set
 

Please refer complete article on Number of unique triplets whose XOR is zero for more details!

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
You’ll access excellent video content by our CEO, Sandeep Jain, tackle common interview questions, and engage in real-time coding contests covering various DSA topics. We’re here to prepare you thoroughly for online assessments and interviews.
Ready to dive in? Explore our free demo content and join our DSA course, trusted by over 100,000 neveropen! Whether it’s DSA in C++, Java, Python, or JavaScript we’ve got you covered. Let’s embark on this exciting journey together!

Dominic Rubhabha-Wardslaus
Dominic Rubhabha-Wardslaushttp://wardslaus.com
infosec,malicious & dos attacks generator, boot rom exploit philanthropist , wild hacker , game developer,
RELATED ARTICLES

Most Popular

Recent Comments