স্ট্যাটিক অ্যারে
মনে করুন আপনার কাছে নম্বর দেওয়া খোপের একটা সারি আছে — ঠিক যেমন ফার্মেসির ওষুধের তাক বা আলমারির ড্রয়ার। প্রতিটা খোপের একটা নম্বর থাকে, এবং ভেতরে নির্দিষ্ট একটা জিনিসই রাখা যায়।
প্রোগ্রামিংয়ের ভাষায় অ্যারে মানে ঠিক এটাই। পাশাপাশি সাজানেন লম্বা একটা বাক্সের সারি, যেগুলোর গায়ে নম্বর সাঁটানো থাকে। ব্যাপারটি খুবই সহজ!
এই বাক্স বা খোপগুলোকে বলা হয় এলিমেন্ট (Element), আর খোপের গায়ে লেখা নম্বরগুলোকে বলা হয় ইনডেক্স (Index)। তবে একটা খুব গুরুত্বপূর্ণ ব্যাপার হলো: আমরা সাধারণত ১ থেকে গোনা শুরু করলেও কম্পিউটার সবসময় ০ থেকে গোনা শুরু করে। তাই প্রথম খোপটির নম্বর [০], দ্বিতীয়টির [১], আর এভাবেই এগোতে থাকে।
← → অ্যারো কি (arrow key) ব্যবহার করুন · উপাদানগুলোতে ক্লিক করুন
যেকোনো খোপ থেকে এত দ্রুত জিনিস নেওয়া যায় কীভাবে?
এর পেছনে আসল ম্যাজিকটা হলো: সবগুলো বাক্স বা খোপ একেবারে একই সাইজের এবং একদম গাঁ ঘেঁষে পাশাপাশি সাজানেন থাকে। এর মানে হলো, কম্পিউটার শুধু একবার হিসাব করেই সরাসরি নির্দিষ্ট নম্বরের খোপের কাছে পৌঁছে যেতে পারে।
আপনার ধরুন ৫ নম্বর খোপের জিনিস লাগবে? কম্পিউটার চট করে হিসাব করে নেয়: "সারিটা শুরু হয়েছে কোথা থেকে সেটা আমি জানি, একেকটা খোপ কত বড় সেটাও আমার জানা — তাহলে ৫ নম্বর খোপটা ঠিক কতটুকু দূরে, তা বের করা তো এক সেকেন্ডের কাজ।" ব্যস, এক হিসাব এবং কাজ শেষ! ৫ নম্বরে যানয়ার জন্য কম্পিউটারকে ১, ২, ৩ বা ৪ নম্বর খোপ হাতড়ে দেখতে হয় না।
এ কারণেই অ্যারে থেকে কোনো কিছু বের করে নেওয়া সাথে সাথে বাঁ চোখের পলকেই হয়ে যায় — অ্যারে যত বিশালই হোক না কেন।
আশেপাশের জিনিসগুলো বোনাস হিসেবে চলে আসে
কম্পিউটার যখন কোনো খোপ থেকে কিছু বের করে, তখন সে আশপাশের আরও কয়েকটা খোপের জিনিসও এমনি এমনি মেমোরিতে নিয়ে আসে — কারণ এগুলো তো একদম গায়ে গা লাগানো থাকে! তাই [০] নম্বর খোপ দেখার সময়, [১], [২], [৩] খোপগুলোও আগে থেকেই রেডি হয়ে থাকে। এ কারণেই অ্যারে ব্যবহার করে পর পর জিনিস খোঁজা বা লুপ (Loop) চালানো অসাধারণ রকমের ফাস্ট।
সবচেয়ে বড় সমস্যা: সাইজ একদম ফিক্সড!
স্ট্যাটিক অ্যারে বানানোর সময়ই আপনাকে কম্পিউটারকে বলে দিতে হবে যে, আপনার ঠিক কয়টা খোপ দরকার। পরে চাইলেই আর খোপ বাড়ানো যায় না — এটা একদম ফিক্সড হয়ে যায়। এই কারণেই একে স্ট্যাটিক অ্যারে বলা হয় (স্ট্যাটিক মানে যা পরিবর্তন করা যায় না)।
আপনি যদি ৮টা খোপের জায়গা নেন, তবে ৮টাই পাবেন। এর মধ্যে ৩টা খোপ ব্যবহার করলে বাকি ৫টা খোপ ফাঁকাই পড়ে থাকবে। আর যদি পুরো ৮টাই ভর্তি হয়ে যায় এবং আপনার হুট করে ৯ নম্বর আরেকটা জিনিসের জায়গা লাগে — তখন আর কোনো উপায় নেই!
(এই ঝামেলা থেকে বাঁচার জন্য ডায়নামিক অ্যারে নামের আরেকটা জিনিস আছে, সেটা আমরা পরে দেখব।)
তাহলে জিনিস খুঁজবেনন কীভাবে?
অ্যারেতে বাক্সের নম্বর জানা থাকলে তো সরাসরি যানয়া যায়, কিন্তু কোনো নির্দিষ্ট জিনিস বা ভ্যালু খুঁজতে গেলে সেটা অনেক সময়সাপেক্ষ। ধরুন আপনি অ্যারেতে ৫৫ সংখ্যাটা খুঁজছেন। তাহলে কম্পিউটারকে আগে [০] নম্বর খোপ খুলে দেখতে হবে—৫৫ আছে কিনা—নেই। এরপর [১] নম্বর খোপ—আছে কিনা—নেই। যতদিন না ৫৫ পাওয়া যাচ্ছে, এভাবে খুঁজতেই হবে। আর সবচেয়ে খারাপ অবস্থা বা Worst Case হলো, যদি জিনিসটা একদম শেষের বাক্সে থাকে, তবে কম্পিউটারকে সব খুঁজে খুঁজে ক্লান্ত হতে হবে।
Complexity
অ্যারে কখন ব্যবহার করবেন?
- যখন আপনি আগে থেকেই জানেন আপনার ঠিক কয়টা জায়গা লাগবে।
- যখন বেশিরভাগ সময় আপনি নম্বর (ইনডেক্স) ধরে ঘপাঘপ জিনিস তুলবেন।
- যখন সবগুলোর ওপর দিয়ে দ্রুত লুপ বা ইটারেট করতে চান।
- যখন ভবিষ্যতে সাইজ বাড়ানোর কোনো দরকার পড়বে না।
একটা ছাড় তো দিতেই হবে
অ্যারের সবচেয়ে বড় দুর্বলতা হলো ওই ফিক্সড সাইজটা। যদি আপনি না জানেন যে সামনে আপনার কয়টা জিনিস রাখার জায়গা লাগতে পারে, তবে আপনার ডায়নামিক অ্যারে (Dynamic Array) ব্যবহার করা উচিত — ওটা দরকারে রাবারের মতো বাড়তে পারে।
ছোট কুইজ
পড়া চালিয়ে যান