2011-09-28 16 views
5

एक सरणी दी जाती है जैसे कि उसके तत्व का मान 0 (के -1) के माध्यम से 0 वें इंडेक्स से बढ़ता है। के पर मान न्यूनतम है, और यह n वें तत्व के माध्यम से फिर से बढ़ना शुरू हो जाता है। न्यूनतम तत्व खोजें।एक सरणी में कम से कम तत्व खोजें, जिसमें एक पैटर्न

अनिवार्य रूप से, इसकी एक क्रमबद्ध सूची किसी अन्य में संलग्न होती है; उदाहरण: (1, 2, 3, 4, , 1, 2, 3)।

मैंने सभी प्रकार के एल्गोरिदम की कोशिश की है जैसे बल्बिंग मिनी-हीप, त्वरित चयन या केवल सादा ट्रैवर्सिंग। लेकिन इसे ओ (एन) से नीचे नहीं मिल सकता है। लेकिन इस सरणी में एक पैटर्न है, जो कुछ बाइनरी खोज प्रकार की चीज का सुझाव देना संभव है, और जटिलता ओ (लॉग एन) जैसी कुछ होनी चाहिए, लेकिन कुछ भी नहीं मिल सकता है। विचार ??

धन्यवाद

+0

क्या आपका मतलब है ** ** 0 से 0 तक घटता है? –

+0

नहीं, यह के से कम से कम किसी भी मूल्य से कम हो सकता है, फिर से कम हो सकता है और फिर फिर से बढ़ना शुरू हो जाता है। इसकी तरह हमने एक सूची में एक के बाद दो क्रमबद्ध सरणी रखी है और हमें विलय बिंदु खोजने की जरूरत है। –

+0

मैंने विचार को स्पष्ट रूप से स्पष्ट करने के लिए प्रश्न संपादित किया है, क्योंकि मैंने गलत समझा (और स्पष्ट रूप से केवल एक ही नहीं था)। @ जिम मिशेल स्पष्ट स्पष्टीकरण के लिए क्रेडिट प्राप्त करता है। – derobert

उत्तर

4

नहीं ड्रॉप कहीं भी हो सकता है, इसकी कोई संरचना नहीं है।

चरम

1234567890 
9
1234056789 
1357024689 

यह न्यूनतम तत्व पाने के लिए कम कर देता है पर विचार करें।

+0

मुझे ऐसा लगता है ... वैसे भी जवाब के लिए धन्यवाद। –

1

बाइनरी विभाजन पर एक-तत्व ओवरलैप के साथ, घटती रेंज के लिए एक चौड़ाईवार बाइनरी खोज करें। दूसरे शब्दों में, यदि आप था, 17 तत्वों, तत्वों

0,8 
8,16 
0,4 
4,8 
8,12 
12,16 
0,2 
2,4 

तुलना आदि, एक मामले में जहां बाईं तत्व सही से अधिक है की तलाश में कहते हैं।

एक बार जब आप ऐसी सीमा पाते हैं, तो उस श्रेणी के भीतर एक ही बाइनरी खोज कर लें। तब तक दोहराएं जब तक कि आप आसन्न जोड़ी को कम न करें।

औसत जटिलता ओ (लॉग एन) से कम नहीं है, ओ (एन) के सबसे खराब मामले के साथ। क्या कोई भी कठोर औसत-जटिलता अनुमान प्राप्त कर सकता है? यह लगभग "आधे रास्ते" ओ (लॉग एन) और ओ (एन) के बीच लगता है, लेकिन मुझे नहीं पता कि इसका मूल्यांकन कैसे किया जाए। यह मूल्यों की सीमाओं और एक सदस्य से अगले सदस्य तक की वृद्धि के आकार पर किसी भी अतिरिक्त बाधाओं पर भी निर्भर करता है।

यदि तत्वों के बीच वृद्धि हमेशा 1 होती है, तो ओ (लॉग एन) समाधान होता है।

+0

अच्छा! शायद औसत औसत केस व्यवहार है, लेकिन सबसे बुरा मामला अभी भी ओ (एन) है, मुझे लगता है। मान लीजिए कि ब्रेक लग रहा था [... 50, 51, 46, 60, ...]। आप केवल निम्नतम स्तर पर पाएंगे, और यह कहां पर निर्भर करता है, यह सब कुछ खोज सकता है। मुझे लगता है कि आपको यह दिमाग में हो सकता है ("यह मूल्यों की सीमाओं और एक सदस्य से अगले सदस्य तक की वृद्धि के आकार पर किसी भी अतिरिक्त बाधाओं पर भी निर्भर करता है।" –

+0

@ टॉम - धन्यवाद! हाँ, सबसे बुरा मामला ओ (एन) है। कुछ बाधाओं के साथ, परीक्षण को डुबकी पकड़ने की अधिक संभावना के लिए "दाएं से अधिक बाएं" से बदला जा सकता है। चरम मामले में जहां संख्याएं क्रमिक होने के लिए जानी जाती हैं, तो आप जांच सकते हैं कि सही संख्या _precisely_ x बाईं ओर से अधिक है, जो इसे सबसे खराब स्थिति ओ (लॉग एन) में ले जाती है। –

1

यह ओ (एन) से कम में नहीं किया जा सकता है।

इस तरह का सबसे खराब स्थिति हमेशा हमें परेशान कर रखना होगा -

बढ़ती सूची A1, A2, A3 .... ए, ए + 1 ... एक

सिर्फ एक विचलन के साथ

एके < एके -1 उदाहरण 1,2,3,4,5,6,4,7,8,9,10

और अन्य सभी संख्या 'k' या 'ए'

0

सरल समाधान के मूल्य के बारे बिल्कुल शून्य जानकारी पकड़ केवल तब तक सूची के माध्यम से देखना है जब तक कि अगला मान वर्तमान से कम न हो, या वर्तमान मूल्य से अधिक मान प्राप्त करने के लिए पिछड़ा हो। वह ओ (एन) है।

दोनों समवर्ती रूप से करना अभी भी ओ (एन) होगा लेकिन चलने का समय शायद तेज होगा (जटिल प्रोसेसर/कैश कारकों के आधार पर)।

मुझे नहीं लगता कि आप ओ (एन) की तुलना में इसे बहुत तेजी से एल्गोरिदमिक रूप से प्राप्त कर सकते हैं क्योंकि बहुत से विभाजित और जीतने वाले खोज एल्गोरिदम एक क्रमबद्ध डेटा सेट पर भरोसा करते हैं।