समय और स्थान (सबसे खराब स्थिति) में विशेष संख्या का निर्धारण


10

यह देखते हुए कि पूर्णांक हैं जैसे कि सभी , और प्रत्येक की घटना में एक विशेष संख्या को छोड़कर संख्या एक विषम संख्या है। उस संख्या को खोजने का प्रयास करें जिसकी घटना सम संख्या है।A[1..n]0A[k]m1knA[1..n]

एक एल्गोरिथ्म है: हम को , और को कई टुकड़ों में हैं, जिनके तत्वों का मान होता है। वही, इसलिए हम प्रत्येक तत्व की घटना को गिन सकते हैं।Θ(nlogn)A[1..n]B[1..n]B[1..n]

मैं सबसे खराब स्थिति खोजना चाहता हूं- -time-and- -space एल्गोरिथ्म।O(n)O(n)

मान लीजिए कि और , इसलिए मूलांक सॉर्ट स्वीकार्य नहीं है। बाइनरी बिटवाइज़ ऑपरेशन स्वीकार्य हैं, उदाहरण के लिए, ।m=Ω(n1+ϵ)ϵ>0A[1]xorA[2]


नीचे आर्यभट्ट का जवाब दर्शाता है कि सामान्य मामला अच्छा नहीं है, लेकिन शायद आपके पास आगे प्रतिबंध उपलब्ध हैं? एक सरल (लेकिन बड़ा) प्रतिबंध यह लागू करना होगा कि सरणी में सभी प्रविष्टियाँ आकार में । यह एक सुंदर तुच्छ रैखिक एल्गोरिदम देगा। O(n)
ल्यूक मैथिसन

1
@LukeMathieson: मैंने उस उत्तर को हटा दिया, क्योंकि मुझे अभी तक यकीन नहीं है कि मैंने जिस पेपर का हवाला दिया है, वह बिना किसी संशोधन के काम करेगा, और इसके अलावा, ओपी केवल यूनिफ़ॉर्म कॉस्ट रैम मॉडल में रुचि रखता है।
आर्यभट्ट

@ आर्यभट्ट: हे, अच्छा जवाब जो तब नहीं है! दिलचस्प के लिए, और शायद फ्रैंक के लिए उपयोगी है, आपको क्या लगा कि पेपर में परिणाम को बदलने के साथ समस्या थी? एक त्वरित स्किम ने इसे लागू करने का सुझाव दिया, लेकिन मैंने स्पष्ट रूप से इसमें नहीं पढ़ा।
ल्यूक मैथिसन

@LukeMathieson: यह तथ्य कि वर्तमान समस्या में अन्य तत्वों को विषम संख्या में प्रकट होने की आवश्यकता है। चूंकि, मैंने सबूत पर भी ध्यान नहीं दिया ...
आर्यभट्ट

यह दिलचस्प होगा यदि आप थ्योरिटिक परिणाम या व्यावहारिक समाधान में रुचि रखते हैं। सिद्धांत के दृष्टिकोण से, मेरी पहली त्वरित प्रतिक्रिया यह है, कि आप पूर्णांक की सूची को से अधिक तेजी से क्रमित कर सकते हैंहान द्वारा एक नियतात्मक एल्गोरिथ्म है जो समय में चलता है । यादृच्छिक एल्गोरिदम के लिए, और भी बेहतर परिणाम ज्ञात हैं, जैसे हान और थोरुप ने एक अपेक्षित समय एल्गोरिथ्म पाया है। हालाँकि, मुझे लगता है कि आपकी समस्या को हल करने की आवश्यकता नहीं होनी चाहिए। O(nlogn)O(loglogn)O(nloglogn)
शुकुल

जवाबों:


2

यहाँ एक सरल एल्गोरिथ्म के लिए एक विचार है; बस सभी घटनाओं को गिनें!

  1. खोजें । - समयm=maxAΘ(n)
  2. "आवंटित" सरणी । - समय ¹C[0..m]O(1)
  3. जब भी आपको मिलता है, तब तक और I पर बढ़ाएं । यदि था , तो को रैखिक सूची । - समयAC[x]A[_]=xC[x]0xLΘ(n)
  4. पर और साथ तत्व भी खोजें। - समय ।LxeC[xe]O(n)
  5. वापसी ।xe

सब सब में, यह आपको एक रेखीय-समय एल्गोरिथ्म देता है जो बहुत सारी मेमोरी का उपयोग (आवंटित करने के अर्थ में) कर सकता है। ध्यान दें कि स्वतंत्र रूप से निरंतर समय में रैंडम-एक्सेस में सक्षम होना यहां महत्वपूर्ण है।Cm

अंतरिक्ष पर बंधे एक अतिरिक्त इस दृष्टिकोण के साथ अधिक कठिन है; मुझे किसी भी शब्दकोश डेटा-संरचना का पता नहीं है जो समय देखने की पेशकश करता है। आप हैश तालिकाओं का उपयोग कर सकते हैं, जिसके लिए यहां से कार्यान्वयन हैं की उम्मीद लुकअप समय ( तालिका के आकार, संग्रहीत तत्वों की संख्या) ताकि आप रैखिक अंतरिक्ष के साथ मनमाने ढंग से अच्छा प्राप्त कर सकते हैं - उम्मीद में। यदि मैप में सभी मान ही हैश मान पर हैं, तो आप खराब हैं।O(n)O(1)O(1+k/n) nkA


  1. रैम पर, यह अंतर्निहित रूप से किया जाता है; हम सभी की जरूरत है शुरू की स्थिति और शायद अंत की स्थिति है।

0

लगभग एक तुच्छ समाधान - जो कि स्थान का उपयोग करता है - एक हैश मानचित्र का उपयोग करना है। याद रखें कि तत्वों को जोड़ने और देखने के लिए एक हैश मैप ने रनटाइम को संशोधित किया है।Θ(n)O(1)

इसलिए, हम निम्नलिखित एल्गोरिथ्म का उपयोग कर सकते हैं:

  1. एक हैश मानचित्र आवंटित करें । पर ओवररेट करें । प्रत्येक तत्व , देखी जाने वाली घटनाओं की संख्या बढ़ाएँ, अर्थात ।HAiAH(i)++

  2. हैश मैप के प्रमुख सेट के माध्यम से आइटरेट करें, और जांचें कि किस कुंजी में आवृत्तियों की एक समान संख्या है।

अब यह एक सरल एल्गोरिथ्म है जो वास्तव में किसी भी बड़ी चाल का उपयोग नहीं करता है, लेकिन कभी-कभी यह भी होता है। यदि नहीं, तो आप यह निर्दिष्ट करना चाह सकते हैं कि आप किस स्थान पर प्रतिबंध लगाते हैं।


मैं अभी भी जानना चाहूंगा, यदि बहुपद स्थान का उपयोग करके गैर-यादृच्छिक समय एल्गोरिथ्म है। विशेष रूप से, क्या ऐसा कोई सैद्धांतिक प्रमाण है कि एकमात्र सम-विषम वस्तु को खोजना केवल विषम-घटित वस्तु को खोजने से कठिन है? O(n)
शुकुल

@ A.Schulz मुझे लगता है कि यह हैश तालिका का उपयोग करके -अप्रत्याशित-समय एल्गोरिथ्म है। मुझे याद है कि किसी ने मुझे एक -आलगोरिथम (या कुछ विशेष मामले के लिए, कहते हैं, विषम = 1 और यहां तक ​​कि 2) शायद स्टैक के साथ कहा था, लेकिन मैं इसे याद नहीं कर सकता। O(n)O(n)
ययपह्व

प्रत्येक हैशटेबल कार्यान्वयन में यह गुण नहीं है; आमतौर पर, लुकिंग नहीं है, amortized (afaik) भी नहीं है। वास्तव में, एक पूर्व चर्चा ने किसी भी कार्यान्वयन को उत्पन्न नहीं किया है जिसमें निरंतर समय की खोज होती है। क्या आप अधिक विशिष्ट हो सकते हैं? O(1)
राफेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.