ইনপুট: একটি ধনাত্মক পূর্ণসংখ্যার কে এবং একটি বড় পাঠ্য। পাঠ্যটি আসলে শব্দ সিকোয়েন্স হিসাবে দেখা যায়। সুতরাং কীভাবে এটি শব্দ শৃঙ্খলে বিভক্ত হবে তা নিয়ে আমাদের চিন্তা করার দরকার নেই।
আউটপুট: পাঠ্যের সবচেয়ে ঘন ঘন কে।
আমার চিন্তাভাবনা এমন।
পুরো শব্দের ক্রমটি অতিক্রম করার সময় সমস্ত শব্দের ফ্রিকোয়েন্সি রেকর্ড করতে একটি হ্যাশ টেবিল ব্যবহার করুন। এই পর্যায়ে, কীটি "শব্দ" এবং মানটি "শব্দ-ফ্রিকোয়েন্সি"। এটি O (n) সময় নেয়।
(শব্দ, শব্দ-ফ্রিকোয়েন্সি) জোড়াটি সাজান; এবং কীটি হ'ল শব্দ-ফ্রিকোয়েন্সি "। এটি স্বাভাবিক বাছাইকরণ অ্যালগরিদমের সাথে ও (এন * এলজি (এন)) সময় নেয়।
বাছাইয়ের পরে, আমরা কেবল প্রথম কে শব্দগুলি গ্রহণ করি। এটি ও (কে) সময় নেয়।
সংক্ষিপ্তসার হিসাবে, মোট সময় হল ও (এন + এন এলজি (এন) + কে) K যেহেতু কে অবশ্যই এন এর চেয়ে ছোট, তাই এটি আসলে ও (এন এলজি (এন))।
আমরা এই উন্নতি করতে পারেন। আসলে, আমরা শুধু শীর্ষ কে শব্দ চাই। অন্য শব্দগুলির ফ্রিকোয়েন্সি আমাদের জন্য উদ্বেগের নয়। সুতরাং, আমরা "আংশিক হিপ বাছাই" ব্যবহার করতে পারি। পদক্ষেপ 2) এবং 3) এর জন্য, আমরা কেবল বাছাই করি না। পরিবর্তে, আমরা এটি হতে পরিবর্তন
2 ') কী হিসাবে "শব্দ-ফ্রিকোয়েন্সি" যুক্ত (শব্দ, শব্দ-ফ্রিকোয়েন্সি) জুটির একটি গাদা তৈরি করুন। গাদা তৈরি করতে ও (এন) সময় লাগে;
3 ') গাদা থেকে শীর্ষ কে শব্দগুলি বের করুন। প্রতিটি নিষ্কাশন O (lg (n)) হয়। সুতরাং, মোট সময় হল ও (কে * এলজি (এন))।
সংক্ষিপ্তসার হিসাবে, এই সমাধানের জন্য ব্যয় সময় ও (এন + কে * এলজি (এন))।
এটা শুধু আমার চিন্তা। পদক্ষেপ 1) উন্নত করার উপায় আমি খুঁজে পাইনি)।
আমি আশা করি কিছু তথ্য পুনরুদ্ধার বিশেষজ্ঞরা এই প্রশ্নের উপর আরও আলোকপাত করতে পারেন।