Post updated on 30th June, 2019 at 10:48 pm
তোমাকে বললাম দুই জন ছাত্রের বয়স ইনপুট নিয়ে তাদের বয়সের গড় বের করে দিতে। তুমি সুন্দর মত দুটি ভ্যারিয়েবলে দুজন ছাত্রের বয়স ইনপুট নিয়ে তাদেরকে যোগ করে ২ দিয়ে ভাগ দিয়ে গড় বের করে প্রিন্ট করলে। এখন যদি বলি ৫ জন ছাত্রের বয়সের গড় বের করতে হবে। তাহলে তুমি ৫টা ভ্যারিয়েবল নিয়ে তাতে ইনপুট নিবে তাই না? যদি বলি ১০০ জন ছাত্রের বয়স ইনপুট নিয়ে তাদের গড় বের করতে তাহলে? বা N সংখ্যক ছাত্রের বয়সের গড় বের করতে যেখানে N একটি স্বাভাবিক সংখ্যা যা প্রোগ্রাম রান করার পর ইউজার ইনপুট দিবে। সেক্ষেত্রে কী করবে? তারমানে ইচ্ছা মত অনেক অনেকগুলো ভ্যারিয়েবল ডিক্লেয়ার করে তাতে ডেটা স্টোর করাটা কোন ভাল কাজ না। ডেটাগুলোকে একটা সাজানো গোছানো ফরমেটে যদি রাখা যায় তাহলে সেটা নিয়ে কাজ করতে সুবিধা হয়। এই উদাহরণের ক্ষেত্রে সবচেয়ে সহজ ডেটা স্ট্রাকচারটা ব্যবহার করা যায়। যার নাম Array.
আরেকটা উদাহরণের কথা চিন্তা করি। তোমার পিসির My Computer এ ঢুকলে। দেখলে ৩ টা ড্রাইভ আছে। সি ড্রাইভে ঢুকলে। অনেকগুলো ফোল্ডারের মধ্যে একটা ফোল্ডার পেলে Program Files (x86) নামের একটা ফোল্ডার। এই ফোল্ডারের অধীনে রয়েছে তোমার পিসিতে যত অ্যাপ্লিকেশন সফটওয়্যার রয়েছে তাদের ফোল্ডার। ধর CodeBlocks এর ফোল্ডার ওপেন করলা। এর অধীনে আরো কিছু ফোল্ডার পাবে। এরকম ফোল্ডার থেকে ফোল্ডারের ভিতরে ঢুকতে ঢুকতে এক সময় দেখবে আর ফোল্ডার নাই। কোন একটা ফাইল দেখা যাচ্ছে। হয়ত সে ফাইল নিয়ে তুমি কোন কাজ করবে। এখন পুরো জিনিসটাকে একটা গাছের সাথে কল্পনা কর। ধর My Computer হচ্ছে গাছের শিকড় (root). ৩ টা ড্রাইভ হচ্ছে ৩ টা শাখা। সি ড্রাইভে ঢুকার পর Program Files (x86) একটা প্রশাখা। এই প্রশাখার অধীনে আরো অনেক প্রশাখা আছে। এরকম ভিতরে ঢুকতে ঢুকতে একদম শেষের ফাইলটা হচ্ছে গাছের পাতা (node). এই যে একটার অধীনে আরেকটা নোড, তার অধীনে আরেকটা নোড এই স্ট্রাকচারটা হচ্ছে Tree Data Structure.
সফটওয়্যার ডেভেলপমেন্ট বা ACM প্রোগ্রামিং কনটেস্ট করার সময় ডেটা স্ট্রাকচার খুবই গুরুত্ব বহন করে। ডেটা স্ট্রাকচারের ভাল ধারণা না থাকলে সফটওয়্যার ডেভেলপমেন্টের অনেক ডীপ লেভেলে কাজ করা মুশকিল হতে পারে।
ডেটা স্ট্রাকচার কী?
Schaum’s Outline Series এর Data Structures বইয়ের সংজ্ঞা অনুযায়ী বলা যায়, ডেটাকে অনেক ভাবেই সাজিয়ে রাখা যায়। ডেটা স্ট্রাকচার হচ্ছে ডেটাগুলোকে নির্দিষ্ট পদ্ধতিতে সাজিয়ে রাখার লজিক্যাল বা ম্যাথমেটিক্যাল মডেল।
অর্থাৎ ডেটাকে কম্পিউটার মেমরিতে সংরক্ষণ ও সেগুলোকে নিয়ে প্রসেস করার জন্য efficient পদ্ধতিতে ডেটাগুলোকে organize করার নামই ডেটা স্ট্রাকচার। কোন একটা ডেটা স্ট্রাকচার নিয়ে কাজ করার ক্ষেত্রে দুইটা জিনিস মাথায় রাখতে হয়। প্রথমত, ডেটাগুলোর মধ্যে পারস্পরিক সম্পর্ক বুঝানোর জন্য স্ট্রাকচারের দিক দিয়ে যথেষ্ট সমৃদ্ধ হতে হবে। দ্বিতীয়ত, এটাকে হতে হবে খুব সিম্পল, যেন দরকারের সময় effectively ডেটাগুলোকে নিয়ে কাজ করা যায়।
ডেটা স্ট্রাকচার কেন শেখা প্রয়োজন?
আর্টিকেলের শুরুর দুই প্যারা থেকে তুমি সহজেই বুঝে গেছ ডেটা স্ট্রাকচার কেন শেখা প্রয়োজন? প্রথম উদাহরণে সিরিয়াল্যি ডেটাগুলোকে স্টোর করে পরে সেগুলো নিয়ে কাজ করাই যথেষ্ট। কিন্তু দ্বিতীয় উদাহরণে কিন্তু সবগুলো ড্রাইভ-ফোল্ডারের নাম সিরিয়াল্যি রেখে দিলেই এগুলোর মধ্যে root-node এর সম্পর্ক বুঝানো সম্ভব না। সেজন্য প্রথমটার ক্ষেত্রে simple array ব্যবহার করা হয়েছে আর দ্বিতীয়টার ক্ষেত্রে Tree.
Google এ যখন কোন একটা শব্দ লিখে সার্চ দেয়া শুরু করি তখন কিন্তু ২-১ টা অক্ষর লেখার পরেই অটো সাজেশন দেয়। এটা ইমপ্লিমেন্ট করা যায় Trie Data Structure দিয়ে। যা Tree এরই একটা variation.
ধর তোমার কোম্পানী তোমাকে কোন একটা ব্যাংকের সার্ভিস সেন্টারের অটোমেশন সফটওয়্যারের কাজ দিল। যেখানে কাস্টমাররা ব্যাংকে ঢুকেই একটা বুথ থেকে তার টোকেন প্রিন্ট করবে। এরপর ৫-৬ বুথ থেকে কাস্টমারদেরকে ডাকবে সার্ভিস দেয়ার জন্য। তাহলে ১৫ জনের পরে যার টোকেন নাম্বার, তাকে ডাকা হবে এই ১৫ জনের পরেই। তার মানে এখানে Queue Data Structure ইমপ্লিমেন্ট করা হচ্ছে। কোন নতুন কাস্টমার টোকেন প্রিন্ট করলেই তার নাম্বারটা কিউতে ফেলে দেয়া হবে। প্রতিটা বুথ থেকে যখনই কাউকে ডাকা হবে এই কিউয়ের সামনে থেকে ডাকা হবে। অর্থাৎ যে আগে আসবে সে কিউয়ের সামনের দিকে থাকবে।
এরকম অসংখ্য উদাহরণ দেয়া যায় ডেটা স্ট্রাকচারের প্র্যাক্টিক্যাল বা রিয়েল লাইফ ইমপ্লিমেন্টেশনের। তাই ACM contest, Web development বা মোবাইল ডেভেলপমেন্ট যে দিকেও যাও না কেন ব্যাসিক ডেটা স্ট্রাকচার জানা থাকা লাগবেই।
ডেটা স্ট্রাকচারের উপর আস্তে আস্তে কিছু ধারাবাহিক পোস্ট লিখার ইচ্ছা রয়েছে। নিচে কিছু ব্যাসিক ডাটা স্ট্রাকচারের টপিকের লিস্ট উল্লেখ করা হল যেগুলো ব্লগে নিয়মিত বিরতিতে পোস্ট করা হবে।
- Array
- Stack
- Queue
- Priority Queue
- Linked List
- Tree
- Trie
- Heap
- Hash Table
ডেটা স্ট্রাকচারের উপর লিখা সবগুলো টিউটোরিয়ালের সোর্সকোড একত্রে পাওয়া যাবে আমার গিটহাব রিপোজিটরিতে।
সকলের পরামর্শ ও অংশগ্রহন একান্ত কাম্য। 🙂
ধন্যবাদ
Brother, Please publish a book(hardcover) with those tutorials based on data structure..Thanks..
Thank you for your comment. I’ll try
bhai how can u explain so beautifully ?May Allah give u more and more knowledege.Also pray for me .
Ameen. Fee amanillah…
Assalamu alaikum vai,
EOF kivabe sikhbo
এখান থেকে দেখতে পারেন
thanks vaiya….!! Likata onak valo hoice😍
ধন্যবাদ আপনার মন্তব্যের জন্য
Wow.I learn something so much easily
Thank you for your feedback.
vai assalamualaikum,”data structures and algorithm analysis in C” er opor banglai full kono boi ache ki apnar?thanks.
ভাই আমার লেখা কোনো বইই নাই। ডেটা স্ট্রাকচার অ্যালগরিদমের উপর তো নয়ই!
vai boi tir pdf thakle download link diben please”data structures & algorithm analysis in C”
আমার সংগ্রহে নাই।
Thanks a lot.
you are most welcome
Jazakallahu khairan.