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

সার্কুলার কিউ (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) তুলে ধরে। আমার চিন্তা: আপনি যদি কেবল দ...

[Master Post] Machine Learning for Everybody – Full Course

URL: https://youtu.be/i_LwzRVP7bg?t=0 Title: Machine Learning for Everybody – Full Course Topics:- মেশিন লার্নিংয়ের হাতেখড়ি এবং গুগল কোল্যাব সেটআপ মেশিন লার্নিংয়ের খুঁটিনাটি ও ফিচারের সহজ পাঠ Classification বনাম Regression এবং মডেল ট্রেনিংয়ের সহজ পাঠ মেশিন লার্নিংয়ের জন্য ডেটা তৈরি এবং প্রসেসিং করার সহজ গাইড K-Nearest Neighbors (KNN) থিওরির সহজ পাঠ কে-নিয়ারেস্ট নেইবারস (KNN) ইমপ্লিমেন্টেশন সহজ বাংলায় নেইভ বেইজ থিওরি এবং এর প্রয়োগ: সহজ পাঠ লজিস্টিক রিগ্রেশন: থিওরি ও ইমপ্লিমেন্টেশন SVM থিওরি এবং ইমপ্লিমেন্টেশন সহজ পাঠ নিউরাল নেটওয়ার্ক এবং টেনসরফ্লোর সহজ পাঠ টেনসরফ্লো দিয়ে নিউরাল নেটওয়ার্ক ক্লাসিফিকেশন শেখার সহজ গাইড লিনিয়ার রিগ্রেশন: সহজ কথায় মূল ধারণা ও গণিত লিনিয়ার রিগ্রেশন: সহজ ভাষায় খুঁটিনাটি ও হাতে-কলমে শেখা লিনিয়ার রিগ্রেশন এবং নিউরন মডেলের সহজ পাঠ TensorFlow দিয়ে রিগ্রেশন নিউরাল নেটওয়ার্ক তৈরি - পার্ট ১ টেনসরফ্লো দিয়ে রিগ্রেশন নিউরাল নেটওয়ার্ক তৈরি - পার্ট ২ আনসুপারভাইজড লার্নিং: কে-মিনস ক্লাস্টারিংয়ের সহজ পাঠ Principal C...