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

সার্কুলার কিউ (Circular Queue) এর সহজ পাঠ

system 經營

Introduction: সবাইকে স্বাগতম! আজকের আলোচনাটি মূলত কম্পিউটার সায়েন্সের ডাটা স্ট্রাকচার (Data Structure) এর একটি গুরুত্বপূর্ণ বিষয়— সার্কুলার কিউ (Circular Queue) নিয়ে। আমরা অনেকেই 'কিউ' বা লাইনের কথা জানি, কিন্তু এটি কেন গোল বা 'সার্কুলার' হতে হয় এবং এটি কীভাবে কাজ করে, তা আমরা খুব সহজভাবে এই আলোচনায় জানব।


১. কিউ (Queue) ও সার্কুলার কিউ এর সাধারণ ধারণা

আমরা যখন কোনো লাইনে দাঁড়াই (যেমন টিকিট কাউন্টার), সেটাকে বলা হয় Queue। এর নিয়ম হলো FIFO (First In First Out)—অর্থাৎ যে আগে আসবে, সেই আগে টিকিট পাবে।

Reference: [00:17] - [01:00]

বিস্তারিত: একটি সাধারণ কিউতে দুটি দিক থাকে:

  • Front (সামনের দিক): যেখান থেকে মানুষ বা ডাটা বের হয়ে যায়।

  • Rear (পেছনের দিক): যেখান থেকে নতুন ডাটা যোগ হয়।

সার্কুলার কিউ হলো এমন একটি কিউ যেখানে লাইনের শেষ প্রান্ত শুরুর প্রান্তের সাথে যুক্ত থাকে। অনেকটা গোল টেবিলের মতো। সাধারণ কিউতে একবার ডাটা ডিলিট করলে সামনের ফাঁকা জায়গাগুলো আর সহজে ব্যবহার করা যায় না, কিন্তু সার্কুলার কিউতে সেই ফাঁকা জায়গাগুলো আমরা আবার ব্যবহার করতে পারি।

  • সহজ ব্যাখ্যা (Difficult Words):

    • FIFO: এর মানে হলো 'আগে আসলে আগে পাবেন'।

    • Rear: এটি হলো কিউ বা লাইনের পেছনের অংশ যেখানে নতুন কেউ এসে দাঁড়ায়।

    • Front: এটি হলো লাইনের একদম সামনের অংশ যেখান থেকে কাজ শেষ করে বের হওয়া যায়।


২. সার্কুলার কিউ কীভাবে কাজ করে? (Implementation)

সার্কুলার কিউ সাধারণত একটি Array (একটি নির্দিষ্ট সাইজের তালিকা) দিয়ে তৈরি করা হয়।

Reference: [02:28] - [03:59]

বিস্তারিত: মনে করি আমাদের একটি এরে (Array) আছে যার সাইজ ৩। ১. শুরুতে এটি খালি থাকবে, তাই Front এবং Rear দুটিই থাকবে -১ এ। ২. নতুন ডাটা যোগ করলে (Push), Rear এক ঘর করে সামনে বাড়বে। ৩. ডাটা ডিলিট করলে (Pop), Front এক ঘর করে সামনে বাড়বে।

ম্যাজিক ফর্মুলা: সার্কুলার কিউতে গোল হয়ে ঘোরার জন্য একটি বিশেষ ফর্মুলা ব্যবহার করা হয়: (Index + 1) % Capacity। এর মানে হলো, যখন আমরা ৩ নম্বর ইন্ডেক্সে পৌঁছাব, তখন এই ফর্মুলা আমাদের আবার ০ নম্বর ইন্ডেক্সে পাঠিয়ে দেবে।

  • সহজ ব্যাখ্যা (Difficult Words):

    • Capacity: এরে বা কিউতে সর্বোচ্চ কতগুলো ডাটা রাখা যাবে তার সীমা।

    • Modulo (%): এটি একটি গণিতিক চিহ্ন যা ভাগশেষ (Remainder) বের করতে সাহায্য করে। গোল পথে ঘোরার জন্য এটি ব্যবহার করা হয়।


৩. কোডিং ও ইমপ্লিমেন্টেশন (C++)

নিচে সার্কুলার কিউ এর একটি সহজ কোড দেওয়া হলো যা দিয়ে আপনি বুঝতে পারবেন কীভাবে ডাটা পুশ (Push) এবং পপ (Pop) হয়।

Reference: [11:19] - [13:00]

C++

#include <iostream>
using namespace std;

class CircularQueue {
    int *arr;
    int front, rear, currSize, capacity;

public:
    // কনস্ট্রাক্টর: কিউ এর সাইজ নির্ধারণ করা
    CircularQueue(int n) {
        capacity = n;
        arr = new int[n];
        currSize = 0;
        front = 0;
        rear = -1;
    }

    // পুশ করা: নতুন ডাটা যোগ করা
    void push(int data) {
        if (currSize == capacity) {
            cout << "Queue is Full!" << endl;
            return;
        }
        rear = (rear + 1) % capacity; // গোল হয়ে ঘোরার ফর্মুলা
        arr[rear] = data;
        currSize++;
    }

    // পপ করা: ডাটা মুছে ফেলা
    void pop() {
        if (currSize == 0) {
            cout << "Queue is Empty!" << endl;
            return;
        }
        front = (front + 1) % capacity;
        currSize--;
    }

    // সামনের ডাটা দেখা
    int getFront() {
        if (currSize == 0) return -1;
        return arr[front];
    }
}; 

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

  • CircularQueue(int n): এটি কিউটি তৈরি করে এবং বলে দেয় এতে কতটুকু জায়গা থাকবে।

  • push(int data): নতুন ডাটা আসলে rear কে আপডেট করে সেখানে ডাটা বসিয়ে দেয়।

  • pop(): সামনের ডাটা সরিয়ে দিয়ে front কে এক ঘর সামনে নিয়ে যায়।

  • (rear + 1) % capacity: এটিই মূলত কিউটিকে 'সার্কুলার' বা গোল রাখে।


৪. আমার বিশ্লেষণ ও ভাবনা (Analysis & Perception)

সারাংশ ও উদ্দেশ্য: সৃষ্টিকর্তা (Content Creator) এখানে বোঝাতে চেয়েছেন যে, মেমোরি বা জায়গার সঠিক ব্যবহার করতে সার্কুলার কিউ কতটা দক্ষ। সাধারণ কিউতে সামনের জায়গা খালি থাকলেও ব্যবহার করা যায় না, যা অপচয়। সার্কুলার কিউ সেই অপচয় রোধ করে।

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

ভিডিও রেফারেন্স: L78. Circular Queue in Data Structure

[

L78. Circular Queue in Data Strucuture

Shradha Khapra · 122K views

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

মন্তব্যসমূহ

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

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

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

জাভা ফিডব্যাক এবং স্ট্রাকচার্ড কনকারেন্সি: বিবর্তনের গল্প

Introduction এই ভিডিওর নির্দিষ্ট অংশে জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গোয়েটজ (Brian Goetz) আলোচনা করেছেন কীভাবে জাভার নতুন ফিচারগুলো তৈরি হয় এবং এতে সাধারণ ডেভেলপারদের মতামতের গুরুত্ব কতটুকু। বিশেষ করে Structured Concurrency -এর মতো জটিল ফিচারগুলো কেন বারবার 'Preview' অবস্থায় থাকে এবং কীভাবে কমিউনিটির ফিডব্যাক সেই ফিচারগুলোকে আরও নিখুঁত করতে সাহায্য করে, তা এখানে সহজভাবে বোঝানো হয়েছে। ১. ভালো ফিডব্যাক আসলে কী? ভিডিও রেফারেন্স: [ 34:53 ] ব্রায়ান গোয়েটজ বলছেন যে, জাভা টিম যখন কোনো নতুন ফিচারের খসড়া (Draft) বা প্রস্তাব (JEP) প্রকাশ করে, তখন তারা এমন কিছু জানতে চায় যা তারা নিজেরা আগে ভাবেনি। বিস্তারিত: একজন ডেভেলপার হিসেবে আমরা যখন কোনো নতুন ফিচার দেখি, আমাদের প্রথম প্রতিক্রিয়া হয় সেটার Syntax বা লেখার ধরন নিয়ে। কিন্তু ব্রায়ানের মতে, "এই লেখাটা কেন এমন হলো?" বা "এটা কোটলিন বা স্কালা-র মতো কেন নয়?"—এই ধরনের ফিডব্যাক খুব একটা কাজে আসে না। আসল দামী ফিডব্যাক হলো সেইটা, যা নতুন কোনো বাস্তব সমস্যা (Edge Case) তুলে ধরে। আমার চিন্তা: আপনি যদি কেবল দ...

ইমেজ ক্লাসিফিকেশন মডেল তৈরি ও প্রশিক্ষণ

ভূমিকা এই ভিডিওটিতে আমরা দেখবো কিভাবে একটি ইমেজ ক্লাসিফিকেশন মডেলকে প্রশিক্ষণ (Train) দিতে হয়। সহজ কথায়, আমাদের কাছে থাকা ছবিগুলো থেকে কম্পিউটারকে শেখানো যে, কোন ছবিটিতে কোন ব্যক্তি আছেন। এখানে আমরা ডাটাগুলোকে প্রসেস করা, মডেল নির্বাচন, এবং মডেলটি কতটা নির্ভুলভাবে কাজ করছে তা যাচাই করার প্রক্রিয়া শিখবো। ডাটা প্রিপারেশন বা প্রস্তুতি রেফারেন্স: [ 00:00 ] থেকে [ 01:03 ] মডেলকে প্রশিক্ষণ দেওয়ার আগে ডাটা ঠিকঠাক করা খুব জরুরি। ভিডিওতে দেখানো হয়েছে কিভাবে ছবিগুলো থেকে একটি ডিকশনারি বা তালিকার মতো স্ট্রাকচার তৈরি করা হয়েছে। সহজ ব্যাখ্যা: এখানে ইমেজগুলোকে সংখ্যায় রূপান্তর করা হয়েছে। কম্পিউটার সরাসরি ছবি বোঝে না, তাই সেগুলোকে ছোট ছোট ডাটা পয়েন্টের (Array) তালিকা হিসেবে সাজানো হয়েছে। যাতে মডেল বুঝতে পারে একটি ছবিতে কী কী বৈশিষ্ট্য আছে। মডেল নির্বাচন ও প্রশিক্ষণ (SVM) রেফারেন্স: [ 01:03 ] থেকে [ 04:43 ] এখানে Support Vector Machine (SVM) নামক একটি অ্যালগরিদম ব্যবহার করা হয়েছে। এটি সাধারণত ক্লাসিফিকেশনের কাজে খুব ভালো ফলাফল দেয়। পাইপলাইন (Pipeline): ডাটাকে স্কেল (Scale) করার জন্...