मान लीजिए कि हम एक डेटा संरचना विकसित करना चाहते हैं जो एक समय सीमा समाप्त हो सकती है, और एक ऐसे फ़ंक्शन का समर्थन करता है जो उपयोगकर्ता आईडी और टाइमस्टैम्प लेता है। यह जांच करेगा कि टाइमस्टैम्प दिए गए समय पर दिए गए user_id वाला उपयोगकर्ता अनुरोध विफल रहता है या नहीं। यह तभी विफल होगा जब उपयोगकर्ता के पास दिए गए समय सीमा से कम समय पहले एक सफल अनुरोध था।
इसलिए, यदि इनपुट एक्सपायर =6 जैसा है, तो ऑब्जेक्ट obj का निर्माण करें, और कॉल फ़ंक्शन obj.limit(0,10), obj.limit(0,16), obj.limit(0,17) और obj.limit( 1,20), तो आउटपुट क्रमशः असत्य, असत्य, सत्य और असत्य होगा क्योंकि उपयोगकर्ता 0 के लिए, शुरू में कोई अनुरोध नहीं था, इसलिए यह असत्य है, फिर समय 16 पर यह अंतिम अनुरोध 10 की तुलना में समाप्ति समय 6 से अधिक नहीं है, लेकिन 17 पर यह सच है और अंतिम अनुरोध के लिए, यह उपयोगकर्ता 1 के लिए है इसलिए प्रारंभिक अनुरोध गलत है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
कंस्ट्रक्टर को परिभाषित करें। इसकी समय सीमा समाप्त हो जाएगी
- lastCall :=एक ऐसा शब्दकोश बनाएं जिसका डिफ़ॉल्ट मान -1 हो
- एक फ़ंक्शन लिमिट () को परिभाषित करें। यह यूआईडी, टाइमस्टैम्प लेगा
- अंतिम:=lastCall[uid]
- यदि अंतिम -1 या (अंतिम + समाप्ति) <=टाइमस्टैम्प के समान है, तो
- lastCall[uid] :=टाइमस्टैम्प
- झूठी वापसी
- सही लौटें
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
from collections import defaultdict class RateLimit: def __init__(self, expire): self.expire = expire self.lastCall = defaultdict(lambda: -1) def limit(self, uid, timestamp): last = self.lastCall[uid] if last == -1 or last + self.expire <= timestamp: self.lastCall[uid] = timestamp return False return True expire = 6 obj = RateLimit(expire) print(obj.limit(0,10)) print(obj.limit(0,16)) print(obj.limit(0,17)) print(obj.limit(1,20))
इनपुट
RateLimit(6) obj.limit(0,10) obj.limit(0,16) obj.limit(0,17) obj.limit(1,20)
आउटपुट
False False True False