ডেটা স্ট্রাকচার কেন শিখবেন?
সঠিক কাজের জন্য সঠিক টুল
ধরুন আপনাকে একটি বইয়ের নির্দিষ্ট শব্দ খুঁজতে হবে। আপনি চাইলে প্রথম পৃষ্ঠা থেকে প্রতিটি শব্দ পড়তে পারেন — অথবা বইয়ের পেছনের ইনডেক্স থেকে মাত্র কয়েক সেকেন্ডে সেটা বের করতে পারেন। দুটি উপায়েই কাজ হবে, কিন্তু একটিতে লাগবে কয়েক মিনিট, অন্যটিতে কয়েক সেকেন্ড।
ডেটা স্ট্রাকচার ঠিক এমনই। এটি হলো ডেটা গুছিয়ে রাখার এমন এক পদ্ধতি যাতে আপনি সবচেয়ে কম সময়ে ডেটা খুঁজে পেতে, যোগ করতে বা মুছে ফেলতে পারেন। ডেটা একই থাকে — শুধু তার স্ট্রাকচার বা গঠন পার্থক্য গড়ে দেয়।
ভুল ডেটা স্ট্রাকচার বেছে নেওয়া অনেকটা ফাইল ক্যাবিনেটে একটা ছোট নোট রাখা বা শপিং ব্যাগে আস্ত লাইব্রেরির বই ঢোকানোর মতো। কাজ হয়তো হবে, কিন্তু তা হবে ভয়ঙ্কর ধীরগতির এবং মেমরির অপচয়কারী।
কেন এটি শেখা জরুরি?
সত্যি কথাটা হলো: টেক ইন্টারভিউয়ের সবচেয়ে গুরুত্বপূর্ণ টপিক হলো ডেটা স্ট্রাকচার। গুগল, মেটা, অ্যামাজন, মাইক্রোসফট — প্রতিটি বড় কোম্পানি আপনার ডেটা স্ট্রাকচারের জ্ঞান পরীক্ষা করবে। কিন্তু শুধু সে জন্যই আপনার এটি শেখা উচিত নয়।
আপনার এটি শেখা উচিত কারণ এটি আপনাকে একজন অনেক ভালো প্রোগ্রামার তৈরি করবে। ডেটা স্ট্রাকচার বোঝার পর আপনি সমস্যাগুলোকে ভিন্নভাবে দেখতে শুরু করবেন:
- "আমার দ্রুত ডেটা খোঁজার উপায় দরকার" → ব্যবহার করুন হ্যাশ টেবিল (hash table)।
- "আমার ডেটা সাজানো (sorted) অবস্থায় রাখতে হবে এবং দ্রুত ইনসার্ট করতে হবে" → ব্যবহার করুন ব্যালান্সড বিএসটি (balanced BST) বা হিপ (heap)।
- "আমাকে ক্রমানুসারে (order) কাজ করতে হবে" → ব্যবহার করুন কিউ (queue)।
- "আমাকে করা কাজ বাতিল (undo) করতে হবে" → ব্যবহার করুন স্ট্যাক (stack)।
- "আমাকে সম্পর্ক (relationships) বোঝাতে হবে" → ব্যবহার করুন গ্রাফ (graph)।
এই জ্ঞান ছাড়া আপনি হয়তো এমন সমস্যার সাধারণ সমাধান খুঁজবেন যার আসলে খুব চমৎকার ও তাৎক্ষণিক সমাধান রয়েছে। এটি জানলে আপনার কোড ১০ গুণ, ১০০ গুণ, এমনকি ১০০০ গুণ দ্রুত কাজ করবে।
একই কাজ, ভিন্ন গতি
ডেটা একই। প্রশ্নও একই। শুধু লিস্টের বদলে সেট বেছে নেওয়ায় গতি ১৪,০০০ গুণ বেশি হয়ে গেল। এটাই ডেটা স্ট্রাকচারের আসল ক্ষমতা।
প্রধান ডেটা স্ট্রাকচারগুলো
ডজন ডজন ডেটা স্ট্রাকচার থাকলেও, সেগুলো মূলত কয়েকটি মৌলিক ধারণার ওপর তৈরি। নিচে এর একটি ম্যাপ দেওয়া হলো:
- অ্যারে (Arrays) — সবচেয়ে সাধারণ স্ট্রাকচার। পরপর সাজানো বাক্স, যার প্রতিটিতে একটি সংখ্যা থাকে। ইনডেক্স দিয়ে তাৎক্ষণিক ডেটা পাওয়া যায়, তবে এর সাইজ বদলানো কষ্টকর।
- লিংকড লিস্ট (Linked Lists) — নোডের শৃঙ্খল বা চেইন। ডেটা যোগ করা বা মোছা খুব সহজ, তবে ইনডেক্স দিয়ে নির্দিষ্ট ডেটা খোঁজা বেশ ধীরগতির।
- স্ট্যাক (Stacks) — সবার শেষে আসা ডেটা সবার আগে বের হয় (Last in, first out)। এক স্তূপ প্লেটের কথা ভাবুন — আপনি সবসময় ওপরের প্লেটটাই আগে নেবেন।
- কিউ (Queues) — সবার আগে আসা ডেটা সবার আগে বের হয় (First in, first out)। অনেকটা কফি শপের সিরিয়ালের মতো।
- হ্যাশ টেবিল (Hash Tables) — ম্যাজিকের মতো কাজ করে। O(1) লুকআপ স্পিডে 'কি' (Key) দিয়ে 'ভ্যালু' (value) বের করে আনা যায়। পাইথনের ডিকশনারি, জাভাস্ক্রিপ্টের অবজেক্ট এই হ্যাশ টেবিল রূপেই কাজ করে।
- ট্রি (Trees) — শাখাপ্রশাখাযুক্ত ডেটা। ফাইল সিস্টেম, এইচটিএমএল (HTML) ডম (DOM), বা ডেটাবেস ইনডেক্স — সবই ট্রি ব্যবহার করে।
- হিপ (Heaps) — সবসময় এর সর্বনিম্ন (বা সর্বোচ্চ) মান জানা যায়। প্রায়োরিটি কিউ (Priority queue) তৈরির জন্য এটি পারফেক্ট।
- গ্রাফ (Graphs) — কানেকশনের নেটওয়ার্ক। সোশ্যাল মিডিয়া নেটওয়ার্ক, ম্যাপ এবং ইন্টারনেট — সবই মূলত গ্রাফ।
Complexity
বাস্তব জীবনে ডেটা স্ট্রাকচার
ডেটা স্ট্রাকচার কেবল পাঠ্যবইয়ে সীমাবদ্ধ নয় — আপনার ব্যবহৃত প্রতিটি অ্যাপেই এগুলো রয়েছে:
- ব্রাউজারের ব্যাক বাটন — ভিজিট করা পেজগুলোর একটি স্ট্যাক (stack)। ব্যাক বাটনে চাপ মানেই ওপরের পেজটি পপ (pop) হওয়া।
- প্রিন্টার কিউ — একটি কিউ (queue)। প্রথমে আসা ডকুমেন্টটি প্রথমে প্রিন্ট হয়।
- অটোকমপ্লিট (Autocomplete) — একটি ট্রাই (trie) (প্রিফিক্স ট্রি) যা আপনার টাইপ করা প্রতিটি অক্ষরের সাথে মিলিয়ে সম্ভাব্য শব্দ দেখায়।
- গুগল ম্যাপস — একটি গ্রাফ (graph) যেখানে প্রতিটি রাস্তার মোড় হলো নোড এবং রাস্তাগুলো হলো এজ (edge)। ডাইকস্ট্রার অ্যালগরিদম (Dijkstra's algorithm) সবচেয়ে ছোট রাস্তাটি খুঁজে বের করে।
- ডেটাবেস ইনডেক্স — একটি বি-ট্রি (B-tree) যার সাহায্যে ডেটাবেস কোটি কোটি ডেটার মধ্য থেকে মাত্র কয়েক মিলি-সেকেন্ডে নির্দিষ্ট কোনো ডেটা পেয়ে যায়।
- আপনার কন্টাক্ট লিস্ট — একটি হ্যাশ টেবিল (hash table) যা নামের বিপরীতে ফোন নম্বর মিলিয়ে রাখে।
ছোট কুইজ
পড়া চালিয়ে যান