# Roadmap — basic → advanced শেখার ক্রম

> এই file হলো **বড় ছবি**: কোন topic আগে, কোনটা পরে, আর কোনটা কীসের উপর দাঁড়িয়ে। "আজ কী করব" জানতে চাইলে [STUDY-PLAN.md](STUDY-PLAN.md) (সপ্তাহ-ভিত্তিক রুটিন); "আমি কোথায় আছি, এরপর কোথায়" বুঝতে চাইলে এই file।

দুটো roadmap আছে, কারণ এদের কাজ আলাদা:

- **STUDY-PLAN.md** = সময়ের ম্যাপ (Week 1, Week 2 … ৪ মাসের deadline ধরে)।
- **roadmap.md** (এই file) = নির্ভরতার ম্যাপ (কোন idea কোন idea-র জন্য দরকার)।

---

## মূল নীতি

1. **ভিত্তি আগে।** Array আর hashing শক্ত না হলে graph/DP কিছুই দাঁড়াবে না।
2. **প্রতিটা topic আগেরটার কাঁধে দাঁড়ায়।** নিচের তীরচিহ্ন (→) সেই নির্ভরতা দেখায়।
3. **Interview-first।** ৪ মাসের জন্য কিছু গভীর CP topic ইচ্ছে করে পরে রাখা — নিচে "পরে" বলে চিহ্নিত।
4. **পড়া ≠ শেখা।** একটি ছোট problem নিজে solve করে যুক্তি বুঝিয়ে বলো; দুর্বল জায়গায় আরও অনুশীলন করো।

---

## পড়ার পথ (এক নজরে)

```mermaid
flowchart TD
    basics["১ · Python, loop, index, complexity"] --> arrays["২ · Array ও string"]
    arrays --> linear["৩–৫ · Linked list, stack, queue, hashing"]
    linear --> recursion["৬ · Recursion ও backtracking"]
    recursion --> treeheap["৭–৮ · Tree ও heap"]
    treeheap --> graphs["৯–১০ · Graph ও DSU"]
    recursion --> dp["১২ · Dynamic programming"]
    graphs --> mixed["১৩ · মিশ্র problem ও mock"]
    dp --> mixed
    mixed -. "প্রয়োজন হলে" .-> ranges["১১ · Segment ও Fenwick tree"]
```

তীর প্রস্তাবিত পড়ার ক্রম দেখায়; প্রতিটি অধ্যায়ের সুনির্দিষ্ট prerequisite নিচে আছে। এটি বাধ্যতামূলক একটিমাত্র পথ নয়।
যেমন, সাধারণ 1D DP শেখার আগে পুরো graph অধ্যায় শেষ করতে হয় না; DP on DAG-এর জন্য graph দরকার।
প্রথম array lesson-এর আগে advanced math শেষ করারও প্রয়োজন নেই।


---

## ধাপে ধাপে ক্রম

### ভিত্তি (এখান থেকে শুরু)

1. **[01 Math fundamentals](01-math-based-programming-fundamentals/README.md) — Level 0 থেকে 8।** সংখ্যা নিয়ে কাজ, `%` ও `//`, prime/GCD, modular arithmetic, bit manipulation, **prefix sum, two pointers, sliding window, binary search on answer, greedy** — এই শেষ পাঁচটা সরাসরি interview-এর রুটি-রুজি। Level 9-11 (geometry, advanced number theory, hard mixed) interview-এর জন্য **পরে**।
   - নির্ভরতা: কিছু না — একদম শুরু।
   - নিজস্ব roadmap: [01-…/roadmap.md](01-math-based-programming-fundamentals/roadmap.md) (১৫০টা problem-এর পূর্ণ তালিকা)।

2. **[02 Arrays & Strings](02-arrays-and-strings/README.md)।** সব কিছুর ভিত্তি data structure। two pointers, sliding window, prefix sum, Kadane।
   - নির্ভরতা: Math Level 5 (prefix), 6 (two pointers), 7 (binary search)।

3. **[05 Hashing](05-hashing/README.md)।** গড়ে O(1) lookup। frequency count, complement (Two Sum), grouping, prefix-sum + hashmap।
   - নির্ভরতা: 02।

### রৈখিক (linear) data structure ও recursion

4. **[03 Linked List](03-linked-list/README.md)।** pointer-এ হাত পাকানো; slow/fast pointer, reversal, merge।
   - নির্ভরতা: 02।

5. **[04 Stack & Queue](04-stack-and-queue/README.md)।** bracket matching, **monotonic stack** (next greater), **monotonic deque** (sliding window maximum), BFS frontier।
   - নির্ভরতা: 02-এর list ও index; linked list দিয়ে implementation বুঝতে 03 কাজে লাগবে। সামনে graph (09)-এ queue লাগবে।

6. **[06 Recursion & Backtracking](06-recursion-and-backtracking/README.md)।** call stack, "leap of faith", subsets, permutations, combinations, N-Queens। DP-র সরাসরি পূর্বসূরি।
   - নির্ভরতা: Math Level 3 (counting); সামনে tree (07) ও DP (12)।

### অরৈখিক (non-linear) data structure

7. **[07 Trees](07-trees/README.md)।** traversal (in/pre/post/level order), BST, height/diameter, LCA।
   - নির্ভরতা: 06 (recursion), 04 (level order-এ queue)।

8. **[08 Heap / Priority Queue](08-heap-priority-queue/README.md)।** top-K, k-way merge, two heaps (running median)।
   - নির্ভরতা: 07 (tree-আকৃতির ধারণা), Math Level 8 (greedy)।

9. **[09 Graphs](09-graphs/README.md)।** BFS, DFS, connected components, **Dijkstra**, topological sort।
   - নির্ভরতা: 04 (queue/stack), 06 (DFS = recursion), 08 (Dijkstra-তে heap)।

10. **[10 Disjoint Set Union](10-disjoint-set-union/README.md)।** union-find, cycle detection, Kruskal-এর সাথে সংযোগ।
    - নির্ভরতা: 09।

### advanced ও interview রূপান্তর

11. **[12 Dynamic Programming](12-dynamic-programming/README.md)।** **পুনরাবৃত্ত subproblem চেনার কৌশল।** state → transition, memo vs tabulation, 1D/grid/knapsack/LIS/LCS/edit distance।
    - নির্ভরতা: 06 (recursion), Math Level 4 (bit, bitmask DP-র জন্য), 09 (DP on DAG)।

12. **[13 Interview Master Problems](13-interview-master-problems/README.md)।** ২-৩টা idea মেশানো cross-topic problem; mock format (clarify → brute → optimize → code → test), Amazon/Google/Microsoft-style।
    - নির্ভরতা: উপরের প্রায় সব।

### CP-গভীর (অফার পাওয়ার পরে)

13. **[11 Segment Tree & Fenwick Tree](11-segment-tree-and-fenwick-tree/README.md)।** update-সহ range query। competitive programming-এ দরকারি, কিন্তু ৪ মাসের interview timeline-এ **optional** — পরে এসো।
    - নির্ভরতা: 02 (array), 06 (recursion), Math Level 4-5।

---

## Interview-critical বনাম পরে-রাখা (৪ মাসের জন্য)

| অবশ্যই (core) | পরে রাখো (অফারের পরে) |
| --- | --- |
| Arrays, strings, hashing | Segment tree / Fenwick (ch 11) |
| two pointers, sliding window | Math Level 9 (geometry) |
| binary search (on answer সহ) | Math Level 10 (advanced number theory) |
| linked list, stack/queue, monotonic stack | Math Level 11 (game theory, Burnside…) |
| recursion, backtracking | SCC, flow, string matching গভীরতা |
| trees, heaps | matrix expo, digit DP, DP optimizations |
| BFS/DFS/Dijkstra/topo sort, DSU | |
| **dynamic programming (গভীরভাবে)** | |

> সপ্তাহ পিছিয়ে গেলে আগে bitmask/tree-DP/Dijkstra-র গভীরতা কাটো — কিন্তু **কখনো binary search, sliding window, DP-core, বা mock কাটবে না।** বিস্তারিত কাট-লিস্ট: [STUDY-PLAN.md](STUDY-PLAN.md)।

---

## কীভাবে অগ্রগতি মাপবে

- প্রতিটা level/topic-এর `problems/README.md`-তে tracker আছে — solve করলে `planned` → `done`।
- প্রতি মাস শেষে milestone (cumulative solved সংখ্যা) [STUDY-PLAN.md](STUDY-PLAN.md)-এর Milestones টেবিলে।
- লক্ষ্য সংখ্যা নয়, **নির্ভুলতা ও গতি** — একটা Medium ৩০-৪০ মিনিটে পরিষ্কার ভেবে, কথা বলতে বলতে solve করতে পারা।
