0..N

2010-12-10 21 views
5

में एक इनपुट से अंतराल की औसत संख्या सवाल उभर आए जब सवाल "इस सेट [0..N] को कवर करने वाले में खोजें कश्मीर लापता संख्या" की जांच।0..N

प्रश्न सीएस के लिए कहा के लेखक समीकरण के आधार पर जवाब के बजाय जवाब देता है, और उनके प्रस्ताव इनपुट सॉर्ट करने के लिए और फिर इस पर पुनरावृति कश्मीर लापता संख्याओं को सूचीबद्ध करना था।

हालांकि यह मेरे लिए ठीक लगता है, यह भी अपमानजनक लगता है।

  • एन = 200
  • कश्मीर = 2 (हम विचार करेंगे कश्मीर < < एन)
  • लापता तत्वों:: चलो एक उदाहरण लेते हैं 53, 75

"हल कर" सेट कर सकते हैं के रूप में प्रतिनिधित्व किया जा सकता है: [0, 52] U [54, 74] U [76, 200], जो सेट के सभी मूल्यों की गणना करने से अधिक कॉम्पैक्ट है (और ओ (के) ऑपरेशंस में लापता संख्याओं को पुनर्प्राप्त करने की अनुमति देता है, यदि सेट सॉर्ट किया गया है तो ओ (एन) के साथ तुलना की जा सकती है)।

हालांकि इस अंतिम परिणाम है, लेकिन निर्माण के दौरान अंतराल की सूची बहुत बड़ा हो सकता है, के रूप में हम एक समय में तत्वों एक फ़ीड ....

हमें, इसलिए, एक और चर परिचय करते हैं: I सेट के तत्वों की संख्या बनें जिन्हें हमने अभी तक संरचना में खिलाया है। फिर, हम सबसे खराब हो सकते हैं: min((N-K)/2, I) अंतराल (मुझे लगता है ...)

जिसमें से हम कटौती करते हैं कि निर्माणाधीन अंतराल की संख्या अधिकतम [0..एन] में सबसे खराब है, सबसे खराब मामले (N-K)/2 इस प्रकार O(N) है।

मेरे पास है लेकिन एक आंत लग रहा है कि अगर इनपुट, यादृच्छिक है बजाय विशेष रूप से तैयार किया जा रहा है, हम एक बहुत कम बाध्य हो सकती है ... और इस तरह हमेशा इतनी पेचीदा प्रश्न:

कितना अंतराल। .. औसतन ?

+1

मुझे लगता है कि इसे गणित में पूछना बेहतर है। स्टैकएक्सचेंज, यह एक संयोजन समस्या –

+0

समीकरण-आधारित उत्तरों के बजाय सीएस उत्तर है? ऐसा कुछ नहीं है। कम्प्यूटेशनल विधियों का उपयोग करके समीकरण हल किए जा सकते हैं। –

+0

@Lior: [विडंबना] धन्यवाद, मुझे नहीं पता था! [विडंबना बंद] समीकरणों को विशिष्ट गणितीय ज्ञान की आवश्यकता होती है, क्योंकि आपको पहले यह जानना होगा कि आपका सिस्टम सुलभ होगा, और कौन सी संपत्ति कहा गया समीकरण बनाने के लिए उपयोग की जाती है, तो यह वास्तव में एक विशेष समाधान है (व्यक्तिगत रूप से मुझे इस तरह के समाधान के साथ आने के लिए कठोर दबाव डाला जाता था) यदि आपके पास बेहतर फॉर्मूलेशन है, तो मैं सवाल सुधारने के लिए तैयार हूं ... –

उत्तर

1

सॉर्टिंग के साथ प्रस्तावित एक बनाम आपका दृष्टिकोण एक शास्त्रीय व्यापार-बंद प्रतीत होता है जिसमें संचालन सस्ता है और कौन सा महंगा है।

मैं अपने अंकन थोड़ा संशय है, तो मुझे मेरे हाल उपयोग करने की अनुमति दें:

S सेट होने दो। n सेट में आइटमों की संख्या होने दें: n = |S|max सेट में सबसे बड़ी संख्या होने दें: max = max(S)k सेट में मौजूद तत्वों की संख्या होने दें: k = |{0,...,max} \ S|

सॉर्टिंग समाधान के लिए, हम हैशिंग का उपयोग करके n तत्वों को S में बहुत सस्ते रूप से सम्मिलित कर सकते हैं। यह O(n) की उम्मीद होगी। फिर k अनुपलब्ध तत्व ढूंढने के लिए, हम सेट को O(nlogn) में सॉर्ट करते हैं, और उसके बाद अनुपलब्ध तत्व O(n) में निर्धारित करते हैं।

n तत्व जोड़ने के लिए कुल लागत है और फिर अनुपलब्ध k तत्वों को O(n) + O(nlogn) + O(n) = O(nlogn) अपेक्षित लगता है।


आप एक अलग दृष्टिकोण है जिसमें हम S के घने सबसेट की एक सूची के रूप में सेट का प्रतिनिधित्व करते सुझाव देते हैं। आप इस तरह की डेटा संरचना कैसे कार्यान्वित करेंगे? मैं एक क्रमबद्ध पेड़ (एक सूची के बजाय) का सुझाव देता हूं ताकि एक सम्मिलन कुशल हो जाए। क्योंकि आपको एक नया तत्व e डालने के लिए क्या करना है? मुझे लगता है कि आपके पास करने के लिए:

  1. पेड़ जहां e जोड़ा जा सकता है
  2. एक सबसेट पहले से ही e मौजूद होता है तो में संभावित उम्मीदवार के सबसेट (रों) का पता लगाएं, कुछ भी नहीं किया जा सकता है।
  3. एक सबसेट e+1 होता है और एक और सबसेट e-1 होता है, सबसेट एक साथ मर्ज और परिणाम
  4. तो एक सबसेट पहले से ही e+1 शामिल करने के लिए e जोड़ने के लिए, लेकिन e-1S में निहित नहीं है, कि सबसेट के e जोड़ देते हैं तो
  5. एक सबसेट पहले से ही e-1 शामिल है, लेकिन e+1S में निहित नहीं है, तो
  6. अन्यथा उस सबसेट को e जोड़ने के लिए, एक नया सबसेट केवल तत्व e और डालने पकड़े बनाने यह पेड़ में।

हम उम्मीद कर सकते हैं कि उपरोक्त संचालन के लिए आवश्यक सबसेट ढूंढने से O(logn) लेता है। 4 या 5 के संचालन निरंतर समय लेते हैं यदि हम सबसेट्स के पूर्णांक के रूप में सबसेट का प्रतिनिधित्व करते हैं (हमें केवल ऊपरी सीमा में कमी या वृद्धि करना है)। 3. और 6. संभावित वृक्ष संरचना को बदलने की आवश्यकता होती है, लेकिन हम उस पर सबसे O(logn) अपनाए जाने की अपेक्षा है, तो पूरे "डालें" से अधिक नहीं O(logn) ले जाएगा।

अब इस तरह के डेटास्ट्रक्चर के साथ, हम आसानी से k पेड़ को पार करने और किसी भी सबसेट में संख्याओं को इकट्ठा करके गायब संख्या निर्धारित कर सकते हैं। लागत पेड़ है, जो <= n/2 है में नोड्स की संख्या में रेखीय हैं, इसलिए कुल लागत के लिए O(n) हैं।

हालांकि, अगर हम फिर से पूरा क्रम के संचालन पर विचार, हम n आवेषण O(nlogn) + O(n) कश्मीर संख्या लापता को खोजने के लिए के लिए मिलता है, तो कुल लागत फिर से O(nlogn) हैं।

यह पहली एल्गोरिथ्म की उम्मीद की लागत की तुलना में बेहतर नहीं है।


एक तिहाई समाधान एक बूलियन array उपयोग करने के लिए सेट और सेट में सबसे बड़ी तत्व के लिए एक एकल पूर्णांक max प्रतिनिधित्व करने के लिए है।

एक तत्व e सेट में जोड़ा जाता है, तो आप array[e] = true निर्धारित किया है। आप table expansion का उपयोग कर सेट के चर आकार को कार्यान्वित कर सकते हैं, इसलिए सरणी में तत्व डालने के लिए लागत स्थिर है।

गायब तत्वों को पुनर्प्राप्त करने के लिए, आप केवल उन तत्वों को f एकत्र करें जहां array[f] == false। इसमें O(max) लगेगा।

एन तत्वों को सम्मिलित करने और के गायब लोगों को खोजने के लिए कुल लागत इस प्रकार है: O(n) + O(max)। हालांकि, max = n + k, और इसलिए हम कुल लागत O(n + k) के रूप में प्राप्त करते हैं।


एक चौथाई विधि है जो एक क्रॉस ओवर तीसरे एक और एक है, जो भी हैशिंग का उपयोग करता है, लेकिन छँटाई की आवश्यकता नहीं है हैशिंग का उपयोग कर के बाद एक है के बीच।

अपने सेट S को हैश सेट में स्टोर करें, और S में अधिकतम तत्व को एक चर max में स्टोर करें। k गायब वाले लोगों को खोजने के लिए, पहले परिणाम सेट आर उत्पन्न करें जिसमें सभी नंबर {0,...,max} शामिल हैं। फिर S से अधिक सक्रिय करें और में R से प्रत्येक तत्व को हटाएं।

इसके लिए लागत भी O(n + k) है।

+0

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

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