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

पायथन में हटाएं GetRandom O(1) डालें


मान लीजिए कि हमारे पास एक डेटा संरचना है जो औसत O(1) समय में निम्नलिखित सभी कार्यों का समर्थन करती है।

  • insert(val) - यदि यह पहले से मौजूद नहीं है तो यह सेट में एक आइटम वैल सम्मिलित करेगा।

  • remove(val) - यदि यह प्रस्तुत करता है तो यह सेट से एक आइटम वैल को हटा देगा।

  • getRandom - यह तत्वों के वर्तमान सेट से एक यादृच्छिक तत्व लौटाएगा। प्रत्येक तत्व के वापस आने की संभावना समान होनी चाहिए।

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

  • इनिशियलाइज़ेशन के लिए, पैरेंट मैप और एलीमेंट ऐरे को परिभाषित करें

  • इन्सर्ट () फ़ंक्शन के लिए, यह इनपुट के रूप में वैल लेगा

    • अगर वैल पैरेंट मैप में मौजूद नहीं है, या पैरेंट [वैल] =0, तो तत्वों में वैल डालें, और पैरेंट [वैल] सेट करें:=1 और सही लौटें

  • झूठी वापसी

  • हटाने () विधि के लिए, इसे हटाने के लिए वैल लगेगा

  • अगर वैल पैरेंट मैप में मौजूद नहीं है, या पैरेंट[वैल] =0, तो गलत लौटाएं

  • पैरेंट सेट करें [वैल] :=0

  • अनुक्रमणिका:=तत्वों की सरणी में वैल का सूचकांक

  • यदि सूचकांक तत्वों की लंबाई के समान नहीं है - 1

    • अस्थायी:=तत्वों का अंतिम तत्व

    • तत्वों का अंतिम तत्व सेट करें:=वैल

    • तत्वों को सेट करें [सूचकांक]:=अस्थायी

  • तत्वों का अंतिम तत्व हटाएं

  • GetRandom () विधि तत्व सरणी में मौजूद किसी भी यादृच्छिक मान को वापस कर देगी

उदाहरण (पायथन)

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

import random
class RandomizedSet(object):
   def __init__(self):
      self.present = {}
      self.elements = []
   def insert(self, val):
      if val not in self.present or self.present[val] == 0:
         self.elements.append(val)
         self.present[val] = 1
         return True
      return False
   def remove(self, val):
      if val not in self.present or self.present[val] == 0:
         return False
      self.present[val] = 0
      index = self.elements.index(val)
      if index!=len(self.elements)-1:
         temp = self.elements[-1]
         self.elements[-1] = val
         self.elements[index]=temp
      self.elements.pop()
      return True
   def getRandom(self):
      return random.choice(self.elements)
ob = RandomizedSet()
print(ob.insert(1))
print(ob.remove(2))
print(ob.insert(2))
print(ob.getRandom())
print(ob.remove(1))
print(ob.insert(2))
print(ob.getRandom())

इनपुट

Initialize the class, then call the insert(), remove(), getRandom() functions. See the implementation.

आउटपुट

True
False
True
2
True
False
2

  1. पायथन - किवी में बटन एक्शन

    किवी अनुप्रयोगों के तेजी से विकास के लिए एक ओपन सोर्स पायथन लाइब्रेरी है जो मल्टी-टच ऐप्स जैसे अभिनव यूजर इंटरफेस का उपयोग करती है। इसका उपयोग एंड्रॉइड एप्लिकेशन के साथ-साथ डेस्कटॉप एप्लिकेशन को विकसित करने के लिए किया जाता है। इस लेख में हम देखेंगे कि जब एक बटन दबाया जाता है तो घटनाओं का उपयोग कैसे

  1. टिंकर पायथन में बंधनेवाला फलक

    टिंकर पाइथन की जीयूआई बिल्डिंग लाइब्रेरी है। इस लेख में हम देखेंगे कि हम एक बंधनेवाला फलक कैसे बना सकते हैं। वे तब उपयोगी होते हैं जब हमारे पास जीयूआई कैनवास पर प्रदर्शित होने के लिए कुछ बड़ी मात्रा में डेटा होता है लेकिन हम हमेशा प्रदर्शित नहीं होना चाहते हैं। इसे बंधनेवाला बनाया गया है ताकि जरूरत

  1. पायथन में विरासत

    इस लेख में, हम पायथन 3.x में इनहेरिटेंस और एक्सटेंडिंग क्लासेस सीखेंगे। या पहले। वंशानुक्रम वास्तविक दुनिया के संबंधों का अच्छी तरह से प्रतिनिधित्व करता है, पुन:प्रयोज्य प्रदान करता है और पारगमन का समर्थन करता है। यह तेजी से विकास समय, आसान रखरखाव और विस्तार में आसान प्रदान करता है। वंशानुक्रम को