मुझे ऐसे एल्गोरिदम की तलाश है जो बड़ी मात्रा में डेटा पर काम कर सकते हैं, यानी कि तब भी काम कर सकते हैं जब पूरे डेटा सेट को एक बार में मुख्य मेमोरी में नहीं रखा जा सकता है।
एकमात्र उम्मीदवार जो मुझे अब तक मिला है, वह मर्ज सॉर्ट है: आप एल्गोरिथ्म को इस तरह से लागू कर सकते हैं कि यह एक बार में सभी डेटा को मुख्य मेमोरी में पकड़े बिना प्रत्येक मर्ज पर सेट किए गए आपके डेटा को स्कैन करता है। मर्ज सॉर्ट की भिन्नता जो मेरे मन में है, वह इस लेख में सेक्शन ड्राइव टेप के साथ प्रयोग में वर्णित है ।
मुझे लगता है कि यह एक अच्छा समाधान है (जटिलता ओ (एनएक्स लॉग (एन)) के साथ) लेकिन मैं यह जानने के लिए उत्सुक हूं कि क्या अन्य (संभवतः तेज) छंटाई वाले एल्गोरिदम हैं जो बड़े डेटा सेट पर काम कर सकते हैं जो मुख्य मेमोरी में फिट नहीं होते हैं।
संपादित करें
यहां कुछ और विवरण दिए गए हैं, जैसे कि उत्तर:
- डेटा को समय-समय पर सॉर्ट किया जाना चाहिए, जैसे महीने में एक बार। मुझे कुछ रिकॉर्ड सम्मिलित करने की आवश्यकता नहीं है और डेटा को क्रमिक रूप से सॉर्ट किया गया है।
- मेरा उदाहरण पाठ फ़ाइल 1 GB UTF-8 पाठ के बारे में है, लेकिन मैं सामान्य रूप से समस्या को हल करना चाहता था, भले ही फ़ाइल 20 जीबी की हो।
- यह एक डेटाबेस में नहीं है और, अन्य बाधाओं के कारण, यह नहीं हो सकता है।
- डेटा को टेक्स्ट फ़ाइल के रूप में दूसरों द्वारा डंप किया जाता है, इस टेक्स्ट फ़ाइल को पढ़ने के लिए मेरा अपना कोड है।
- डेटा का प्रारूप एक पाठ फ़ाइल है: नई लाइन वर्ण रिकॉर्ड विभाजक हैं।
एक संभव सुधार जो मुझे ध्यान में था, वह फाइल को फाइलों में विभाजित करने के लिए था जो कि मेमोरी में सॉर्ट करने के लिए काफी छोटा है, और अंत में ऊपर वर्णित एल्गोरिथ्म का उपयोग करके इन सभी फाइलों को मर्ज करें।