साक्षात्कार प्रश्न में पहला सेट बिट के लिए सर्च कर रहे हैं:एक विशाल बिटमैप
एक पार्किंग स्लॉट जो मिलियन कारों धारण कर सकते हैं, आप एक मुक्त पार्किंग स्लॉट खोजने की जरूरत है। स्लॉट कहां हो सकता है, इस पर कोई शर्त नहीं है, यानी पार्किंग स्थल में कई प्रवेश द्वार हो सकते हैं और प्रवेश द्वार के पास एक स्लॉट ढूंढ सकते हैं, इससे कोई फर्क नहीं पड़ता। सवाल यह था कि किस प्रकार की डेटा संरचना का उपयोग किया जाना चाहिए और विभिन्न परिचालनों की जटिलता क्या होगी।
मैंने लिया गया/मुक्त स्लॉट के लिए 0/1 के साथ मिलियन बिट्स की एक छोटी सी सरणी का उपयोग करने का सुझाव दिया, इसलिए मुफ्त स्थान खोजने के लिए पहले सेट बिट को खोजने के लिए अनुवाद किया गया। इस बारे में कुछ भी न मानें कि कितनी कारें हैं, इत्यादि, यानी, बिट सरणी स्पैस या घनी हो सकती है।
एक विशाल बिटमैप में सेट बिट खोजने का सबसे तेज़ तरीका क्या है? मैंने योजना के रूप में प्रति शब्द बाइनरी खोज + कुशल ffs() का सुझाव दिया था।
स्टोर एक चर में पिछले मुक्त स्लॉट के सूचकांक और फिर अगले एक शुरुआत से बिटमैप स्कैन न करें की तलाश में है, लेकिन इस मूल्य से:
यदि हम सरणी की सामग्री के बारे में कुछ भी नहीं मान सकते हैं, तो एक बाइनरी खोज यहां सहायता नहीं करेगी; आपको एक रैखिक खोज का उपयोग करना होगा। –
सी में, आप 64-बिट समूहों (uint64_t का उपयोग करके) में स्लॉट के माध्यम से जा सकते हैं, और पहले nonzero मान की जांच कर सकते हैं। –
मैं एक फेनविक ट्री (बाइनरी इंडेक्सेड ट्री, बीआईटी) पर द्विआधारी खोज करता हूं। अद्यतन ऑपरेशन ओ (लॉग एन) लेता है। पहले सेट बिट के लिए खोज ओ है (लॉग एन)^2) – nhahtdh