अच्छा, यह एक दिलचस्प साक्षात्कार प्रश्न है ... लगभग सभी तरह के प्रश्न आपके कौशल का परीक्षण करने के लिए हैं और सौभाग्य से, वास्तविक जीवन उदाहरणों पर सीधे लागू नहीं होते हैं। यह एक जैसा दिखता है, तो चलिए पहेली
जब आपका साक्षात्कारकर्ता "सर्वश्रेष्ठ" मांगता है, तो मेरा मानना है कि वह केवल प्रदर्शन के बारे में बात करता है।
उत्तर 1
30GB स्ट्रिंग्स बहुत सारे डेटा हैं। सभी तुलना-स्वैप एल्गोरिदम Omega(n logn)
हैं, इसलिए इसमें काफी समय लगेगा। जबकि O(n)
एल्गोरिदम हैं, जैसे गिनती सॉर्ट, वे जगह पर नहीं हैं, इसलिए आप 30 जीबी गुणा कर रहे हैं और आपके पास केवल 4 जीबी रैम है (स्वैपिंग राशि पर विचार करें ...), इसलिए मैं क्विकॉर्ट
के साथ जाऊंगा
उत्तर 2 (आंशिक)
सॉर्ट करने के बारे में सोचना शुरू करें। आप पहले प्रत्येक अक्षर के लिए समूहों में स्ट्रिंग्स को विभाजित करना चाहते हैं (रेडिक्स सॉर्ट दृष्टिकोण का उपयोग करके)। आप फ़ाइल को स्कैन करना चाहते हैं और, प्रत्येक प्रारंभिक अक्षर के लिए, स्ट्रिंग स्ट्रिंग (इसलिए कॉपी और डिलीट करें, कोई स्पेस कचरा नहीं) अस्थायी फ़ाइल में ले जाएं। आप प्रत्येक स्ट्रिंग के पहले 2, 3 या 4 वर्णों के लिए प्रक्रिया को दोहराना चाह सकते हैं। फिर, कई फ़ाइलों को सॉर्ट करने की जटिलता को कम करने के लिए, आप अलग-अलग स्ट्रिंग को प्रत्येक के भीतर अलग कर सकते हैं (अब क्विकॉर्ट का उपयोग करके) और आखिर में सभी फाइलों को मर्ज करें।इस तरह से आप अभी भी एक O(n logn)
लेकिन निष्पक्ष कम पर n
स्रोत
2011-01-17 14:23:25
अलग-अलग फ़ाइलों में संग्रहीत परिणामों के साथ विभाजित और जीतने वाले एल्गोरिदम की तरह लगता है तो अंत में विलय हो जाता है। – Omar