स्थानांतरित अधिकतम खोजने के लिए रैखिक समय एल्गोरिथ्म


11

मान लें कि हमें एक सरणी जिसमें पूर्णांक होते हैं (आवश्यक रूप से अलग नहीं)।A[1..n]

चलो होना nonincreasing क्रम में सॉर्ट। हम गणना करना चाहते हैं एम = अधिकतम मैं [ एन ] बी [ मैं ] + मैं BA

m=maxi[n]B[i]+i.

स्पष्ट समाधान की छंटाई कर रहा है Aऔर फिर मी की गणना करता है m। यह एक एल्गोरिथ्म देता है जो सबसे खराब स्थिति में O (n \ lg n) समय पर चलता है O(nlgn)

क्या बेहतर करना संभव है? क्या हम रैखिक समय में एम की गणना कर सकते हैं m?


मेरा मुख्य प्रश्न ऊपर एक है। लेकिन समस्या के निम्नलिखित सामान्यीकरण के बारे में जानना दिलचस्प होगा।

चलो B होना A कुछ तुलना ओरेकल के अनुसार क्रमित और f दैवज्ञ द्वारा दिए गए एक समारोह। A और oracles के लिए और f को देखते हुए f, हम m = \ max_ {i \ _ in [n]} f (B [i], i) की गणना करने के लिए आवश्यक समय के बारे में क्या कह सकते हैं m=maxi[n]f(B[i],i)?

हम अभी भी ओ (n \ lg n) समय में मीटर की गणना कर सकते हैं । लेकिन क्या हम इस सामान्यीकृत मामले के लिए एक सुपर-रेखीय निचली सीमा साबित कर सकते हैं?mO(nlgn)

जवाब है हां अगर हम मान लेते हैं कि कम बाध्य पकड़ करता है पूर्णांकों पर सामान्य आदेश है और f एक "अच्छा" समारोह (एक लय, बहुपद, रैखिक, आदि) है?

जवाबों:


10

हम रैखिक समय में गणना कर सकते हैं ।m

सादगी के लिए मान लीजिए कि सरणियाँ 0 आधारित हैं: , । हम गणना करना चाहते हैं ।B [ 0 .. n - 1 ] m = max i B [ i ] + iA[0..n1]B[0..n1]m=maxiB[i]+i

चलो । स्पष्ट रूप से ।मीटर एक एक्स मीटरएक्स=अधिकतममैं[मैं]एक्स

चलो होना छँटाई के बाद। यदि हमारे पास बी [ k ] एक [ जे ] हूँ एक एक्स - एन बी [ कश्मीर ] + कश्मीर बी [ कश्मीर ] + ( n - 1 ) = एक [ जे ] + ( n[जे]बी[][जे]एक्स-n

बी[]+बी[]+(n-1)=[जे]+(n-1)(एक्स-n)+(n-1)=एक्स-1<एक्स

इसलिए हम को अनदेखा कर सकते हैं जब । हमें केवल रेंज में संख्याओं पर विचार करना होगा ।[ जे ] a एम एक्स - एन[जे][जे]एक्स-n[एक्स-n,एक्स]

हम में संख्याओं को क्रमबद्ध करने के लिए गिनती के प्रकार का उपयोग कर सकते हैं जो रैखिक समय में में हैं और गणना करने के लिए क्रमबद्ध सूची का उपयोग करते हैं ।[ एम एक्स - एन , एम एक्स ] एम[एक्स-n,एक्स]


... mmm ... लेकिन C [x] = C [x] +1+ की लागत क्या है? '
Marzio De Biasi

1
क्या आपके उत्तर में कोई समस्या है? क्योंकि यह मेरे लिए ठीक लगता है: आप कह रहे हैं कि हम केवल में मानों के साथ सरणी तत्वों के बारे में परवाह करते हैं , इसलिए हम गिनती के प्रकार का उपयोग कर सकते हैं। यह जब भी सामान्य समस्या के लिए काम करता है सभी के लिए । | f ( B [ i ] , i ) - B [ i ] | = O ( n ) i[-n,]|(बी[मैं],मैं)-बी[मैं]|=हे(n)मैं
सैशो निकोलोव

साभार @Marzio :) मैंने स्पष्टता के लिए आपके उत्तर को थोड़ा संपादित किया। मेरे संपादन को आगे बढ़ाने या संपादित करने के लिए स्वतंत्र महसूस करें।
केवह

1
यह समाधान किसी भी लिए भी काम करता है जहाँ सभी और ; । (एक्स,मैं)एक्समैंn|(एक्स,मैं)-एक्स|=हे(n)
केवह

@Kaveh: संपादन ठीक है! मैंने जवाब जल्दी से लिख दिया और मुझे इसकी शुद्धता पर भी यकीन नहीं था: -एस
मार्जियो डी बियासी

-1

यदि सरणी में अलग-अलग पूर्णांक हैं, तो , चूंकि में आसन्न प्रविष्टियों के बीच की दूरी कम से कम ; स्थिति और अधिक दिलचस्प है जब उन्हें अलग नहीं होना चाहिए।=अधिकतम()+1बी1

अपने अधिक सामान्य प्रश्न के लिए, ऐसी स्थिति की कल्पना करें जिसमें केवल "रोचक" हो जब । यह एक विरोधी तर्क जो क्वेरी के लिए बलों आप निर्माण संभव लगता है सभी के लिए इससे पहले कि आप पता कर सकते हैं , इसलिए आप सॉर्ट करने के लिए की जरूरत है करने के लिए उत्तर खोजें, जो तुलना करता है। (कुछ जटिलताएं हैं क्योंकि यह मामला हो सकता है कि हम परीक्षण कर सकते हैं कि क्या निरंतर समय में रैखिक क्वेरी के बजाय ।) यह मामला है भले ही। एक (उच्च-डिग्री) बहुपद है।i = j f ( B [ i ] , i ) i max i f ( B [ i ] , i ) A Ω ( n लॉग एन ) A [ i ] = B [ j ] f ( [ आई ] , जे ) एफ(बी[मैं],जे)मैं=जे(बी[मैं],मैं)मैंअधिकतममैं(बी[मैं],मैं)Ω(nलॉगn)[मैं]=बी[जे]([मैं],जे)


1
क्या होगा अगर A में n - 1 शून्य और एक एकल है? तब उत्तर n है, न कि 1.
ग्रिग्री यारोस्लावसेव

हाय युवल। में दोहराया संख्या हो सकती है । जैसा कि ग्रिगोरी ने कहा कि समाधान काम नहीं करता है।
केवह

मुझे लगता है कि मैं आपके विचार को निचली-बाउंड तर्क के लिए देखता हूं: हम एक एल्गोरिथ्म द्वारा बनाए गए क्वेरी जोड़े का उपयोग करके समय में समस्या को हल करने के लिए गणना कर सकते हैं । हमें यकीन है कि एल्गोरिथ्म प्रश्नों कर सकते हैं सब पर , लेकिन हम यकीन है कि यह क्वेरी अन्य नहीं जोड़े करता है नहीं कर सकता। हालाँकि हम अन्य जोड़ियों के लिए को एक अलग मूल्य मान सकते हैं ताकि हम उन जोड़ियों को त्याग सकें। B f o ( n lg n ) f ( B [ i ] , i ) fबी(nएलजीn)(बी[मैं],मैं)
केवह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.