2010-06-16 11 views
7

मेरे पास एक टेक्स्ट फ़ाइल है जिसमें वस्तुओं की एक बहुत लंबी सूची है। तो मैं उन्हें वर्णानुक्रम में सॉर्ट करना चाहता हूं लेकिन मैं सभी फाइल को स्मृति (रैम) में लोड नहीं करना चाहता हूं।मैं ऐसी फ़ाइल को कैसे क्रमबद्ध करूं जिसमें वस्तुओं की एक बहुत लंबी सूची हो?

मैंने फ़ाइल की सभी सामग्री को सरणी में लोड करने का प्रयास किया और जैसे ही मैं सामान्य रूप से उन्हें सॉर्ट करता हूं। लेकिन सिस्टम शिकायत करता है कि कोई स्मृति नहीं है !!

धन्यवाद, मोहम्मद

उत्तर

7

आप external sorting को पढ़ने की आवश्यकता होगी। मूल दृष्टिकोण merge sort जैसे कुछ प्रकार के विभाजन और जीतने के दिन का उपयोग करना है, जहां आप फ़ाइल के एक हिस्से को पढ़ और क्रमबद्ध करते हैं, फिर फ़ाइल के दूसरे भाग को पढ़ और क्रमबद्ध करते हैं, और जब आप अंत तक पहुंच जाते हैं तो आप विलय करते हैं एक साथ क्रमबद्ध भागों।

+1

आप बाहरी सॉर्टिंग के बारे में यहां एक अच्छा कोर्स देख सकते हैं। http://video.google.com/videoplay?docid=-978892635109400080# –

+0

यूनिक्स पर, कमांड लाइन का उपयोग करें: 'sort'। –

4

शायद STXXL (अतिरिक्त बड़े डेटा सेट के लिए मानक टेम्पलेट लाइब्रेरी) मदद करता है।

STXXL external sorting दूसरों के बीच प्रदान करता है।

+0

दिलचस्प .... –

0

आपको पूरी फ़ाइल को स्मृति में नहीं रखना है। यदि यह एक ऐसा कार्य है जिसे आपको अक्सर नहीं करना है, तो आप एक ऐसा एप्लिकेशन लिख सकते हैं जो इसे बहुत धीमा कर देता है। इस (छद्म) की तरह कुछ:

vector<int> linesProcessed; 
for (int i = 0; i < lineCount; i++) 
{ 
    if (linesProcessed contains i) continue; 
    string alphabeticalFirstLine; 
    int lineIndex; 
    foreach line in oldFile 
    { 
     if (line is before alphabeticalFirstLine) 
     { 
      alphabeticalFirstLine = line; 
      lineIndex = i; 
     } 
    } 
    write alphabeticalFirstLine to newFile; 
    vector.add(lineIndex); 
} 
clear vector; 
delete oldFile; 
rename newFile to oldFile; 
+0

इसे चयन क्रम (लगभग) कहा जाता है, सर्वोत्तम विचार नहीं। – unbeli

+1

@unbeli: मुझे पता है कि यह लगभग चयन प्रकार है। चयन सबसे बड़ा मूल्य के लिए भी खोज क्रमबद्ध करें। लेकिन मैंने लिखा, "यदि यह एक काम है तो आपको अक्सर ऐसा करने की ज़रूरत नहीं है ..." –

+0

भले ही कोई इसे अक्सर नहीं करता है, फिर भी जब वह एक साधारण मजबूत होता है तो उसे कमजोर एल्गोरिदम क्यों लागू करना चाहिए? – unbeli

0

आप उपयोग कर रहे हैं कुछ यूनिक्स की तरह ओएस आप तरह आदेश का उपयोग कर सकते हैं। यह स्मृति खपत के बारे में ख्याल रखेगा। उदाहरण के लिए "cat big_file | sort" जैसे कुछ काम करेंगे।

या आप लाइब्रेरी से अपना स्वयं का/बाहरी सॉर्टिंग लिख सकते हैं। हमें बताएं कि आप किस भाषा का उपयोग कर रहे हैं और शायद कोई आपको उपयोग करने के लिए सटीक लाइब्रेरी बताएगा।

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