মিনিমাম স্প্যানিং ট্রি (Minimum Spanning Tree)
ধরুন আপনি একটা দেশের প্রধান ইঞ্জিনিয়ার। আপনার হাতে V-সংখ্যক শহর আছে এবং এই শহরগুলোর মধ্যে রাস্তা বানানোর জন্য E-সংখ্যক সম্ভাব্য প্ল্যান আছে। প্রতিটা রাস্তা বানানোর আলাদা আলাদা খরচ আছে। আপনার লক্ষ্য হলো: সবগুলো শহরকে একে অপরের সাথে এমনভাবে যুক্ত করা যেন রাস্তা বানানোর মোট খরচ সবচেয়ে কম হয়। আর হ্যাঁ, কোনো অযথা রাস্তা বানানো যাবে না — অর্থাৎ এমনভাবে রাস্তা বানাতে হবে যেন কোনো সাইকেল বা বৃত্ত তৈরি না হয় (কারণ এক শহরে যানয়ার জন্য একটাই রাস্তা যথেষ্ট, দুই দিক দিয়ে যানয়ার দরকার নেই)।
এই প্ল্যানের ফাইনাল রেজাল্টটাই হলো একটা মিনিমাম স্প্যানিং ট্রি (Minimum Spanning Tree বা MST): এটা এমন একটা ম্যাপ যেখানে ঠিক V-1 টা রাস্তা থাকে, যা সব শহরকে একসাথে জুড়ে দেয় এবং যার মোট খরচ হয় দুনিয়ার যেকোনো প্ল্যানের চেয়ে সবচেয়ে কম।
ক্রুসকালস অ্যালগরিদম (Kruskal's Algorithm)
ক্রুসকালস অ্যালগরিদমের বুদ্ধিটা একদম সোজা বা গ্রিডি (greedy): সবচেয়ে কম খরচের রাস্তাটা আগে বানিন, তবে খেয়াল রেখো যেন কোনো সাইকেল বা লুপ তৈরি না হয়। প্রথমে সব রাস্তাগুলোকে তাদের খরচের ছোট থেকে বড় হিসেবে সাজানেন (sort) হয়। এরপর একটা একটা করে রাস্তা নেওয়া হয়; যদি রাস্তাটা বানালে লুপ তৈরি না হয়, তবে সেটাকে ম্যাপে ঢোকানো হয়, নাহলে বাদ দিয়ে পরের রাস্তায় যানয়া হয়।
কোনো লুপ তৈরি হচ্ছে কি না, সেটা চোখের পলকে (O(α(n)) স্পিডে) চেক করার দায়িত্ব নেয় ইউনিয়ন-ফাইন্ড (Union-Find) — যার ফলে ক্রুসকালস অ্যালগরিদম হয়ে ওঠে মারাত্মক এফিশিয়েন্ট বা দ্রুত।
প্রিমস অ্যালগরিদম (Prim's Algorithm)
প্রিমস অ্যালগরিদম অন্য একটা বুদ্ধি কাটায়: সে একটা শহর থেকে শুরু করে তার চারপাশে একটু একটু করে জাল বা নেটওয়ার্ক বাড়াতে থাকে। যেকোনো একটা শহর দিয়ে কাজ শুরু হয়। এরপর ওই শহরের সাথে যুক্ত সবচেয়ে সস্তা রাস্তাটা খুঁজে বের করে নতুন একটা শহরকে জালে ঢোকানো হয়। এই 'সবচেয়ে সস্তা রাস্তা' খুব সহজে খুঁজে পাওয়ার জন্য একটা মিন-হিপ (min-heap) ব্যবহার করা হয়।
কখন ক্রুসকালস আর কখন প্রিমস?
দুটো অ্যালগরিদমই সবসময় জেনুইন একটা MST বানাতে পারে। ক্রুসকালস (Kruskal's) বেশি ভালো কাজ করে ফাঁকা বা স্পার্স গ্রাফে (sparse graph, যেখানে রাস্তা কম থাকে) — কারণ রাস্তা কম থাকলে রাস্তার লিস্টকে সর্ট (sort) করতে সময় কম লাগে। অন্যদিকে প্রিমস (Prim's) বেশি ভালো কাজ করে ঘিঞ্জি বা অনেক রাস্তাওয়ালা ঘন গ্রাফে (dense graph) — কারণ হিপের ভেতরে শুধু জালের বর্ডারের বা সামনের দিকের রাস্তাগুলোই থাকে, সব রাস্তা একসাথে রাখতে হয় না।
← → অ্যারো কি (arrow key) ব্যবহার করুন · উপাদানগুলোতে ক্লিক করুন
Complexity
ছোট কুইজ
পড়া চালিয়ে যান