29/08/2026
DSA শিখতে গিয়ে তুমি কি কখনো এমন অবস্থায় পড়েছো, আজ Array শিখছো, কাল Graph, পরদিন Dynamic Programming, কিন্তু কিছুদিন পর মনে হচ্ছে সবকিছু জানো অথচ নতুন একটা problem সামনে এলে কোথা থেকে শুরু করবে বুঝতে পারছো না?
সমস্যাটা হয়তো তোমার মেধায় না, সমস্যাটা হতে পারে learning order-এ।
ধরো তুমি একটা building বানাচ্ছো। Foundation না করে সরাসরি পাঁচতলায় উঠতে গেলে যত সুন্দর design-ই করো, কোথাও না কোথাও সমস্যা হবেই। DSA-ও অনেকটা এমন। একটা concept ভালোভাবে বুঝে তার ওপর পরের concept build করতে হয়।
তাই শুরুটা করো Programming Fundamentals দিয়ে। Variables, loops, functions, arrays, pointers এবং basic problem solving ভালোভাবে বুঝে নাও। এরপর আসবে Time & Space Complexity, কারণ একই problem solve করার একাধিক উপায় থাকলে কোনটা কতটা efficient সেটা বুঝতে না পারলে DSA শেখার আসল উদ্দেশ্যটাই miss হয়ে যাবে।
তারপর আসো Array-তে। ধরো একটা student-এর পাঁচটা subject-এর marks রাখতে হবে। অথবা একটা e-commerce website-এ product-এর একটা collection রাখতে হবে। একই ধরনের data sequentially store এবং access করার জন্য Array খুব useful। Array শেখার সময় traversal, insertion, deletion, searching, frequency counting এসব practice করো।
Array-এর পর String শেখা অনেক natural, কারণ String-এর সঙ্গে indexing, traversal, frequency counting-এর মতো Array-এর অনেক concept connected। Username, text processing, palindrome, anagram বা character frequency-এর মতো problem করতে গিয়ে String-এর ব্যবহার খুব সহজেই বুঝতে পারবে।
এরপর Searching এবং Sorting। ধরো একটা e-commerce website-এ ১ লাখ product আছে। User বললো সবচেয়ে কম দামের product আগে দেখাও। আবার কেউ বললো highest rated product আগে দেখাও। Data কীভাবে organize করবে সেটা তখন গুরুত্বপূর্ণ হয়ে যায়। আর sorted data-এর মধ্যে কোনো কিছু দ্রুত খুঁজতে গেলে Binary Search-এর মতো algorithm কেন দরকার সেটা তখন বাস্তব problem থেকেই বুঝতে পারবে।
এরপর Linked List। Array-তে তুমি index দিয়ে data access করেছো, আর Linked List তোমাকে node এবং pointer/reference দিয়ে data organize করার ধারণা দেবে। একটা music playlist-এর কথা ভাবো, যেখানে একটা song-এর সঙ্গে পরের song-এর connection আছে। এখান থেকেই dynamic structure এবং pointer নিয়ে চিন্তা করার অভ্যাস তৈরি হয়।
তারপর Stack এবং Queue। Stack বুঝতে browser history-এর কথা ভাবতে পারো। তুমি Google খুললে, তারপর YouTube, তারপর Phitron। এখন Back চাপলে সর্বশেষ যে page-এ গিয়েছিলে সেটাই আগে আসবে। এটা LIFO, Last In First Out। আবার printer-এ অনেকগুলো request জমা হলে সাধারণভাবে যে request আগে এসেছে সেটাই আগে process হবে। এটা FIFO, First In First Out। Stack পরে Undo/Redo, function call এবং expression evaluation-এর মতো জায়গায় কাজে লাগে, আর Queue BFS, task processing এবং scheduling-এর মতো জায়গায় গুরুত্বপূর্ণ।
এরপর Hashing। ধরো একটা array-তে 5, 2, 5, 7, 2, 5 আছে এবং তোমাকে জানতে হবে কোন number কতবার এসেছে। HashMap ব্যবহার করলে খুব সহজে 5 → 3, 2 → 2, 7 → 1 ধরনের frequency mapping তৈরি করতে পারবে। আবার কোনো user-এর email দিয়ে দ্রুত তার information খুঁজে বের করার মতো কাজেও hashing-based lookup useful।
এবার আসবে Recursion, তারপর Tree। Tree বুঝতে computer-এর folder structure-এর কথা ভাবো। একটা folder-এর ভেতরে আবার folder, তার ভেতরে আবার folder। অর্থাৎ data একটা hierarchy বা parent-child relationship follow করছে। Tree traversal বুঝতে Recursion খুব কাজে লাগে। এরপর Binary Tree, Inorder, Preorder, Postorder এবং Level Order শেখা অনেক সহজ হয়ে যায়।
Tree-এর পর BST এবং Heap। BST-তে data এমনভাবে organize করা হয় যাতে search-এর মতো operation নিয়ে efficiently চিন্তা করা যায়। আর Heap বা Priority Queue বুঝতে hospital emergency department-এর কথা ভাবো। সেখানে যে patient আগে এসেছে তাকেই সবসময় আগে treatment দেওয়া হয় না, যার priority বেশি তাকে আগে দেখা হয়। এই priority-based processing-এর ধারণা Heap এবং Priority Queue-এর সঙ্গে সরাসরি connected।
সবশেষে আসবে Graph। এখানে তুমি শুধু data store করবে না, data-এর মধ্যে relationship নিয়েও ভাববে। Social network-এ একজন user একটি node আর friendship একটি edge হতে পারে। Google Maps-এ location node এবং road edge হিসেবে ভাবতে পারো। তখন প্রশ্ন আসবে, একজন মানুষ থেকে আরেকজনের কাছে কত ধাপে যাওয়া যায়, কোন route shortest, কোন node connected। এই ধরনের problem থেকেই Graph-এর প্রয়োজনীয়তা বোঝা যায়।
Graph শেখার পর BFS এবং DFS শেখো। Social network-এ তোমার direct friend যদি Level 1 হয়, friend-এর friend Level 2, তাহলে level by level explore করার ক্ষেত্রে BFS-এর intuition পাওয়া যায়। আবার একটা maze-এ একটা path ধরে যতদূর সম্ভব এগিয়ে গিয়ে dead end হলে ফিরে এসে অন্য path try করার চিন্তার সঙ্গে DFS-এর connection আছে।
এরপর ধীরে ধীরে Greedy, Backtracking এবং Dynamic Programming-এর মতো advanced topic-এ যেতে পারো। DP শেখার সময় staircase-এর example ভাবতে পারো। একবারে ১ step অথবা ২ step করে ১০০ step-এর staircase উঠতে হবে। একই calculation বারবার করার বদলে আগের result store করে reuse করার idea থেকেই Dynamic Programming-এর মতো approach আসে।
তাহলে beginner হিসেবে তোমার DSA learning order হতে পারে:
Programming Fundamentals
Time & Space Complexity
Array
String
Searching & Sorting
Binary Search
Linked List
Stack & Queue
Hashing
Recursion
Tree & Binary Tree
BST
Heap & Priority Queue
Graph
BFS & DFS
Shortest Path
Greedy / Backtracking
Dynamic Programming
কিন্তু একটা জিনিস সবচেয়ে বেশি মনে রাখবে। Topic শেষ করা আর topic শেখা এক জিনিস না।
Array শিখে Array-এর problem solve করো। Linked List শিখে Linked List-এর problem solve করো। Tree শিখে traversal-এর problem solve করো। Graph শিখে BFS এবং DFS-এর problem solve করো।
কারণ শেষ পর্যন্ত DSA-এর আসল skill হলো তুমি কতগুলো topic-এর নাম বলতে পারো সেটা না। নতুন একটা problem সামনে এলে তুমি কি বুঝতে পারছো, এখানে কোন data structure লাগবে, কোন approach কাজ করতে পারে এবং কীভাবে solution-টা আরও efficient করা যায়।
DSA একটা checklist না। এটা একটা progression।
একটা concept বুঝো। সেটা দিয়ে problem solve করো। ভুল করো। আবার solve করো। তারপর পরের concept-এ যাও।
শুরু করো Array থেকে।
একটা একটা করে foundation build করো।
কারণ ভালো programmer শুধু অনেকগুলো DSA topic জানে না, সে জানে কোন problem-এর জন্য কোন tool ব্যবহার করতে হবে।