2013-08-10 9 views
5

में दिए गए अंतराल (ए, बी) में निहित एस में सभी अंतराल ढूंढना होगा। आपको S अंतराल का एक सेट दिया गया है। आपको S में सभी अंतराल ढूंढना होगा जो न्यूनतम समय जटिलता में दिए गए अंतराल (a, b) में निहित हैं।आपको अंतराल एस का एक सेट दिया गया है। आपको न्यूनतम समय जटिलता

यह जानवर बल द्वारा O(n) समय में किया जा सकता है, जहां n सेट S में अंतराल की संख्या है। लेकिन अगर मुझे कुछ प्री-प्रोसेसिंग करने की इजाजत है, तो यह O(n) समय से कम समय में किया जा सकता है। O(log n) समय?

शुरू में मैं interval tree के बारे में सोच रहा था, लेकिन मुझे नहीं लगता कि इसे यहाँ लागू होता है क्योंकि अंतराल पेड़ कि overlaps एक दिया अंतराल के साथ सभी अंतराल प्राप्त करने के लिए प्रयोग किया जाता है है।

+0

के रूप में कहा गया है, सबसे अच्छा आप कर सकते हैं 'हे (एन)' क्योंकि, सबसे खराब स्थिति में, 'S' के सभी तत्वों को उत्पादन में कॉपी किया जाना चाहिए। –

+0

हां, यह सच है। लेकिन मैं ओ (लॉगन) + ओ (एम) जैसे कुछ की उम्मीद कर रहा था, जहां मीटर आउटपुट में तत्वों की संख्या है। –

+0

@SteveM अच्छी तरह से ध्यान दें कि, बड़े ओ नोटेशन के संदर्भ में, 'ओ (लॉगन) + ओ (एम) = ओ (एन) ', क्योंकि एम एन के रूप में बड़ा हो सकता है। पूर्व प्रसंस्करण समय को रनटाइम के साथ भी शामिल किया गया है क्योंकि यदि आप अंतराल को सॉर्ट करना चाहते हैं या कुछ डेटा संरचनाओं का उपयोग करके उन्हें व्यवस्थित करना चाहते हैं जो आपके एल्गोरिदम का भी हिस्सा हैं। – Fallen

उत्तर

5

आप 2 डी-प्लेन में अपनी समस्या को दोबारा हटा सकते हैं। प्रत्येक अंतराल के (begin, end) को द्वि-आयामी बिंदु होना चाहिए। (ध्यान दें कि सभी वैध अंतराल विकर्ण ऊपर खत्म हो जाएगा)

आपका अंतराल-खोज-समस्या अच्छी तरह से अध्ययन किया ओर्थोगोनल 2 डी रेंज में परिवर्तित हो एल्गोरिदम है O(sqrt(n)+k) या O(log^2+n +k) क्रम है, जहां कश्मीर अंकों की संख्या है साथ प्रश्नों की सूचना दी।

range query

+0

अच्छा विचार है, लेकिन मुझे किसी भी एल्गोरिदम से अवगत नहीं है जिसमें ओ (के) से कम जटिलता है, जहां के रिपोर्ट की गई संख्याओं की संख्या है। इस प्रकार, पेट्रीसिया सही है। – Matthias

+0

हाँ यह सच है। मैंने के विवरण को शामिल करने के लिए अपना उत्तर अपडेट कर लिया है। लेकिन कभी-कभी डेटापॉइंट अच्छी तरह से वितरित होते हैं और आपके प्रश्न केवल एक छोटे से सेट को कवर करते हैं, ताकि amortized k << n। –

1

Persistent binary search tree का उपयोग यहां किया जा सकता है।

पूर्व प्रसंस्करण:

  1. खाली लगातार पेड़ बनाएँ। इसे अपने अंतिम बिंदुओं द्वारा क्रमबद्ध अंतराल को स्टोर करना चाहिए।
  2. अपने शुरुआती बिंदुओं से अंतराल को क्रमबद्ध करें।
  3. क्रमबद्ध सूची के अंत से शुरू होने वाले प्रत्येक अंतराल के लिए, लगातार पेड़ की "प्रतिलिपि" बनाएं और इस अंतराल को इस प्रतिलिपि में जोड़ें।

खोज:

  1. शुरू करने क्रमबद्ध सूची में क्वेरी अंतराल के बिंदु का पता लगाएं।
  2. क्वेरी अंतराल के अंत तक सबसे छोटी कुंजी से लगातार पेड़ की "कॉपी" संबंधित Iterate।

खोज समय जटिलता ओ (लॉग (एन) + मीटर) है, जहां मीटर आउटपुट में तत्वों की संख्या है।

+0

ऐसा लगता है कि इसकी अंतरिक्ष जटिलता ओ (एन^2) है। अगर मैं गलत हूं कृपया मुझे सही। –

+0

@ स्टेवेम: अंतरिक्ष जटिलता ओ (एन * लॉग (एन) है)। लगातार डेटा संरचनाएं उथले "प्रतियां" बनाने की अनुमति देती हैं जहां अधिकांश डेटा "प्रतियां" के बीच साझा किया जाता है, इसलिए प्रत्येक बीएसटी अपडेट को केवल ओ (लॉग (एन)) अतिरिक्त नोड्स की आवश्यकता होती है। –

संबंधित मुद्दे