इनपुट: एक सकारात्मक पूर्णांक K और एक बड़ा पाठ। पाठ को वास्तव में शब्द अनुक्रम के रूप में देखा जा सकता है। इसलिए हमें इस बारे में चिंता करने की ज़रूरत नहीं है कि इसे शब्द क्रम में कैसे तोड़ा जाए।
आउटपुट: पाठ में सबसे अधिक बार K शब्द।
मेरी सोच इस तरह की है।
पूरे शब्द अनुक्रम को पार करते हुए सभी शब्दों की आवृत्ति रिकॉर्ड करने के लिए एक हैश टेबल का उपयोग करें। इस चरण में, कुंजी "शब्द" है और मूल्य "शब्द-आवृत्ति" है। इसमें O (n) समय लगता है।
सॉर्ट (शब्द, शब्द-आवृत्ति) जोड़ी; और कुंजी "शब्द-आवृत्ति" है। यह सामान्य छँटाई एल्गोरिथ्म के साथ O (n * lg (n)) समय लेता है।
सॉर्ट करने के बाद, हम केवल पहले K शब्द लेते हैं। इसमें O (K) समय लगता है।
संक्षेप में, कुल समय हे (n + n lg (n) + K) the चूँकि K निश्चित रूप से N से छोटा है, इसलिए यह वास्तव में O (n lg (n)) है।
हम इसमें सुधार कर सकते हैं। दरअसल, हम सिर्फ शीर्ष K शब्द चाहते हैं। दूसरे शब्दों की आवृत्ति हमारे लिए चिंता का विषय नहीं है। तो, हम "आंशिक हीप छँटाई" का उपयोग कर सकते हैं। चरण 2) और 3) के लिए, हम सिर्फ छँटाई नहीं करते हैं। इसके बजाय, हम इसे होने के लिए बदल देते हैं
2 ') कुंजी के रूप में "शब्द-आवृत्ति" के साथ (शब्द, शब्द-आवृत्ति) जोड़ी का एक ढेर बनाएँ। ढेर बनाने में O (n) समय लगता है;
3 ') ढेर से शीर्ष कश्मीर शब्द निकालें। प्रत्येक निष्कर्षण ओ (lg (n)) है। तो, कुल समय हे (k * lg (n)) है।
संक्षेप में, यह समाधान लागत समय O (n + k * lg (n)) है।
यह सिर्फ मेरा विचार है। मुझे चरण 1 में सुधार करने का तरीका नहीं मिला है)।
मुझे आशा है कि कुछ सूचना पुनर्प्राप्ति विशेषज्ञ इस प्रश्न पर अधिक प्रकाश डाल सकते हैं।