2012-09-18 15 views
6

का समर्थन करता है यह एक साक्षात्कार प्रश्न है। आपको एक कतार डिजाइन करने की आवश्यकता है जिसमें पूर्णांक मान होते हैं और एक मेडेडियन() फ़ंक्शन होता है जो वर्तमान कतार का औसत तत्व देता है। आप ओ (एन) अतिरिक्त जगह का उपयोग कर सकते हैं।एक कतार डिजाइन जो getMedian फ़ंक्शन

प्राप्त कर सकते हैं मेडियन() समय जटिलता < ओ (एन) के साथ लागू किया जा सकता है?

उदाहरण के लिए: कतार निम्न मान होते हैं (2, 1, 2, 2, 6, 4, 2, 5) इस विधि रिटर्न 2 और उस वस्तु को दूर नहीं करता।

+1

मंझला 2 HRE नहीं है मन छद्म न? –

+0

क्षमा करें, मैंने अब उदाहरण बदल दिया है। – user913359

+0

क्या कतार में अधिकतम मात्रा में ऑब्जेक्ट्स हो सकती हैं? पुश और पॉप जैसे कतार के सभी अन्य कार्यों को एक ही जटिलता में रहने की आवश्यकता है? – Yarneo

उत्तर

9

आपकी समस्या के लिए जाना जाता कार्यान्वयन के रूप में तो यह है:

क्या क्रियान्वित करना चाहिए, 2 ढेर है, एक एक मिनट-ढेर और अन्य एक अधिकतम-ढेर हो जाएगा।
इसके अलावा आपको अपनी कतार में वस्तुओं की संख्या बताने के लिए एक पूर्णांक की आवश्यकता होगी।

ढेर के लिए की कमी इस प्रकार हैं:
1. मिनट-ढेर अपने कतार का बड़ा वस्तुओं होगा
2. अधिकतम-ढेर अपने कतार
3. की ​​छोटी वस्तुओं होगा अधिकतम-ढेर होता है या आपका मिनट-ढेर

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

यह ध्यान रखना महत्वपूर्ण है कि यदि आपका ढेर असमान हो जाता है, उदाहरण के लिए यदि आप एक निश्चित ढेर से "पॉप" करेंगे, तो आपको अन्य ढेर से हटाना होगा और इसे स्थानांतरित करना होगा। लेकिन यह कोई समस्या नहीं है जितना आपको निपटने की ज़रूरत है वह आपके ढेर की जड़ें और कुछ और नहीं है।

getMedian के समय जटिलता हे हो जाता है (1)

बस इस विषय पर एक लेख मिला: link

उत्तर टिप्पणी करने के लिए

अधिकतम-ढेर रखती आधा छोटी से छोटी तत्वों।
जब आप कतार में कोई नया नंबर जोड़ते हैं, तो आप पहले जांच लें कि कतार में ऑब्जेक्ट्स की संख्या क्या है।
यदि आप जो संख्या जोड़ रहे हैं वह एक संख्या भी है, तो इसका मतलब है कि इसे अधिकतम-ढेर में जोड़ा जाना चाहिए क्योंकि दोनों कतार आकार के बराबर हैं।
फिर आप देखते हैं कि अधिकतम-ढेर में अधिकतम क्या है।
यदि यह आपके नंबर से बड़ा है, तो आप इसे अधिकतम-ढेर में डाल सकते हैं।
यदि यह छोटा है, तो आपका नया नंबर न्यूनतम-ढेर में एक संख्या से बड़ा हो सकता है।
तो आप देखते हैं कि न्यूनतम-ढेर में न्यूनतम क्या है।
यदि आपका नंबर न्यूनतम से छोटा है, तो आप अधिकतम-ढेर में इसे सम्मिलित कर सकते हैं, यदि यह बड़ा है, तो आप मिनट को अधिकतम-ढेर में अधिकतम-ढेर में ले जाएं, और अपना नया नंबर डालें मिनट-ढेर।
यदि संख्या एक विषम संख्या है, तो आपको न्यूनतम-ढेर में जोड़ना होगा क्योंकि अधिकतम-ढेर में एक और है, और इसी तरह ..

इसके थोड़ा जटिल है, लेकिन अगर आप अभी भी न समझ में मैं तुम्हारे लिए यह कोडिंग

+0

यदि कतार में एन तत्व है तो अधिकतम अधिकतम ढेर कम से कम n/2 तत्वों (यानी अधिकतम-ढेर में तत्व) से अधिक है। लेकिन आप कैसे सुनिश्चित कर सकते हैं कि न्यूनतम-ढेर में अधिकतम अधिकतम ढेर की तुलना में कोई तत्व कम नहीं होता है, क्योंकि अधिकतम अधिकतम ढेर न्यूनतम-ढेर में किसी भी तत्व से अधिक है तो हमारे पास n/2 संख्याएं हैं जो अधिकतम अधिकतम ढेर से कम हैं। अगर मैं ग़लत हूं तो मेरी गलती सुझाएं। – user913359

+0

बीमार मेरी पोस्ट संपादित करें क्योंकि मैं इसे एक टिप्पणी के रूप में लिख नहीं सकता – Yarneo

+0

@ यर्नियो: लेख एक * प्राथमिकता * कतार के बारे में है, जबकि ओपी ने * कतार * के लिए कहा है। मुझे पता है कि आप ith अतिरिक्त तत्व प्राथमिकता (या -i, आपकी प्राथमिकताओं के काम के आधार पर) के आधार पर प्राथमिकता कतार का उपयोग करके एक कतार लागू कर सकते हैं, लेकिन यदि मैं इसे सही ढंग से समझता हूं तो यह आपके औसत गणना को खराब करता है - आपको औसत प्राथमिकता के साथ तत्व, यानी कतार के बीच में आइटम ... –

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