Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी ++ में किसी अन्य सरणी के साथ सरणी में प्रत्येक तत्व का अधिकतम संभव एक्सओआर


इस समस्या में, हमें n तत्वों के दो सरणियाँ A और B दिए गए हैं। हमारा काम एक प्रोग्राम बनाना है जो किसी ऐरे में हर एलीमेंट के अधिकतम संभव XOR को दूसरे ऐरे के साथ ढूँढ़ने के लिए है।

हमें सरणी A के प्रत्येक तत्व के लिए सरणी B के साथ अधिकतम XOR की गणना करनी होगी अर्थात सरणी A के प्रत्येक तत्व के लिए हम सरणी B में एक तत्व का चयन करेंगे जिसका अधिकतम XOR मान होगा।

आइए समस्या को समझने के लिए एक उदाहरण लेते हैं -

इनपुट -

array A = {3, 6 ,11, 9}
array B = {8, 2, 4, 1}

आउटपुट -

11 14 15 13

स्पष्टीकरण -

आइए सरणी A के प्रत्येक तत्व के XOR संयोजन को सरणी B के सभी तत्वों के साथ देखें और फिर प्रत्येक के लिए अधिकतम का चयन करें।

3 XOR 8 = 11 3 XOR 2 = 1 3 XOR 4 = 7 3 XOR 1 = 2
Maximum = 11.
6 XOR 8 = 14 6 XOR 2 = 4 6 XOR 4 = 2 6 XOR 1 = 1
Maximum = 14.
11 XOR 8 = 3 11 XOR 2 = 9 11 XOR 4 = 15 11 XOR 1 = 10
Maximum = 15.
9 XOR 8 = 1 9 XOR 2 = 11 9 XOR 4 = 13 9 XOR 1 = 8
Maximum = 13.

इस समस्या को हल करने के लिए, सभी संयोजनों की गणना करना और उपरोक्त उदाहरण में दिखाए गए अनुसार अधिकतम XOR प्रिंट करना एक सरल और सरल तरीका है।

लेकिन यह प्रभावी नहीं होगा क्योंकि कोड दो छोरों पर निर्भर करता है जो क्रम O(n^2) की जटिलता को बनाते हैं।

इसलिए, हम समस्या का बेहतर समाधान देखेंगे।

यह एक ट्री डेटा संरचना का उपयोग करना है जो अधिकतम एक्सओआर खोजने के लिए सरणी ए के साथ मिलान के लिए सरणी बी के सभी तत्वों के बाइनरी को स्टोर करेगा।

तो, सरणी A के एक तत्व के लिए, हम इसके सबसे महत्वपूर्ण बिट की जाँच करेंगे और इसे 1 बनाने का प्रयास करेंगे। और अगले MSB पर जाएँ। इसके बाद हम ए के एक तत्व के लिए एरे बी में अपना अधिकतम एक्सओआर तत्व प्राप्त करेंगे।

उदाहरण

किसी अन्य सरणी के साथ एक सरणी में प्रत्येक तत्व के अधिकतम संभव XOR को खोजने का कार्यक्रम

#include<iostream>
using namespace std;
struct trie{
   int value;
   trie *child[2];
};
trie * get(){
   trie * root = new trie;
   root -> value = 0;
   root -> child[0] = NULL;
   root -> child[1] = NULL;
   return root;
}
void insert(trie * root, int key){
   trie * temp = root;
   for (int i = 31; i >= 0; i--){
      bool current_bit = key & (1 << i);
      if (temp -> child[current_bit] == NULL)
         temp -> child[current_bit] = get();
      temp = temp -> child[current_bit];
   }
   temp -> value = key;
}
int findMaxXor(trie * root, int element){
   trie * temp = root;
   for (int i = 31; i >= 0; i--){
      bool bits = ( element & ( 1 << i) );
      if (temp -> child[1 - bits] != NULL)
         temp = temp -> child[1 - bits];
      else
         temp = temp -> child[bits];
   }
   return (element ^ temp -> value);
}
int main(){
   int A[] = {3, 11, 6, 9};
   int B[] = {8, 2, 4, 1};
   int N = sizeof(A)/sizeof(A[0]);
   trie * root = get();
   for (int i = 0; i < N; i++)
   insert(root, B[i]);
   cout<<"The maximum possible XOR of every possible element in array A with Array B is\n";
   for (int i = 0; i < N; i++)
   cout <<findMaxXor(root, A[i])<<"\t";
   return 0;
}

आउटपुट

The maximum possible XOR of every possible element in array A with Array B is
11 15 14 13

  1. सी++ में एक सरणी में अधिकतम जीसीडी के साथ जोड़ी खोजें

    मान लीजिए कि हमारे पास सकारात्मक पूर्णांकों की एक सरणी है। हमारा काम सरणी से पूर्णांकों की जोड़ी को खोजना है, जहां GCD मान अधिकतम है। मान लीजिए A ={1, 2, 3, 4, 5}, तो आउटपुट 2 है। जोड़ी (2, 4) में GCD 2 है, अन्य GCD मान 2 से कम हैं। इस समस्या को हल करने के लिए, हम प्रत्येक तत्व के भाजक की गिनती को

  1. सी ++ में पूर्ण अंतर के न्यूनतम योग के साथ ऐरे तत्व?

    यह कार्यक्रम सरणी के न्यूनतम पूर्ण अंतर को खोजने के लिए है, क्योंकि हमारे पास एक सरणी है जिसमें विशिष्ट तत्व हैं। इस अवधारणा को बेहतर ढंग से सीखने के लिए आवश्यक चीजों को फिर से ब्रश करें, सरणी समान डेटा प्रकार के तत्वों का एक कंटेनर है। सरणी की लंबाई को पूर्वनिर्धारित करने की आवश्यकता है। पूर्ण अं

  1. पायथन में सरणी से एक तत्व के साथ अधिकतम XOR खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास गैर-ऋणात्मक मानों के साथ nums नामक एक सरणी है। हमारे पास क्वेरीज़ नामक एक अन्य सरणी भी है जहां क्वेरीज़ [i] की एक जोड़ी (xi, mi) है। ith क्वेरी का उत्तर xi का अधिकतम बिटवाइज़ XOR मान है और अंकों का कोई भी तत्व जो mi से कम या उसके बराबर है। यदि अंकों में सभी तत्व मील से बड़े है