সরাসরি প্রধান সামগ্রীতে চলে যান

স্লাইডিং উইন্ডো ম্যাক্সিমাম প্রবলেম সলভ করার সহজ গাইড

হ্যালো! আজকের এই ভিডিওতে আমরা ডাটা স্ট্রাকচার এবং অ্যালগরিদমের (DSA) একটি বেশ গুরুত্বপূর্ণ এবং একটু কঠিন লেভেলের প্রবলেম নিয়ে কথা বলবো, যার নাম হলো Sliding Window Maximum। এটি লিটকোড (LeetCode)-এর ২৩৯ নম্বর সমস্যা। সহজ করে বললে, আমাদের একটা বড় নাম্বারের লিস্ট দেওয়া থাকবে এবং একটা উইন্ডো সাইজ 'k' দেওয়া থাকবে। আমাদের কাজ হলো, ওই সাইজের সবকটি সাব-অ্যারের (ছোট ছোট অংশ) মধ্যে সবচেয়ে বড় নাম্বারটি খুঁজে বের করা।


১. স্লাইডিং উইন্ডো ম্যাক্সিমাম কী? (Introduction)

এই টপিকটি বোঝার আগে কল্পনা করুন আপনার কাছে এক সারি নাম্বার আছে। 'k' হলো একটি ফ্রেম বা জানালার মতো। ধরুন k=৩, তার মানে আপনি একবারে ৩টি নাম্বার দেখতে পাবেন। আপনি এই জানালাটি বাম থেকে ডানে সরাবেন (স্লাইড করবেন) এবং প্রতিবার ওই জানালার ভেতরে থাকা সবচেয়ে বড় সংখ্যাটি খাতায় লিখবেন। সবশেষে যে লিস্টটি পাবেন, সেটাই আপনার উত্তর।


২. উদাহরণের মাধ্যমে কনসেপ্ট ক্লিয়ার করা (Concept Details)

ভিডিও রেফারেন্স: [01:04]

ধরা যাক একটি অ্যারে আছে: [1, 3, -1, -3, 5, 3, 6, 7] এবং জানালার সাইজ k = 3

  • প্রথম জানালা: [1, 3, -1] -> বড় সংখ্যা: 3

  • জানলা এক ধাপ সরালে: [3, -1, -3] -> বড় সংখ্যা: 3

  • পরের ধাপ: [-1, -3, 5] -> বড় সংখ্যা: 5

  • পরের ধাপ: [-3, 5, 3] -> বড় সংখ্যা: 5

  • পরের ধাপ: [5, 3, 6] -> বড় সংখ্যা: 6

  • শেষ ধাপ: [3, 6, 7] -> বড় সংখ্যা: 7

তাহলে আমাদের আউটপুট হবে: [3, 3, 5, 5, 6, 7]

সহজ ভাষায় ব্যাখ্যা: এখানে Sliding Window বলতে বোঝানো হচ্ছে একটা নির্দিষ্ট সীমানার মধ্যে ডাটা দেখা। আর Maximum মানে হলো সেই সীমানার সবথেকে বড় মান।


৩. সাধারণ সমাধান বনাম উন্নত সমাধান (Brute Force vs Optimal)

ভিডিও রেফারেন্স: [02:11]

  • সাধারণ পদ্ধতি (Brute Force): আমরা যদি প্রতিবার লুপ চালিয়ে বড় সংখ্যা খুঁজি, তবে সময় অনেক বেশি লাগবে (Time Complexity: O(n∗k))। বড় ডাটার ক্ষেত্রে এই পদ্ধতি ফেল করবে।

  • উন্নত পদ্ধতি (Optimal Solution): আমরা Deque (Double Ended Queue) ব্যবহার করবো। এর মাধ্যমে আমরা মাত্র একবার পুরো লিস্টটি দেখেই (Time Complexity: O(n)) উত্তর বের করতে পারবো।

কঠিন শব্দের ব্যাখ্যা:

  • Deque (ডি-কিউ): এটি এমন এক ধরনের লাইন (Queue), যেখানে আপনি সামনে এবং পিছনে—উভয় দিক দিয়েই ডাটা ঢোকাতে বা বের করতে পারেন।

৪. ডি-কিউ (Deque) ব্যবহারের লজিক

ভিডিও রেফারেন্স: [04:40]

আমরা ডি-কিউতে ভ্যালু না রেখে ভ্যালুর ইনডেক্স (অবস্থান) রাখবো। আমাদের দুটি নিয়ম মানতে হবে: ১. জানালার বাইরে চলে যাওয়া ইনডেক্সগুলোকে সামনে থেকে বের করে দিতে হবে। ২. নতুন কোনো বড় সংখ্যা এলে, তার চেয়ে ছোট সব সংখ্যাকে ডি-কিউয়ের পিছন থেকে বের করে দিতে হবে। কারণ, ছোট সংখ্যাগুলো আর কখনোই ম্যাক্সিমাম হতে পারবে না।


৫. কোডিং সমাধান (C++ Code Snippet)

নিচে ভিডিওতে দেখানো সমাধানটি সহজভাবে দেওয়া হলো:

C++

#include <iostream>
#include <vector>
#include <deque>

using namespace std;

vector<int> maxSlidingWindow(vector<int>& nums, int k) {
    deque<int> dq; // ইনডেক্স রাখার জন্য
    vector<int> result;

    for (int i = 0; i < nums.size(); i++) {
        // ১. উইন্ডোর বাইরের ইনডেক্স বের করে দাও
        if (!dq.empty() && dq.front() <= i - k) {
            dq.pop_front();
        }

        // ২. নতুন সংখ্যার চেয়ে ছোট সংখ্যাগুলো পিছন থেকে সরাও
        while (!dq.empty() && nums[dq.back()] <= nums[i]) {
            dq.pop_back();
        }

        // ৩. বর্তমান ইনডেক্স যোগ করো
        dq.push_back(i);

        // ৪. প্রথম উইন্ডো পূর্ণ হলে রেজাল্টে ম্যাক্সিমাম ভ্যালু নাও
        if (i >= k - 1) {
            result.push_back(nums[dq.front()]);
        }
    }
    return result;
} 

কোড ব্যাখ্যা:

  • dq.pop_front(): জানালা সামনে এগিয়ে গেলে পেছনের পুরনো ডাটা মুছে ফেলার জন্য।

  • dq.pop_back(): নতুন শক্তিশালী (বড়) সংখ্যা এলে দুর্বল (ছোট) সংখ্যাগুলোকে লাইন থেকে সরিয়ে দেওয়ার জন্য।

  • nums[dq.front()]: লাইনের একদম সামনে সবসময় জানালার সবথেকে বড় সংখ্যাটি থাকে।


৬. আমার বিশ্লেষণ ও শেষ কথা (Analysis & Perception)

আমার ভাবনা: এই প্রবলেমটি সমাধান করার মূল চাবিকাঠি হলো এটা বোঝা যে, কোনো ছোট সংখ্যা যদি কোনো বড় সংখ্যার বামে থাকে, তবে সেই ছোট সংখ্যাটি আর কখনো উত্তর হতে পারবে না। কারণ বড় সংখ্যাটি যতক্ষণ জানালায় আছে, ছোটটি ম্লান হয়ে যাবে।

বাস্তবতা ও সম্ভাবনা: ১. টাইম কমপ্লেক্সিটি: O(n), যা অত্যন্ত দ্রুত। ২. স্পেস কমপ্লেক্সিটি: O(k), কারণ ডি-কিউতে বড়জোর জানালার সমান ডাটা থাকে। ৩. বিকল্প: আপনি চাইলে 'Priority Queue' বা 'Heap' ব্যবহার করতে পারেন, কিন্তু সে ক্ষেত্রে সময় কিছুটা বেশি (O(nlogk)) লাগবে। তাই Deque-ই সেরা।

পরামর্শ: আপনি যদি বিগিনার হন, তবে প্রথমে হাতে-কলমে ড্রাই-রান (খাতায় কোড পরীক্ষা) করুন। ইনডেক্স কীভাবে ডি-কিউ থেকে সরছে তা বুঝতে পারলে পুরো বিষয় স্লাইডিং উইন্ডোর মতো আপনার মাথায় পরিষ্কার হয়ে যাবে। এই টেকনিকটি স্টক মার্কেট ডাটা বা রিয়েল-টাইম সেন্সর ডাটা প্রসেসিংয়ে খুব কাজে লাগে।

[

L81. Sliding Window Maximum | Queue

Shradha Khapra · 87K views

](http://www.youtube.com/watch?v=XwG5cozqfaM)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

তারাবিহ সমগ্র - প্রথম আলো

রামাদান ২০২৪ উপলক্ষে প্রথম আলোর নিয়মিত আয়োজন - খতমে তারাবিহ'র সূরা গুলো নিয়ে সংক্ষিপ্ত আলোচনা'র লিংক  নিচে দেওয়া হলো।  লিংকে ক্লিক করলেই আপনাকে আলোচনা তে নিয়ে যাবে। তারাবিহ: ১ | একটি খুন ও গাভি নিয়ে বনি ইসরাইলের বাড়াবাড়ি তারাবিহ: ২ | নারীর মর্যাদা ও অধিকার এবং অলৌকিক তিন ঘটনা তারাবিহ: ৩ | যে ১৪ নারীকে বিয়ে করা হারাম তারাবিতে: ১২ | মহানবী (সা.)–এর আকাশভ্রমণ এবং আসহাবে কাহাফের কাহিনি

রেডমি নোট ৯ এর বিস্তারিত | Redmi Note 9 in Bangla

৩০ এপ্রিল, ২০২০ এ শাওমির ঘোষনা আসে এই ফোনটি নিয়ে। কিন্তু ফোনটি মার্কেটে আসে মে মাসের শেষের দিকে৷ করোনার কারনে ফোনটি বাংলাদেশে আসতে আরো সময় নেয়। বর্তমানে বাংলাদেশে আন অফিশিয়াল ভাবে ফোনটি পাওয়া যাচ্ছে৷ বাংলাদেশে অফিশিয়াল ভাবে এখনো ফোনটি আসার তথ্য নেয়৷ চলুন ফোনটি নিয়ে বিস্তারিত আলোচনা করা যাক। শাওমি নোট সিরিজের ফোন বের করে এদের রেডমি নামে সাব ব্যান্ড৷ এদের কাজ হল এই নোট সিরিজ নিয়ে কাজ করা৷ প্রতিবছর নোট সিরিজের ১/২ টা ফোন বাজারে আসে। সাথে সেই ফোন গুলার বিভিন্ন ভার্সন (যেমন - র‍্যাম ও রমের ভিত্তিতে) বাজারে আসে। এই বছরও তারা রেডমি সিরিজের নোট ৯ বাজারে আনে। এই বছর হয়তো এই সিরিজের আরো ফোন বাজারে আসবে। ডিস্পলেঃ ফোনটির ডিসপ্লে সাইজ ৬.৫৩ ইঞ্চি। এতে আইপিএস এলসিডি ডিসপ্লে ব্যবহার করা হয়েছে। এই ফোনের ডিসপ্লে প্রটেকশন হিসেবে আছে গরিলা গ্লাস ফাইভ। স্ক্রিন আর ফোনের বডির অনুপাত প্রায় ৮৩.৫%। এই ফোনের ডিসপ্লে ফুলএইচডি মানে ১০৮০পি। এই ডিস্পলের দৈর্ঘ্য ১৯.৫ একক এবং প্রস্থ হল ৯ একক। এত বড় ফোনের কারনে এই ফোনের পিপি আই ডেনসিটি ৩৯৫। যা একটু কম। প্লাটফর্মঃ এই ফোনের অপারেটিং সিস্টেম এন্ড্রয়েড ১০ এবং এর...