Array মূলত Contiguous Memory Location ব্যবহার করে data store করে।
ইন্টারনাল প্রসেসিং স্টেপস:
Base Address: Array যখন তৈরি হয়, তখন মেমোরিতে তার শুরুর লোকেশন বা Base Address (ধরি, 1000) ফিক্সড হয়।
Element Size: Array-এর ডেটা টাইপ অনুযায়ী প্রতিটি এলিমেন্টের সাইজ ফিক্সড থাকে (যেমন, Integer হলে 4 Bytes)।
Direct Formula: যখন আপনি Array[4] চান, তখন CPU মেমোরিতে কোনো লুপ চালায় না। সে সরাসরি এই সূত্রটি ব্যবহার করে:
Target Address = Base Address + (Index * Element Size)
উদাহরণ:
মেমোরিতে Array-এর শুরু যদি হয় 1000 নম্বর ঘরে এবং প্রতিটি এলিমেন্ট যদি 4 Bytes জায়গা নেয়, তবে ৪ নম্বর ইনডেক্সের অ্যাড্রেস হবে: 1000 + (4 * 4) = 1016। CPU সরাসরি 1016 নম্বর অ্যাড্রেসে জাম্প করে ভ্যালু নিয়ে আসে। কোনো সার্চ বা লুপ লাগে না বলেই এটি O(1)।
Python Dynamic Array
Python list (যা আসলে একটি Dynamic Array) এই সমস্যাটি সমাধান করে References বা Pointers-এর মাধ্যমে।
Dynamic array কিভাবে Element size fix করবে?
আমার array তে যদি digit, string থাকে তখন কিভাবে element size আসবে?
arr=[1,"name",4,5]
এই array ক্ষেত্রে কি হবে?
Python dynamic array-তে সরাসরি ভ্যালু থাকে না, থাকে ভ্যালুর References বা Pointers। যেহেতু সব পয়েন্টারের সাইজ ফিক্সড (8 bytes), তাই [1, "name", 4] হলেও ইন্টারনাল অ্যারেতে প্রতিটা ঘরের সাইজ সমান থাকে। ফলে ইন্ডেক্সিং ফর্মুলা O(1) কাজ করতে কোনো সমস্যা হয় না।
টাইম কমপ্লেক্সিটি: Index দিয়ে অ্যাক্সেস O(1), কিন্তু শেষে append করা অমোর্টাইজড O(1) হলেও মাঝে কোথাও ইনসার্ট/ডিলিট করা O(n) (কারণ এলিমেন্ট শিফট করতে হয়)।
Comments
Post a Comment