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

Static এবং Dynamic Arrays-এর সহজ পাঠ

ইন্ট্রোডাকশন: এই ভিডিওটিতে গুগল ইঞ্জিনিয়ার উইলিয়াম ফিসেট (William Fiset) আমাদের ডেটা স্ট্রাকচারের একদম মৌলিক একটি বিষয়—'অ্যারে' (Array) সম্পর্কে বিস্তারিত আলোচনা করেছেন। অ্যারে হলো ডেটা সাজিয়ে রাখার সবচেয়ে সাধারণ এবং কার্যকর পদ্ধতি। এই সেকশনে আমরা মূলত দুই ধরণের অ্যারে নিয়ে কথা বলব: স্ট্যাটিক অ্যারে (Static Array) এবং ডাইনামিক অ্যারে (Dynamic Array)। এই দুইয়ের মধ্যে পার্থক্য কী, তারা কীভাবে কাজ করে এবং তাদের টাইম কমপ্লেক্সিটি (Time Complexity) কেমন, তা খুব সহজভাবে তুলে ধরা হয়েছে।


১. অ্যারে কী এবং ইনডেক্সিং (Indexing)

ভিডিও রেফারেন্স: [22:25]

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

  • ইনডেক্সিং (Indexing): কম্পিউটার সায়েন্সে অ্যারের গণনা শুরু হয় থেকে, ১ থেকে নয়। অর্থাৎ প্রথম ড্রয়ারের নাম্বার হবে ০, দ্বিতীয়টির ১, এভাবে চলতে থাকবে।

  • কেন ০ থেকে শুরু? এটা অনেক নতুন শিক্ষার্থীদের কনফিউজড করে দেয়। গণিতে আমরা সাধারণত ১ থেকে গণনা করি, কিন্তু মেমোরি অ্যাড্রেস হিসেব করার সুবিধার্থে প্রোগ্রামিংয়ে ০ ব্যবহার করা হয়।

সহজ ব্যাখ্যা (Index): ইনডেক্স মানে হলো কোনো জিনিসের ঠিকানা বা অবস্থান। যেমন একটি বইয়ের সূচিপত্র দেখে আমরা জানি কোন টপিক কত নাম্বার পাতায় আছে, তেমনি ইনডেক্স দেখে কম্পিউটার জানে কোন ডেটা কত নাম্বার ঘরে আছে।


২. স্ট্যাটিক অ্যারে (Static Array)

ভিডিও রেফারেন্স: [23:36]

স্ট্যাটিক অ্যারে হলো এমন এক ধরণের অ্যারে যার সাইজ বা আকার আগে থেকেই ঠিক করে দিতে হয় এবং পরে তা আর পাল্টানো যায় না।

  • বৈশিষ্ট্য: আপনি যদি শুরুতে বলেন যে আমার ৫টি ঘরের একটি অ্যারে লাগবে, তবে আপনি সেখানে ৫টিই ডেটা রাখতে পারবেন। ৬ষ্ঠ কোনো ডেটা ঢুকাতে চাইলে কম্পিউটার এরর দেখাবে।

  • সুবিধা: যেহেতু সাইজ নির্দিষ্ট, তাই মেমোরিতে এটি খুব দ্রুত কাজ করে। আপনি যেকোনো ইনডেক্সের ভ্যালু সরাসরি অ্যাক্সেস করতে পারেন।


৩. ডাইনামিক অ্যারে (Dynamic Array)

ভিডিও রেফারেন্স: [26:33]

ডাইনামিক অ্যারে হলো জাদুর মতো! এর সাইজ বা আকার প্রয়োজন অনুযায়ী বড় বা ছোট হতে পারে। আপনি যখনই নতুন কোনো ডেটা যোগ করতে চান, সে নিজে থেকেই নিজের জায়গা বাড়িয়ে নেয়।

  • কীভাবে কাজ করে? পর্দার আড়ালে ডাইনামিক অ্যারে আসলে একটি স্ট্যাটিক অ্যারেই ব্যবহার করে। যখন বর্তমান অ্যারেটি ভরে যায়, তখন কম্পিউটার নতুন একটি বড় অ্যারে তৈরি করে (সাধারণত আগেরটির দ্বিগুণ সাইজের) এবং পুরনো সব ডেটা সেখানে কপি করে নিয়ে আসে।

সহজ ব্যাখ্যা (Resize): মনে করুন আপনি একটি ছোট ব্যাগে বই ভরছেন। ব্যাগ ভরে গেলে আপনি সব বই বের করে একটি বড় ব্যাগে রাখলেন। এই প্রসেসটাই হলো রিসাইজিং।


৪. টাইম কমপ্লেক্সিটি বিশ্লেষণ (Complexity Analysis)

অ্যারেতে বিভিন্ন কাজ করতে কত সময় লাগে তা 'Big O' নোটেশন দিয়ে বোঝা যায়:

অপারেশন

স্ট্যাটিক অ্যারে

ডাইনামিক অ্যারে

অ্যাক্সেস (Access)

O(1)

O(1)

সার্চ (Search)

O(n)

O(n)

ইনসার্ট (Insertion)

N/A (Fixed size)

O(n)

ডিলিট (Deletion)

N/A (Fixed size)

O(n)

শেষে যোগ করা (Append)

N/A

O(1)*

Export to Sheets

  • O(1) - Constant Time: এর মানে কাজটা খুব দ্রুত হয়, ডেটা যত বেশিই হোক না কেন সময় একই লাগে।

  • O(n) - Linear Time: এর মানে ডেটা যত বাড়বে, সময়ও তত বেশি লাগবে। যেমন- ১০০ জনের লাইনে কাউকে খুঁজতে যে সময় লাগবে, ১০০০ জনের লাইনে বেশি সময় লাগবে।


৫. কোডিং উদাহরণ এবং ব্যাখ্যা (Java/Pseudo-code)

ভিডিওতে ডাইনামিক অ্যারে কীভাবে ইমপ্লিমেন্ট করতে হয় তার একটি ধারণা দেওয়া হয়েছে (বিশেষ করে add এবং remove মেথড)।

Java

// ডাইনামিক অ্যারেতে নতুন এলিমেন্ট যোগ করা (সরলীকৃত)
public void add(int element) {
    // যদি অ্যারে ভরে যায়, তবে সাইজ দ্বিগুণ করো
    if (len + 1 >= capacity) {
        if (capacity == 0) capacity = 1;
        else capacity *= 2; // দ্বিগুণ করা হচ্ছে
        
        int[] new_arr = new int[capacity]; // নতুন বড় অ্যারে তৈরি
        for (int i = 0; i < len; i++)
            new_arr[i] = arr[i]; // পুরনো ডেটা কপি
        arr = new_arr; // নতুন অ্যারেকেই প্রধান অ্যারে বানানো
    }
    arr[len++] = element; // শেষে নতুন ডেটা যোগ
} 

কোড ব্যাখ্যা: ১. প্রথমে চেক করা হয় ঘরে জায়গা আছে কি না। ২. জায়গা না থাকলে আগের চেয়ে দ্বিগুণ বড় একটি নতুন অ্যারে তৈরি করা হয়। ৩. পুরনো ঘরের সব জিনিস নতুন ঘরে শিফট করা হয়। ৪. অবশেষে নতুন ডেটাটি সবার শেষে রাখা হয়।


অ্যানালাইসিস এবং লেখকের চিন্তাভাবনা

কন্টেন্ট ক্রিয়েটর যা বোঝাতে চেয়েছেন: ভিডিওর মূল উদ্দেশ্য হলো শিক্ষার্থীদের এটা বোঝানো যে, আমরা যখন পাইথনে list বা জাভাতে ArrayList ব্যবহার করি, তখন পর্দার আড়ালে আসলে এই জটিল কাজগুলোই ঘটে। ডেটা স্ট্রাকচার বোঝা মানে হলো মেমোরি কীভাবে কাজ করে তা বোঝা।

বাস্তবতা ও আমার মতামত: বাস্তব জীবনে আমরা বেশিরভাগ সময় ডাইনামিক অ্যারে ব্যবহার করি কারণ আমরা জানি না ইউজারের কাছ থেকে কতটুকু ডেটা আসবে। তবে স্ট্যাটিক অ্যারে ব্যবহার করা অনেক বেশি মেমোরি সাশ্রয়ী এবং ফাস্ট যদি আপনি আগে থেকেই ডেটার পরিমাণ জানেন।

বিকল্প ও পরামর্শ:

  • যদি আপনার লিস্টে বারবার মাঝখান থেকে ডেটা ডিলিট বা অ্যাড করতে হয়, তবে Linked List ব্যবহার করা অ্যারের চেয়ে ভালো হতে পারে।

  • অ্যারেতে কাজ করার সময় মনে রাখবেন, ইনডেক্স যেন কখনোই সীমানা ছাড়িয়ে না যায় (Index Out of Bounds)। এটি প্রোগ্রামিংয়ের সবচেয়ে কমন ভুলগুলোর একটি।

সামগ্রিকভাবে, উইলিয়াম ফিসেট খুব সুন্দরভাবে দেখিয়েছেন যে একটি ডাইনামিক অ্যারে আসলে "অটোমেটেড" স্ট্যাটিক অ্যারে ছাড়া আর কিছুই নয়।

[

Data Structures Easy to Advanced Course - Full Tutorial from a Google Engineer

freeCodeCamp.org · 7.3M views

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

মন্তব্যসমূহ

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

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

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

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

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

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

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