Find the maximum subset XOR of a given set - GeeksforGeeks



Find the maximum subset XOR of a given set - GeeksforGeeks

Given an set of positive integers. find the maximum XOR subset value in the given set. Expected time complexity O(n).

Examples:

Input: set[] = {2, 4, 5}  Output: 7  The subset {2, 5} has maximum XOR value    Input: set[] = {9, 8, 5}  Output: 13  The subset {8, 5} has maximum XOR value    Input: set[] = {8, 1, 2, 12, 7, 6}  Output: 15  The subset {1, 2, 12} has maximum XOR value    Input: set[] = {4, 6}  Output: 6  The subset {6} has maximum XOR value

Note that this problem is different from the maximum subarray XOR. Here we need to find subset instead of subarray.

We strongly recommend you to minimize your browser and try this yourself first.

A Simple Solution is to generate all possible subsets of given set, find XOR of every subset and return the subset with maximum XOR.

Below is an Efficient Algorithm that works in O(n) time.
The idea is based on below facts:

  1. Number of bits to represent all elements is fixed which is 32 bits for integer in most of the compilers.
  2. If maximum element has Most Significant Bit MSB at position i, then result is at least 2i
1. Initialize index of chosen elements as 0. Let this index be      'index'  2. Traverse through all bits starting from most significant bit.      Let i be the current bit.  ......(a) Find the maximum element with i'th bit set.  If there            is no element with i'th bit set, continue to smaller             bit.    ......(b) Let the element with i'th bit set be maxEle and index            of this element be maxInd. Place maxEle at 'index' and            (by swapping set[index] and set[maxInd])   ......(c) Do XOR of maxEle with all numbers having i'th  bit as set.  ......(d) Increment index   3. Return XOR of all elements in set[]. Note that set[] is modified     in step 2.c.  


Read full article from Find the maximum subset XOR of a given set - GeeksforGeeks


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts