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

पायथन में बिट सरणी का उपयोग करके सरणी के डुप्लिकेट खोजें


मान लीजिए कि हमारे पास n भिन्न संख्याओं की एक सरणी है; n अधिकतम 32,000 हो सकता है। सरणी में डुप्लिकेट प्रविष्टियाँ हो सकती हैं और हम नहीं जानते कि n का मान क्या है। अब अगर हमारे पास केवल 4-किलोबाइट मेमोरी है, तो सरणी में सभी डुप्लीकेट कैसे प्रदर्शित होंगे?

इसलिए, यदि इनपुट [2, 6, 2, 11, 13, 11] जैसा है, तो आउटपुट [2,11] होगा क्योंकि 2 और 11 दिए गए सरणी में एक से अधिक बार दिखाई देते हैं।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

एक बाइट-सरणी प्रकार डेटा संरचना बनाएं bit_arr, इसकी निम्नलिखित विधियाँ हैं

  • कंस्ट्रक्टर को परिभाषित करें इसमें n लगेगा

  • arr :=आकार की एक सरणी (n / 2^5) + 1, 0 से भरें

  • एक फ़ंक्शन को परिभाषित करें get_val() । यह स्थिति लेगा

  • अनुक्रमणिका :=स्थिति / 2^5

  • बिटनो:=पॉज़ और 31

  • सही लौटें जब (गिरफ्तारी [इंडेक्स] और (2 ^ बिटनो)) 0 के समान नहीं है

  • एक फ़ंक्शन को परिभाषित करें set_val() । यह स्थिति लेगा

  • अनुक्रमणिका :=स्थिति / 2^5

  • बिटनो:=पॉज़ और 31

  • arr[index] :=arr[index] OR (2^bitNo)

  • मुख्य विधि से, निम्न कार्य करें -

  • गिरफ्तार :=bit_arr(320000)

  • मेरे लिए 0 से लेकर गिरफ्तारी के आकार तक, करें

    • संख्या:=गिरफ्तार [i]

    • अगर arr.get_val(num) गैर-शून्य है, तो

      • प्रदर्शन संख्या

    • अन्यथा,

    • गिरफ्तारी का set_val(num)

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

class bit_arr:
   def __init__(self, n):
      self.arr = [0] * ((n >> 5) + 1)
   def get_val(self, pos):
      self.index = pos >> 5
      self.bitNo = pos & 31
      return (self.arr[self.index] & (1 << self.bitNo)) != 0
   def set_val(self, pos):
      self.index = pos >> 5
      self.bitNo = pos & 31
      self.arr[self.index] |= (1 << self.bitNo)
def is_duplicate(arr):
   arr = bit_arr(320000)
   for i in range(len(arr)):
      num = arr[i]
      if arr.get_val(num):
         print(num, end = " ")
      else:
         arr.set_val(num)
arr = [2, 6, 2, 11, 13, 11]
is_duplicate(arr)

इनपुट

[2, 6, 2, 11, 13, 11]

आउटपुट

2 11

  1. पायथन प्रोग्राम में सरणी का योग ज्ञात करें

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

  1. सरणी का योग खोजने के लिए पायथन कार्यक्रम

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

  1. पायथन का उपयोग करके एलसीएम कैसे खोजें?

    दो (या अधिक) संख्याओं का LCM (न्यूनतम समापवर्तक) एक ऐसी संख्या है जो सबसे छोटी संख्या है जो दोनों (या सभी) से विभाज्य है। पहले हम दी गई दो संख्याओं की बड़ी संख्या ज्ञात करते हैं। इससे शुरू करते हुए हम कोशिश करते हैं और पहली संख्या पाते हैं जो दोनों से विभाज्य है, जो एलसीएम है उदाहरण x=12 y=20 if x &