अनुपलब्ध तत्व समस्या के लिए समय-स्थान व्यापार


14

यहाँ एक अच्छी तरह से ज्ञात समस्या है।

सकारात्मक पूर्णांकों की एक सरणी A[1n] को देखते हुए, सरणी में नहीं सबसे छोटे धनात्मक पूर्णांक को आउटपुट करें।

समस्या को O(n) स्थान और समय में हल किया जा सकता है : सरणी को पढ़ें, O(n) स्थान में ट्रैक रखें कि क्या 1,2,,n+1 , सबसे छोटे तत्व के लिए स्कैन करें।

मैंने देखा कि आप समय के लिए अंतरिक्ष व्यापार कर सकते हैं। यदि आपके पास O(nk)मेमोरी केवल, आप इसेkराउंडमें कर सकते हैंऔर समयप्राप्तकर सकते हैंO(kn)। एक विशेष मामले में, स्पष्ट रूप से निरंतर-अंतरिक्ष द्विघात-समय एल्गोरिथ्म है।

मेरा सवाल यह है कि:

इस इष्टतम दुविधा यह है है, यानी timespace=Ω(n2) ? सामान्य तौर पर, कोई व्यक्ति इस प्रकार की सीमा कैसे साबित करता है?

O (1) में सरणियों के लिए बाध्य अंकगणित और यादृच्छिक अभिगम के साथ RAM मॉडल मान लें।

इस समस्या के लिए प्रेरणा: एक-टेप मॉडल में पलिंड्रोम्स के लिए समय-स्थान का व्यापार (उदाहरण के लिए, यहां देखें )।


2
नहीं, आप अपने सरणी को में क्रमबद्ध कर सकते हैं, फिर लापता संख्या ज्ञात करें (पहली संख्या 1 होनी चाहिए, दूसरी 2 होनी चाहिए, ... अन्यथा आपको यह मिल जाएगी) O (n) में, यह छँटाई हो सकती है inplace mergesort, साधनों के साथ हे ( 1 ) अतिरिक्त स्थान, इसलिए समय अंतरिक्ष के अंतर्गत आता है हे ( एन लॉग इन करें n ) । मुझे नहीं पता कि मुझे आपकी समस्या मिली या नहीं (इस कारण मैंने इसका जवाब नहीं दिया, साथ ही मुझे नहीं पता कि क्या कोई बेहतर बाध्य है)। O(nlogn)O(1)O(nlogn)

मुझे लगता है कि इनपुट केवल-पढ़ने के लिए है। (यदि ऐसा नहीं है, तो समस्या को समय / O ( 1 ) स्थान में बेहतर तरीके से हल किया जा सकता है: 2 से गुणा करें, और O ( n ) / O ( n ) एल्गोरिथ्म का अनुकरण करने के लिए समता का उपयोग करेंO(n)O(1)O(n)/O(n)
sdcvvc

निरंतर अंतरिक्ष एल्गोरिथ्म क्या है? ऐसा लगता है कि आप की आवश्यकता होगी के लिए अंतरिक्ष एन 2 संस्करण है कि मेरे पास "स्पष्ट"lognn2
Xodarap

इस मॉडल में, शब्द-आकार पूर्णांक लेते हैं ; अगर यह अधिक सुविधाजनक है, आप के साथ प्रश्न के किसी भी संस्करण जवाब कर सकते हैं समय अंतरिक्ष = Ω ( एन 2O(1)कुछ स्थिरk के लिएtimespace=Ω(n2logkn)k
sdcvvc

@ sdcvvc, मैं आपके एल्गोरिथ्म को नहीं समझ सकता , क्या आप इसे थोड़ा और वर्णन करेंगे? (बस ध्यान दें कि बिट्स में पढ़ना ( लॉग एन ) लेता है )। O(n)/O(1)O(logn)

जवाबों:


2

यह O(nlogn) शब्द संचालन और O(1) मेमोरी के शब्द (क्रमशः O(nlog2n) समय और O(logn) बिट-लेवल RAM मॉडल में किया जा सकता है। वास्तव में, समाधान निम्नलिखित अवलोकन पर आधारित होगा।

कहते हैं कि n0 सम और n1 विषम संख्याएँ हैं [1,n+1] (इसलिए n0n1 और n0+n1=n+1 )। तो फिर वहाँ है b{0,1} वहाँ पर सबसे कर रहे हैं ऐसी है कि nb1 समता के साथ मूल्यों b इनपुट में। वास्तव में, अन्यथा कम से कम n0इनपुट में भी और कम से कम n1 विषम मान, जिसका अर्थ है कि इनपुट में कम से कम n0+n1=n+1 मान हैं, विरोधाभास ( उनमें से केवल n हैं)। इसका मतलब है कि हम केवल गुम या केवल संख्याओं के बीच लापता संख्या की खोज जारी रख सकते हैं। एक ही एल्गोरिदम को बाइनरी नोटेशन के उच्च बिट्स पर भी लागू किया जा सकता है।

तो हमारा एल्गोरिथम ऐसा दिखेगा:

  1. मान लीजिए कि हम पहले से ही अब केवल देखते हैं कि x शेष सापेक्ष साथ निवेश में मानों 2b के बराबर किया जा रहा r[0,2b) लेकिन कम से कम देखते हैं x+1 श्रेणी की संख्याएं [1,n+1] है शेष r मोडुलो 2b (शुरुआत में हम जानते हैं कि b=0,r=0 )।

  2. कहें कि शेष r modulo 2 b + 1 के साथ इनपुट में x0 मान हैं और शेष r + 2 b modulo 2 b + 1 के साथ इनपुट में x 1 मान (हम इन संख्याओं को इनपुट के माध्यम से एकल पास में पा सकते हैं)। स्पष्ट रूप से, x 0 + x 1 = x । इसके अलावा, क्योंकि शेष आर मॉडुलो 2 बी के साथ इनपुट में कम से कम x + 1 नंबर हैं , कम से कम एक जोड़े मेंr2b+1x1r+2b2b+1x0+x1=xx+1r2b(r,b+1),(r+2b,b+1) satisfies the requirements of the step 1.

  3. We have found the missing number when 2bn+1: there is only one number in range [1,n+1] that may have remainder r modulo 2b (r itself if it is in range), so there are at most zero values in the input that have such remainder. So r is indeed missing.

स्पष्ट रूप से, एल्गोरिथ्म O(logn) चरणों में रुकता है, उनमें से प्रत्येक को O(n) समय (इनपुट सरणी पर एकल पास) की आवश्यकता होती है। इसके अलावा, स्मृति के केवल O(1) शब्दों की आवश्यकता होती है।


मुझे उस समय के बाद पूछे गए प्रश्न को देखकर खुशी हुई :)
sdcvvc

1

If I understand your definitions, this can be done in linear time with constant space. This is obviously the lowest bound, because we need to at least read the entire input.

The answer given in this question satisfies.

It's impossible to run this with less time or space, and adding extra time or space is useless, so there's no space-time tradeoff here. (Observe that n=O(n/k), so the tradeoff you observed doesn't hold asymptotically, in any case.)

In terms of your general question, I don't know of any nice theorems offhand which will help you prove space-time tradeoffs. This question seems to indicate that there isn't a (known) easy answer. Basically:

tsf,gLMf(t,s)g(t,s)

अज्ञात है, और एक मजबूत जवाब कई खुली समस्याओं (सबसे विशेष रूप से एससी के बारे में) को हल करेगा, जिसका अर्थ है कि कोई आसान समाधान मौजूद नहीं है।


nn+1

nkn/k passes to differentiate all answers. Assuming k=n/s then we run in nn/sn=sn time. So I think this proves what you want.

The difficulty is in showing that each time through we get only k bits. If you assume that our only legal operation is =, then we're good. However, if you allow more complex operations, then you'll be able to get more information.


3
The question you linked assumes that each number appears at most once. I do not make this assumption, so the solution does not apply. Thank you for second link.
sdcvvc

@sdcvvc: My mistake, I assumed you were using the version I'm familiar with. I don't have a complete answer, but it's too long for a comment - hopefully my edit is useful.
Xodarap

5
I don't buy your argument after "EDIT". Even if you can only collect k bits in a single pass, that's enough in principle to distinguish 2k possible outputs. So this argument can only imply a lower bound of n/2k passes, not n/k.
JeffE
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.