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

पायथन में Insert Delete GetRandom O(1)


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

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

  • remove(val) - यह आइटम val को सेट से हटा देगा यदि यह मौजूद है।

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

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

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

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

    • यदि val पैरेंट मैप में मौजूद नहीं है, या parent[val] = 0, तो val को एलिमेंट्स में इन्सर्ट करें, और parent[val] := 1 सेट करें, और true लौटाएं

  • false लौटाएं

  • remove() मेथड के लिए, यह हटाने के लिए val लेगा

    • यदि val पैरेंट मैप में मौजूद नहीं है, या parent[val] = 0, तो false लौटाएं

    • parent[val] := 0 सेट करें

    • index := एलिमेंट्स ऐरे में val का इंडेक्स

    • यदि index एलिमेंट्स की लंबाई - 1 के समान नहीं है

      • temp := एलिमेंट्स का अंतिम एलिमेंट

      • एलिमेंट्स का अंतिम एलिमेंट := val सेट करें

      • elements[index] := temp सेट करें

    • एलिमेंट्स का अंतिम एलिमेंट हटाएं

    • 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())

    इनपुट

    क्लास इनिशियलाइज़ करें, फिर insert(), remove(), getRandom() फंक्शन्स कॉल करें। कार्यान्वयन देखें।

    आउटपुट

    True
    False
    True
    2
    True
    False
    2

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

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

  1. Tkinter Python में संकुचनशील फलक Tkinter Python में संकुचनशील फलक

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

  1. पायथन में इनहेरिटेंस (Inheritance) पायथन में इनहेरिटेंस (Inheritance)

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