2011-07-07 17 views
15

के साथ सॉर्ट करने का समय चल रहा है मान लीजिए कि आपके पास ब्लैक-बॉक्स सबराउटिन था जो (log n)^a समय में एन तत्वों की सरणी से अधिकतम निकालने में सक्षम हो सकता है, जहां 0 <= a <= 1। आप एक इष्टतम सॉर्टिंग एल्गोरिदम बनाने की कोशिश कर रहे हैं जो इस सबराउटिन का उपयोग करता है।ब्लैक-बॉक्स findmax subroutine

स्पष्ट समाधान पूरे सरणी पर सबराउटिन को कॉल करना है, अंतिम तत्व के साथ अधिकतम स्वैप करना है, और फिर उप-दिनचर्या को A[1, n-1] पर A[1, 2] पर कॉल करें।

क्या कोई बेहतर एल्गोरिदम है जो समय से तेज़ चलता है, या स्पष्ट समाधान इष्टतम है?

+0

पहला अवलोकन: यदि आप ब्लैक बॉक्स अधिकतम दिनचर्या –

+0

का उपयोग नहीं करते हैं तो आप बेहतर नहीं कर सकते हैं। – user666866

+1

उन्होंने यह नहीं कहा कि आपके पास वस्तुओं की तुलना करने का एक बेहतर तरीका है। –

उत्तर

2

मैं सटीक जवाब पता नहीं है, लेकिन यहाँ कुछ परिणाम है कि इस सवाल का जवाब संकेत भोली से एक हो सकता है:

मान लीजिए हम विभाजित 4 टुकड़े में इनपुट (4 k से प्रतिस्थापित किया जा सकता);

प्रत्येक 4 टुकड़ों पर छंटनी एन/4 * (लॉग (एन/4)^ए) लेती है, परिणाम की आवश्यकता (एन/2 + एन/2 + एन) = 2 एन;

n/4 * (लॉग (एन/4)^एक) * 4 = n (logn^क) -n/4 * (log4)^एक,

कुल समय = n (logn^एक) - एन/4 * (लॉग 4)^ए + 2 एन

हालांकि, अगर एक = 1, rhs = n (लॉग (एन)^ए); अगर < 1, rhs> n (लॉग (एन)^ए)।

तो भी कोई वास्तविक दुनिया परिप्रेक्ष्य के बजाय बड़े-ओह परिप्रेक्ष्य, विभाजन & जीत दृष्टिकोण केवल यह अगर एक < 1 धीमा कर सकते हैं से विचार कर रहा है और कोई लाभ जब एक = 1 कर रहे हैं।

मुझे नहीं पता कि अन्य चालें हैं या नहीं। उम्मीद है कि यह कम से कम कुछ विचारों को उकसा सकता है!

+0

यदि आप एन का का काम करने की कोशिश करते हैं, तो यह काम नहीं करता है। कम से कम के = बहुपद (एन) काम नहीं करता है। शायद एन के अन्य कार्यों? –

+0

@Alexsandre हां, लेकिन सामान्य मामला टाइप करना एक कार्य बहुत थकाऊ है :) और यह मेरे लिए होता है कि 1 हो सकता है, यदि आवश्यक समाधान मिला, तो यदि यह 1 के साथ काम करता है तो हम कार होरे को हरा देंगे, जो संभावना नहीं है। –

+0

मामला ए = 1 वास्तव में सुधार स्वीकार नहीं करेगा, लेकिन एक <1 हो सकता है। –

4

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

संबंधित मुद्दे