उप-रैखिक क्वेरी समय का उपयोग करते हुए, लिए दो संख्याओं का चयन करें


9

यहाँ एक निकटतम पड़ोसी समस्या है।

यह देखते हुए reals (बहुत बड़े !), के साथ साथ वास्तविक को लक्षित , लगता है और जिसका योग के सबसे करीब है । हम ( ) के उचित पूर्व-प्रसंस्करण / अनुक्रमण की अनुमति देते हैं , लेकिन क्वेरी समय (दिए गए ) पर, परिणाम बहुत तेज़ी से लौटाया जाना चाहिए (जैसे, समय)।a1,,annpaiajpa1,,anO(nlogn)pO(logn)

(सरल उदाहरण: यदि हम केवल एक चाहते थे कि के सबसे करीब है , हम को सॉर्ट होगा ऑफ़लाइन, , तो क्वेरी के समय द्विआधारी खोज करते हैं, )।aipa1,,anO(nlogn)O(logn)

समाधान जो काम नहीं करते हैं:

1) ऑफ़लाइन सॉर्ट करें , फिर क्वेरी समय पर, दोनों सिरों से शुरू करें और दो पॉइंटर्स को अंदर की ओर ले जाएं ( http://bit.ly/1eKHHDy )। अच्छा नहीं है, क्योंकि क्वेरी समय है।a1,,anO(n)

2) ऑफ़लाइन, फिर क्वेरी समय पर, प्रत्येक और एक "दोस्त" के लिए द्विआधारी खोज करें जो इसे करीब कुछ करने में मदद करता है । अच्छा नहीं, क्योंकि क्वेरी समय।a1,,anaipO(nlogn)

3) सभी जोड़े ऑफ़लाइन सॉर्ट करें, फिर बाइनरी सर्च करें। अच्छा नहीं है, क्योंकि प्री-प्रोसेसिंग है।(a1,,an)O(n2)

धन्यवाद!

ps। अभ्यास के लिए आवश्यक सामान्यीकरण: (1) और को 50-आयामी वैक्टर, (2) "करीब" सदिश कोसाइन दूरी, और (3) -best निकटतम जोड़े-उस-योग। सिर्फ 1-बेस्ट नहीं।a1,,anpk


क्या पूर्व-प्रसंस्करण समय या अंतरिक्ष की मात्रा है जो हम पूर्व-प्रसंस्करण के बाद उपयोग कर सकते हैं? यदि हम स्थान पर सीमित हैं , तो क्या आपके पास यह मानने का कोई कारण है कि क्या, , समय में हल किया जा सकता है ? ऐसा लगता है कि मेरे लिए अजीब नहीं है। O(n)O(lgn)
डीडब्ल्यू

प्री-प्रोसेसिंग ओ ( लॉग ) तक सीमित है । मैंने समस्या कथन को अद्यतन किया। nn
केविन

मेरे पास यह मानने का कोई कारण नहीं है कि क्वेरी तेजी से हो सकती है, लेकिन निकटतम पड़ोसियों (केडी-ट्री, लोकल-सेंसिटिव हैशिंग, आदि) के लिए कई उपयोगी परिणाम मेरे लिए काउंटर-सहज रूप से अच्छे लगते हैं। व्यावहारिक उपयोग के लिए स्थानीय-संवेदनशील हैशिंग का उपयोग कर एक अनुमानित समाधान ठीक होगा।
केविन

जवाबों:


17

यह लगभग निश्चित रूप से असंभव है।

मान लीजिए कि आप अपनी समस्या को प्रीप्रोसेसिंग समय और क्वेरी समय साथ हल कर सकते हैं । फिर 3SUM समस्या को हल करने के लिए एक सरल एल्गोरिथ्म है- वास्तविक संख्याओं का एक सेट प्राप्त करें , शून्य करने के लिए किसी भी तीन तत्वों को योग करें? - समय। हम पूर्व की प्रक्रिया सभी नंबरों, तो प्रत्येक संख्या के लिए , हम का मान ज्ञात कि सबसे करीब है ; अगर यह मेल खाता है, तो हमें 3SUM समस्या का हल मिल गया है।P(n)Q(n)nP(n)+nQ(n)akai+ajakak

हालाँकि, 3SUM के लिए ज्ञात सबसे तेज़ एल्गोरिथम समय में चलता है , और इस एल्गोरिथ्म को व्यापक रूप से इष्टतम माना जाता है। इसके अलावा, संगणना के एक प्रतिबंधित लेकिन प्राकृतिक निर्णय वृक्ष मॉडल में एक मिलान कम है। पूर्णांकों के सेट के लिए , "सब बिट्स के साथ गेम खेलने" के लिए थोड़ा सबक्वैड्रिक-टाइम एल्गोरिदम हैं, लेकिन पूर्णांक रैम मॉडल में भी, 3SUM को समय की आवश्यकता होती है। ।O(n2)Ω(n2)Ω(n2/polylogn)

इसलिए यह मानते हुए कि अनुमान सही है, आपकी समस्या के लिए या तो (निकट-) द्विघात पूर्वप्रक्रमक समय या (निकट-) रैखिक क्वेरी समय की आवश्यकता है।


2

यदि आप पूर्व-प्रसंस्करण के दौरान असीमित स्थान और असीमित समय का उपयोग कर सकते हैं, तो निम्न समाधान आपकी आवश्यकताओं को पूरा करता है:

  • पूर्व-प्रसंस्करण के दौरान, सेट गणना करें , और इस सेट को क्रमबद्ध क्रम में संग्रहीत करें। यह सेट समय में उत्पन्न और सॉर्ट किया जा सकता है , और इसे संग्रहीत करने के लिए स्थान लेता है।{ai+aj:1ijn}O(n2)O(n2)

  • अब एक क्वेरी का जवाब देने के लिए ( जहां को जितना करीब हो सके) खोजने के लिए, बस इस क्रमबद्ध सूची में एक द्विआधारी खोज करें। वह समय लेगा ।ai,ajai+ajpO(lgn)

यदि यह समाधान स्वीकार्य नहीं है, तो आपको अपनी आवश्यकताओं के बारे में अधिक सावधानी से सोचने और तदनुसार प्रश्न को संपादित करने की आवश्यकता है।


हाय, और धन्यवाद! लेकिन आपका समाधान मेरे समाधान # 3 के समान है, जो O (n ^ 2) पूर्व-प्रसंस्करण समय के कारण समस्याग्रस्त है। मेरे मामले में, n बहुत बड़ा है (उदाहरण के लिए, 1 मी) और मुझे ओ (एन ^ 2) संचालन से बचना चाहिए।
केविन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.