AlgorithmsGraph Algorithms
Graph অ্যালগরিদম: BFS, DFS, Dijkstra ও MST
পড়তে প্রায় ১৪ মিনিটসংস্করণ ১সর্বশেষ আপডেট: ২১ অক্টোবর, ২০২৬১২টি অনুশীলন প্রশ্ন
সংক্ষেপে মনে রাখুন
দ্রুত রিভিশনের জন্য মূল কথা
মূল কথা
- BFS ও DFS-এর ডেটা স্ট্রাকচার, সময় জটিলতা ও ব্যবহার বর্ণনা করা
- Dijkstra, Bellman-Ford ও Floyd-Warshall কখন ব্যবহার করতে হবে তা চেনা
- Prim ও Kruskal-এর মাধ্যমে Minimum Spanning Tree (MST) নির্ণয়ের পার্থক্য বোঝা
সূত্র ও নিয়ম
Dijkstra: Non-negative edge weights ONLY (Greedy fails on negative edges). Bellman-Ford: Handles negative weights and detects negative cycles (O(V*E)).
ডিকস্ট্রা অ্যালগরিদম একটি গ্রিডি (Greedy) পদ্ধতি যা একবার কোনো নোড ভিজিট করে শর্টেস্ট ডিসট্যান্স চূড়ান্ত করে …
যেখানে ভুল হয়
অনেকে মনে করে ডিকস্ট্রা শুধু নেগেটিভ সাইকেল থাকলে ফেইল করে। এটি ভুল! নেগেটিভ সাইকেল না থাকলেও সাধারণ নেগেটিভ এজের উপস্থিতিতেই ডিকস্ট্রা ভুল উত্তর দিতে পারে।
BFS বনাম DFS
Adjacency List ব্যবহার করলে দুটি অ্যালগরিদমেরই Time Complexity O(V + E) এবং Adjacency Matrix ব্যবহার করলে O(V²)।
- BFS (Breadth-First Search): Queue (FIFO) ব্যবহার করে স্তরভিত্তিক (level-by-level) ভিজিট করে এবং Unweighted গ্রাফে সোর্স থেকে প্রতিটি নোডের shortest path নিশ্চিত করে।
- DFS (Depth-First Search): Stack (LIFO) বা Recursion ব্যবহার করে গভীরতায় যায়; Cycle detection, Topological sorting, Strongly Connected Components (SCC) ও Articulation point নির্ণয়ে ব্যবহৃত হয়।
Shortest Path অ্যালগরিদম
- Dijkstra's Algorithm (Greedy): কেবল অঋণাত্মক (non-negative) ওজনের গ্রাফে কাজ করে। Binary Min-Heap সহ জটিলতা
O((V + E) log V)। Negative weight edge থাকলে সঠিক ফলাফল নিশ্চিত করতে পারে না। - Bellman-Ford Algorithm (Dynamic Programming): Negative weight edge থাকলেও কাজ করে এবং Negative weight cycle শনাক্ত করতে পারে। মোট
V − 1বার সব এজ relax করে; সময় জটিলতাO(V · E)। - Floyd-Warshall Algorithm (Dynamic Programming): All-pairs shortest path বের করে; সময় জটিলতা
O(V³)এবং স্পেসO(V²)।
Minimum Spanning Tree (MST)
একটি সংযুক্ত, undirected, weighted গ্রাফের সবগুলো নোডকে (V টি) সর্বনিম্ন মোট ওজনে সংযুক্ত করতে ঠিক V − 1 টি edge লাগে এবং কোনো cycle থাকে না।
- Kruskal's Algorithm: সবগুলো edge ওজন অনুসারে ছোট থেকে বড় সাজিয়ে Disjoint Set Union (DSU) দিয়ে cycle পরীক্ষা করে যোগ করে। সময়:
O(E log E)বাO(E log V)। Sparse graph-এর জন্য উপযোগী। - Prim's Algorithm: একটি নোড থেকে শুরু করে সংযুক্ত সর্বনিম্ন ওজনের edge বেছে ট্রি বড় করে। সময়:
O((V + E) log V)। Dense graph-এর জন্য উপযোগী।
পরের ধাপ
এই টপিকে ৫টি প্রশ্ন অনুশীলন করুন
পড়া মনে আছে কি না, ছোট একটি সেটে দেখে নিন। প্রতিটি উত্তরের সাথে ব্যাখ্যা থাকবে, আর ভুল প্রশ্নগুলো রিভিশনের তালিকায় যাবে