2011-05-31 18 views
40

मैं 5 क्रमबद्ध सरणी के औसत के लिए समाधान खोजने की कोशिश कर रहा हूं। यह एक साक्षात्कार के सवाल थे।5 क्रमबद्ध सरणी के औसत

जिस समाधान का मैं सोच सकता था वह 5 सरणी विलय कर रहा था और फिर औसत [ओ (एल + एम + एन + ओ + पी)] मिला।

मुझे पता है कि एक ही आकार के 2 क्रमबद्ध सरणी के लिए हम इसे लॉग (2 एन) में कर सकते हैं। [दोनों सरणी के औसत की तुलना करके और फिर प्रत्येक सरणी का 1 आधा फेंकना और प्रक्रिया दोहराएं]। .. मध्यस्थ ढूँढना क्रमबद्ध सरणी में निरंतर समय हो सकता है .. तो मुझे लगता है कि यह लॉग नहीं है (एन)? .. इसके लिए समय जटिलता क्या है?

1] क्या 5 सरणी के लिए एक समान समाधान है। क्या होगा अगर सरणी एक ही आकार के हों, तो क्या कोई बेहतर समाधान है?

2] मुझे लगता है कि यह 5 के लिए पूछा गया था, एन सॉर्टेड सरणी के लिए कुछ समाधान होगा?

किसी भी पॉइंटर्स के लिए धन्यवाद।

कुछ स्पष्टीकरण/सवाल मैं साक्षात्कारकर्ता के लिए वापस पूछा:
एक ही लंबाई के एरे हैं
=> कोई
मुझे लगता है कि सरणियों
=> हां

के मान में कोई ओवरलैप होगा

एक अभ्यास के रूप में, मुझे लगता है कि 2 सरणी के लिए तर्क विस्तार नहीं करता है। यहां एक प्रयास है:
3 सरणी के ऊपर 2 तर्कों के उपरोक्त तर्क को लागू करना: [3,7,9] [4,8,15] [2,3,9] ... medians 7,8,3
तत्वों को फेंक दें [3,7,9] [4,8] [3,9] .. औसत 7,6,6
तत्वों को फेंक दें [3,7] [8] [9] ..medians 5,8 , 9 ...
तत्व फेंक [7] [8] [9] .. median = 8 ... यह सही नहीं लगता है?

क्रमबद्ध तत्वों का मर्ज => [2,3,4,7,8,9,15] => उम्मीद मंझला = 7

+1

क्या वे प्रत्येक व्यक्तिगत रूप से क्रमबद्ध हैं, या क्या प्रत्येक सरणी भी उस श्रेणी का प्रतिनिधित्व करती है जिसमें किसी अन्य सरणी से कोई मूल्य नहीं है? यानी यदि किसी के पास श्रेणी 1-5 में मूल्य है, तो क्या दूसरे के पास समान श्रेणी में मूल्य हो सकते हैं? यदि नहीं, तो आपको केवल सरणी (निम्नतम से उच्चतम सीमा) के क्रम को निर्धारित करने की आवश्यकता है, उनकी सभी लंबाई को योग करें, मध्यम तत्व के लिए 2 से विभाजित करें और उस तत्व में उस सरणी पर जाएं। –

+0

धन्यवाद फिलिप-एफकेयू। मैंने आपके सवालों को संबोधित किया। – codeObserver

+2

यह एक कुख्यात समस्या है क्योंकि विचार अपेक्षाकृत आसान है लेकिन सही ढंग से लागू करना बेहद मुश्किल है। के> 2 के लिए, कार्यान्वयन खराब हो जाता है। मेरे लिए, तकनीकी साक्षात्कार के लिए यह एक अच्छा नहीं है। – galactica

उत्तर

25

(यह दो सरणियों के लिए अपने विचार का सामान्यीकरण है।)

यदि आप पांच सरणी के पांच मध्यस्थों को देखकर शुरू करते हैं, तो जाहिर है कि समग्र औसत पांच सबसे छोटे और पांच मध्यस्थों में से सबसे बड़ा होना चाहिए।

सबूत इस तरह कुछ चला जाता है: यदि मध्यस्थों का न्यूनतम है, और बी मध्यस्थों का अधिकतम है, तो प्रत्येक सरणी में इसके आधे से भी कम तत्व कम से कम इसके तत्वों के आधे से भी कम हैं ख। परिणाम निम्नानुसार है।

तो इसमें से युक्त सरणी में, संख्याओं को कम से कम फेंक दें; बी युक्त सरणी में, बी से अधिक संख्याओं को फेंक दें ... लेकिन केवल दोनों सरणी से तत्वों की संख्या को फेंक दें।

यही है, यदि कोई है, तो इसकी सरणी की शुरुआत से जे तत्व हैं, और बी इसके सरणी के अंत से के तत्व हैं, तो आप पहले सर (जे, के) तत्वों को किसी सरणी से निकालते हैं और अंतिम मिनट (जे, के) बी के सरणी से तत्व।

Iterate जब तक आप कुल 1 या 2 तत्वों तक नहीं हैं।

इनमें से प्रत्येक ऑपरेशन (यानी, एक क्रमबद्ध सरणी के मध्यस्थ को ढूंढना और सरणी तत्वों को किसी सरणी के प्रारंभ या अंत से फेंकना) निरंतर समय है। तो प्रत्येक पुनरावृत्ति निरंतर समय है।

प्रत्येक पुनरावृत्ति कम से कम एक सरणी से तत्वों (आधे से अधिक) को फेंकता है, और आप केवल पांच सरणी में से प्रत्येक के लिए लॉग (एन) बार कर सकते हैं ... तो समग्र एल्गोरिदम लॉग है (एन) ।

[अपडेट]

हिमाद्री चौधरी टिप्पणी में बताते हैं, मेरे समाधान अधूरा है; चिंता करने के लिए बहुत सारे विवरण और कोने के मामले हैं। तो, चीजों को थोड़ा सा करने के लिए ...

पांच सरणी आर में से प्रत्येक के लिए, आर [एन/2-1] के रूप में अपने "निचले औसत" को परिभाषित करें और इसके "ऊपरी माध्य" को आर [एन/2 ], जहां एन सरणी में तत्वों की संख्या है (और सरणी 0 से अनुक्रमित हैं, और 2 राउंड नीचे विभाजन)।

"ए" निम्न मध्यस्थों में से सबसे छोटा हो, और "बी" ऊपरी मध्यस्थों में से सबसे बड़ा हो। यदि सबसे छोटे ऊपरी मध्यस्थ के साथ छोटे निचले मध्य और/या एकाधिक सरणी के साथ कई सरणी हैं, तो विभिन्न सरणी से ए और बी चुनें (यह उन कोने मामलों में से एक है)।

अब

, हिमाद्री के सुझाव उधार: के सभी तत्वों को ऊपर मिटा देगा और अपनी सरणी से एक सहित, और करने के लिए नीचे और उसके सरणी से ख सहित सभी तत्वों, देखभाल करने के दोनों सरणियों से तत्वों का एक ही नंबर दूर करने के लिए । ध्यान दें कि ए और बी एक ही सरणी में हो सकता है; लेकिन यदि ऐसा है, तो उनके पास समान मूल्य नहीं हो सकता है, अन्यथा हम उनमें से एक को एक अलग सरणी से चुनने में सक्षम होते। तो यह ठीक है अगर यह चरण उसी सरणी की शुरुआत और अंत से तत्वों को फेंक देता है।

जब तक आपके पास तीन या अधिक सरणी हों Iterate। लेकिन एक बार जब आप केवल एक या दो सरणी पर आ जाते हैं, तो आपको समावेशी के बजाय अनन्य होने के लिए अपनी रणनीति बदलनी होगी; आप केवल तक मिटाते हैं लेकिन ए और डाउन सहित बी सहित नहीं। इस तरह जारी रखें जब तक कि शेष एक या दो सरणी में कम से कम तीन तत्व होते हैं (गारंटी देते हैं कि आप प्रगति करते हैं)।

अंत में, आप कुछ मामलों में कम हो जाएंगे, जिनमें से सबसे कठिन दो सरणी शेष हैं, जिनमें से एक में एक या दो तत्व हैं। अब, अगर मैंने आपको पूछा: "एक क्रमबद्ध सरणी को एक या दो अतिरिक्त तत्वों को देखते हुए, सभी तत्वों के औसत को ढूंढें", मुझे लगता है कि आप इसे लगातार समय में कर सकते हैं। (फिर, हथौड़ा देने के लिए विवरणों का एक गुच्छा है, लेकिन बुनियादी विचार यह है कि एक सरणी में एक या दो तत्व जोड़ना "औसत के चारों ओर धक्का नहीं देता है।)

+0

ऐसा लगता है कि हम इस दृष्टिकोण से पहले और आखिरी सरणी को कम करते हैं। क्या आप एक उदाहरण के साथ समझा सकते हैं, यहां मेरी 3 कोशिशों के लिए प्रयास है ... [3,7,9] [4,8,15] [2,3,9] ... medians 7,8,3 .. फेंक तत्व [3,7,9] [4,8] [3,9] .. औसत 7,6,6 .. तत्व फेंक [3,7] [8] [9] ..medians 5,8,9। .. तत्व फेंक [7] [8] [9] .. median = 8 ... यह सही प्रतीत नहीं होता है? – codeObserver

+0

आप पहले और आखिरी सरणी दोनों को कम करते हैं, लेकिन चलने वाले समय के सबूत के लिए आपको केवल यह जानने की आवश्यकता है कि आप कम से कम एक सरणी को फेंक दें। मुझे नहीं पता कि ओ (लॉग एन) को हरा करना संभव है या नहीं। वैसे साक्षात्कार सवाल, वैसे भी। – Nemo

+2

समाधान को संशोधित किया जाना चाहिए ताकि आप संख्याओं को = = अधिकतम माध्य में फेंक दें और <= सबसे छोटे औसत (सख्त> या <) के बजाय। अन्यथा, एक सरणी में केवल 1 तत्व है, तो आप कुछ भी फेंकने में सक्षम नहीं होंगे, और पूरी प्रक्रिया ठीक से लटकाएगी। अन्यथा, यह एक अच्छा समाधान है। –

1

लागू करने के लिए बहुत सीधे होना चाहिए 5 सरणी के लिए एक ही विचार।

सबसे पहले, प्रश्न को अधिक सामान्य में परिवर्तित करें। एन में ढूँढना KTH तत्व द्विआधारी खोज के साथ प्रत्येक क्रमबद्ध सरणी में वें तत्व सरणियों

  1. ढूँढें (K/नहीं) हल कर कहते हैं, K1, के 2 ... केएन

  2. Kmin = मिनट (K1 .. केएन), Kmax = अधिकतम (के 1 ... केएन)

  3. किमिन से कम या सभी Kmax से बड़े तत्वों को फेंक दें, कहें कि एक्स तत्वों को फेंक दिया गया है। शेष तत्व

+0

से स्ट्रिंग कर रहा हूं अकेले बाइनरी खोज लॉग (एन) है, और आप इसे लॉग (एन) बार कर रहे हैं, इसलिए यह ओ ((लॉग (एन))^2 है)। लेकिन आप ओ (लॉग एन) में इस समस्या को हल कर सकते हैं :-) – Nemo

+1

एच सरणी सॉर्ट की गई है, इसलिए आपको अपने (एन/के) सबसे छोटे तत्वों को खोजने के लिए बाइनरी खोज की आवश्यकता नहीं है। वे सिर्फ ए 1 [एन/के], ए 2 [एन/के] हैं, .... – JeffE

+0

मुझे नहीं लगता कि 'Kmax' का उपयोग 1 और 2 में क्या है .. आपको शायद _If 0 <(K-Xₙ) greybeard

2

आप 5 सरणियों की एक पूरी मर्ज करने की ज़रूरत नहीं है के साथ वें क्रमबद्ध सरणियों में तत्व - (एक्स कश्मीर)

  • ढूंढें अब तक इस प्रक्रिया को दोहराएँ।जब तक आपके पास (एल + एन + ओ + पी + क्यू)/2 तत्व नहीं होते हैं तब तक आप एक मर्ज सॉर्ट कर सकते हैं, तो आपके पास औसत मूल्य हो।

  • +3

    आपको इस तरह की तुलना करने की भी आवश्यकता नहीं है - केवल तुलना। आपको केवल 5 सॉर्ट किए गए सरणी के सभी सदस्यों के माध्यम से आइटम को आधे रास्ते को सहेजने की आवश्यकता है। – xpda

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