यदि आपके पास सख्त स्पेस सीमा है तो बहु-पास स्कैनिंग आज़माएं।
कहें इनपुट में एन तत्व हैं और आप केवल अपनी स्मृति में एम तत्वों को पकड़ सकते हैं। यदि आप हैश-टेबल दृष्टिकोण का उपयोग करते हैं, तो सबसे बुरे मामले में आपको n/2 अद्वितीय संख्याओं को संभालने की आवश्यकता है ताकि आप m> n/2 चाहते हैं। यदि आपके पास वह बड़ा मीटर नहीं है, तो आप n तत्वों को k = (अधिकतम (इनपुट) -min (इनपुट))/(2m) समूहों में विभाजित कर सकते हैं, और आगे बढ़ें एन इनपुट तत्वों के समय स्कैन करें (सबसे खराब में मामला):
पहला रन: आप केवल 0hन्यूनतम (इनपुट) + एम * 2 के साथ जो भी तत्व हैंश-प्राप्त/डाल/चिह्न/क्योंकि सीमा में (न्यूनतम (इनपुट), न्यूनतम (इनपुट) + एम * 2) अधिकांश एम अद्वितीय तत्व हैं और आप इसे संभाल सकते हैं। यदि आप भाग्यशाली हैं तो आपको पहले से ही अद्वितीय मिल जाएगा, अन्यथा जारी रखें।
2 रन: केवल रेंज में मूल्य के साथ तत्वों पर कार्य करते हैं (न्यूनतम (इनपुट) + m * 2, न्यूनतम (इनपुट) + m * 4), और इतने पर है, इसके आगे
इस तरह, यदि आप एक हे (केएन) के लिए समय जटिलता समझौता, लेकिन आप एक अंतरिक्ष जटिलता हे (एम) के लिए बाध्य मिल
हैश टेबल वास्तव में इतना अधिक जगह नहीं लेते हैं: 'ओ (एन) '। यदि सरणी इतनी बड़ी है कि आपको इसे जगह में करना होगा, तो आप शायद इसे बाहरी प्रकार से करना चाहेंगे। – bdares
हालांकि, हैश की स्पेस-कॉम्प्लेक्सिटी 'ओ (एन) 'पर है (हालांकि कुछ छोटे' एक्स' के लिए 'सी> एक्स' हो सकती है, कार्यान्वयन के आधार पर)। मुझे "सॉर्ट पहला दृष्टिकोण" पसंद है। –
हां, लेकिन विलय-क्रम (इनस्थल) में अंतरिक्ष जटिलता शून्य है। – Thilo