ডেটা স্ট্রাকচার

অ্যালগরিদমের মূল ভিত্তি আয়ত্ত করতে ইন্টারেক্টিভ গাইড।

অ্যারে ও স্ট্রিং
ডেটা স্ট্রাকচার কেন শিখবেন?
সঠিক পাত্র সবকিছু বদলে দেয় — গতি, মেমরি এবং কোডের সৌন্দর্য
স্ট্যাটিক অ্যারে
নম্বর দেওয়া খোপের সারি — সাথে সাথে জিনিস নেওয়া যায়, কিন্তু সাইজ বদলানো যায় না
ডায়নামিক অ্যারে (Dynamic Array)
এমন একটা অ্যারে, যার জায়গা ফুরিয়ে গেলে নিজে নিজেই বড় হয়ে যায়
টু পয়েন্টার (Two Pointers)
অ্যারের উপর দিয়ে দুই আঙুল চালিয়ে এক চান্সেই সমস্যার সমাধান করা
স্লাইডিং উইন্ডো (Sliding Window)
অ্যারের উপর দিয়ে একটা ছবির ফ্রেম বা জানালা সরিয়ে নিমেষেই সাব-অ্যারে (Sub-array) সমস্যার সমাধান করা
প্রিফিক্স সাম (Prefix Sums)
আগে থেকেই যোগফল হিসাব করে রাখা, যাতে যেকোনো সাব-অ্যারের যোগফল চোখের পলকে O(1) স্পিডে বের করা যায়
লিংকড লিস্ট
সিঙ্গলি লিংকড লিস্ট
বাক্সের শেকল — প্রতিটা বাক্স শুধু চেনে তার ঠিক পরের জনকে
ডাবলি লিংকড লিস্ট (Doubly Linked List)
টু-ওয়ে শেকল — প্রতিটা বাক্স তার সামনের জন এবং পেছনের জন, দুই জনকেই চেনে
সার্কুলার লিংকড লিস্ট (Circular Linked List)
যে শেকলের কোনো শেষ নেই — শেষের কড়াটা আবার প্রথম কড়ার সাথে জোড়া লাগানো
ফ্লয়েডস সাইকেল ডিটেকশন (Floyd's Cycle Detection)
লিংকড লিস্টের ভেতরে কোনো লুকানো চক্কর বা লুপ আছে কি না — বাড়তি কোনো মেমোরি ছাড়াই ধরে ফেলা
রিভার্সিং লিংকড লিস্ট (Reversing a Linked List)
পুরো শেকলটাকে ধরে উল্টে দেওয়া — যাতে শেষের কড়া হয়ে যায় প্রথম কড়া
স্ট্যাক ও কিউ
স্ট্যাক (Stack)
প্লেটের স্তূপ — যে প্লেটটা সবার শেষে রাখবেন, সেটাই সবার আগে তুলবেন
কিউ (Queue)
লাইনে দাঁড়িয়ে অপেক্ষা — যে আগে আসবে, সে আগে পাবে
ডেক (Deque)
এমন একটা সারিবদ্ধ লাইন যেখানে সামনে বা পেছনে — যেকোনো দিক দিয়েই ঢোকা বা বের হওয়া যায়
মনোটোনিক স্ট্যাক (Monotonic Stack)
এমন একটা স্ট্যাক যেটা সবসময় ছোট থেকে বড় সাজানেন থাকে — পরের বড় বা ছোট সংখ্যাটা ম্যাজিকের মতো খুঁজে দেয়
মনোটোনিক কিউ (Monotonic Queue)
স্লাইডিং উইন্ডোর সবচেয়ে বড় বা ছোট সংখ্যাটা চোখের পলকে বের করার জাদুকরী কিউ
হ্যাশ টেবিল
হ্যাশ ফাংশন (Hash Functions)
যেকোনো নাম বা ডেটাকে মুহূর্তের মধ্যে একটা নির্দিষ্ট নম্বরে বদলে ফেলা
চেইনিং (Chaining)
লকারে জায়গা নেই? কোনো ব্যাপার না, একটার পেছনে আরেকটা ঝুলিয়ে দিন
সেট এবং ম্যাপ (Sets & Maps)
চোখের পলকে মেম্বারশিপ চেক আর নাম ধরে ভ্যালু খোঁজা — সবার প্রিয় হ্যাশ টেবিল
ফ্রিকোয়েন্সি প্যাটার্ন (Frequency Patterns)
একবার গোনো, বারবার উত্তর দিন — হ্যাশ ম্যাপের জাদুকরী সুপারপাওয়ার
ট্রি
বাইনারি ট্রি (Binary Trees)
এমন একটা ফ্যামিলি ট্রি, যেখানে বাবা-মায়ের সর্বোচ্চ দুজন করেই সন্তান থাকতে পারে
বাইনারি সার্চ ট্রি (Binary Search Tree)
সাজানেন-গোছানো গাছ — বাঁয়ে ছোটরা, ডানে বড়রা
বিএসটি ব্যালান্সিং (BST Balancing)
আনব্যালান্সড বিএসটি (BST) আসলে একটা বাঁশের মতো লম্বা লিংকড লিস্ট ছাড়া আর কিছুই না!
এভিএল ট্রি (AVL Tree)
নিজে থেকেই ব্যালান্স ঠিক রাখা ট্রি — যতই কাটাকাটি করুন, ও ঠিকই সোজা হয়ে দাঁড়াবে
রেড-ব্ল্যাক ট্রি (Red-Black Tree)
নিজে নিজে ব্যালান্স হওয়া জাদুকরী ট্রি — জাভার (Java) ট্রি-ম্যাপ বা সি++ (C++)-এর ম্যাপের পেছনের হিরো
সেগমেন্ট ট্রি (Segment Tree)
অ্যারের মাঝখানের যেকোনো রেঞ্জের যোগফল বের করা বা আপডেট করা — শুধু চোখের পলকে (O(log n)-এ)
ফেনউইক ট্রি (Fenwick Tree / BIT)
সেগমেন্ট ট্রির চেয়েও সহজে এবং বিটের জাদুতে শুরু থেকে শেষ পর্যন্ত যেকোনো যোগফল বের করা — মাত্র O(log n) স্পিডে
ট্রাই (Trie বা Prefix Tree)
শব্দের প্রথম কয়েকটা অক্ষর দিয়ে পুরো শব্দ খোঁজা — চোখের পলকে অটোকারেক্ট বা সাজেশন
এন-অ্যারি ট্রি (N-ary Trees)
যখন একটা নোডের বাপের যেকোনো সংখ্যক বাচ্চা থাকতে পারে — ফাইল সিস্টেম, ডম (DOM), বা অর্গানোগ্রাম
হিপ ও প্রায়োরিটি কিউ
হিপ (Heaps)
সবচেয়ে বড় বা ছোটটা সবসময় চোখের সামনে মেলা থাকে — O(1) স্পিডে উত্তর আর O(log n) স্পিডে আপডেট
হিপ সর্ট (Heap Sort)
অতিরিক্ত মেমোরি ছাড়াই O(n log n) স্পিডে সর্ট করার গ্যারান্টি
প্রায়োরিটি কিউয়ের প্যাটার্ন (Priority Queue Patterns)
K-তম বড়, K-টা লিস্ট জোড়া লাগানো, টপ-K জনপ্রিয় — সবকিছু একটা ছোট্ট হিপের খেল
টু-হিপ প্যাটার্ন (Two-Heap Pattern)
সংখ্যার পাহাড়কে মাঝখান থেকে দুই ভাগ করা — সবসময় চোখের পলকে মিডিয়ান বা মাঝের সংখ্যা বের করা
গ্রাফ
গ্রাফ কীভাবে মেমোরিতে থাকে (Graph Representation)
শহর আর রাস্তার ম্যাপ কীভাবে কম্পিউটারের মাথায় ঢোকানো যায়
ব্রেডথ-ফার্স্ট সার্চ (Breadth-First Search - BFS)
শহরের ম্যাপে লেভেল বা রিং ধরে খোঁজা — কাছের বন্ধুরা আগে
ডেপথ-ফার্স্ট সার্চ (Depth-First Search - DFS)
পেছনে ফেরার আগে একটা রাস্তা ধরে যত দূর যানয়া যায় তত দূর যান
টপোলজিক্যাল সর্ট (Topological Sort)
শহরগুলোকে এমনভাবে সাজান যেন সব ওয়ান-ওয়ে রাস্তা শুধু সামনের দিকেই যায়, পেছনের দিকে নয়
ইউনিয়ন-ফাইন্ড (Union-Find বা DSU)
কে কার বন্ধু সেটুকুই শুধু মনে রাখা — আর চোখের পলকে তাদের এক গ্রুপে মিলিয়ে দেওয়া
মিনিমাম স্প্যানিং ট্রি (Minimum Spanning Tree)
সবচেয়ে কম খরচে রাস্তা বানিয়ে সবগুলো শহরকে এক সুতোয় গাঁথা
ডাইকস্ট্রা অ্যালগরিদম (Dijkstra's Algorithm)
গ্রাফের জিপিএস (GPS) — এক জায়গা থেকে বাকি সব জায়গায় যানয়ার সবচেয়ে সস্তা বা ছোট রাস্তা বের করা
বেলম্যান-ফোর্ড অ্যালগরিদম (Bellman-Ford Algorithm)
নেগেটিভ রাস্তার শর্টেস্ট পাথ বের করা — এবং ভুল বা নেগেটিভ সাইকেল ধরে ফেলা
ফ্লয়েড-ওয়ার্শল অ্যালগরিদম (Floyd-Warshall Algorithm)
সবার থেকে সবার কাছে যানয়ার সবচেয়ে ছোট রাস্তা — জাস্ট একটা ট্রিপল লুপের ম্যাজিক
অ্যাডভান্সড / স্পেশাল
স্কিপ লিস্ট (Skip List)
ভিআইপি পাসওয়ালা লিংকড লিস্ট — যেখানে খোঁজার স্পিড O(log n)
ব্লুম ফিল্টার (Bloom Filter)
জিনিসটা কি আছে? — উত্তর: 'হতে পারে আছে', কিন্তু 'না' বললে ১০০% গ্যারান্টি নেই
LRU ক্যাশ (LRU Cache)
যেটা বেশি দরকার সেটা হাতের কাছে রাখুন, আর যেটা ভুলে গেছ সেটা ফেলে দিন
স্পার্স টেবিল (Sparse Table)
একবার O(n log n) সময় খরচ করে টেবিল সাজিয়ে নিলে, যেকোনো রেঞ্জের সবচেয়ে ছোট সংখ্যা বের করা যায় চোখের পলকে — O(1) স্পিডে
সাফিক্স অ্যারে এবং এলসিপি অ্যারে (Suffix Array & LCP Array)
কোনো শব্দের সবগুলো সাফিক্স বা শেষাংশকে সাজিয়ে রাখা — স্ট্রিং খোঁজার দুনিয়ার এক জাদুকরী হাতিয়ার