বাইপার্টাইট ম্যাচিং (Bipartite Matching)
১০০ জন শিক্ষার্থী, ১০০ টি কোম্পানি। প্রতিটি শিক্ষার্থী কয়েকটি কোম্পানিতে আবেদন করেছে এবং প্রতিটি কোম্পানি সর্বোচ্চ একজন শিক্ষার্থীকে নিয়োগ দিতে পারে। এখন প্রশ্ন হলো, সর্বোচ্চ কতজন শিক্ষার্থী চাকরি পেতে পারে?
এটাই হলো বাইপার্টাইট ম্যাচিং (bipartite matching) — যা কম্পিউটার বিজ্ঞানের সবচেয়ে গুরুত্বপূর্ণ ও ব্যবহারিক গ্রাফ সমস্যাগুলির মধ্যে অন্যতম। শিডিউলিং বা রুটিন তৈরি থেকে শুরু করে বিজ্ঞাপনের নিলাম (ad auctions) এবং এমনকি ডিএনএ (DNA) বিশ্লেষণের মতো কাজগুলোতেও এর ব্যাপক প্রয়োগ বা ব্যবহার রয়েছে।
কোন বিষয়টি একটি গ্রাফকে বাইপার্টাইট (Bipartite) করে তোলে?
একটি গ্রাফ তখনই বাইপার্টাইট (bipartite) হয়, যদি আপনি তার সমস্ত ভার্টেক্সগুলোকে দুটি গ্রুপে ভাগ করতে পারেন — ধরুন বাম (L) এবং ডান (R) — যেখানে প্রতিটি বয়োজোড় বা এজ (edge) কেবলমাত্র L এবং R-এর মধ্যেই সংযুক্ত থাকে। অর্থাৎ, L-এর ভেতরের বা R-এর ভেতরের নিজেদের ভার্টেক্সগুলোর মধ্যে কোনো এজ থাকা চলবে না। উদাহরণস্বরূপ, বাম দিকে শিক্ষার্থীরা রয়েছে, ডান দিকে কোম্পানিগুলো, এবং তাদের মধ্যকার চাকরির আবেদনগুলো হলো এজ বা সংযোগ।
একটি ম্যাচিং (matching) হলো এজগুলোর এমন একটি সাবসেট যেখানে কোনো ভার্টেক্স দুইবার আসে না — অর্থাৎ প্রতিটি শিক্ষার্থী সর্বোচ্চ একটি জুটিতে বা পেয়ারে এবং প্রতিটি কোম্পানিও সর্বোচ্চ একটি জুটিতে থাকে। আমরা সর্বোচ্চ বা ম্যাক্সিমাম ম্যাচিং (maximum matching) চাই: অর্থাৎ যতটা সম্ভব বেশি সংখ্যক জুটির মিল করা।
অগ্মেন্টিং পাথ বা বর্ধনশীল পথ (Augmenting Paths): এর মূল ধারণা
ধরা যাক, একটি আংশিক বা পার্শিয়াল ম্যাচিং দেওয়া আছে। এমন অবস্থায় একটি অগ্মেন্টিং পাথ (augmenting path) হলো এমন একটি পথ যা ম্যাচ করা বা মেলানো এজ এবং ম্যাচ না করা এজগুলোর মধ্যে পর্যায়ক্রমে (alternates) চলতে থাকে, যার শুরু এবং শেষ উভয়ই হয় দুটি অম্যাচ করা (unmatched) ভার্টেক্সে। আপনি যদি এই পথের সমস্ত এজগুলো উল্টে দেন বা ফ্লিপ করেন (ম্যাচ করা → অম্যাচ করা, অম্যাচ করা → ম্যাচ করা), তবে ম্যাচিংয়ে একটি অতিরিক্ত জুটি বা পেয়ার যুক্ত হবে।
বার্জের থিওরেম (Berge's theorem): একটি ম্যাচিং তখনই সর্বোচ্চ বা ম্যাক্সিমাম হয়, যদি এবং কেবল যদি তার মধ্যে আর কোনো অগ্মেন্টিং পাথ বা পথ বিদ্যমান না থাকে। সুতরাং এর অ্যালগরিদমটি হলো: যতক্ষণ পর্যন্ত পথে আর কোনো অগ্মেন্টিং পাথ অবশিষ্ট না থাকে, ততক্ষণ পর্যন্ত এমন নতুন পথ খুঁজে বের করুন এবং ম্যাচিংকে বাড়াতে থাকুন। প্রতিটি পথ খুঁজে পাওয়ার জন্য একটি সাধারণ ডিএফএস (DFS) বা বিএফএস (BFS) অ্যালগরিদম ব্যবহার করলে এর কমপ্লেক্সিটি দাঁড়ায় \(O(VE)\)।
হপক্রফট-কার্প (Hopcroft-Karp): আরও দ্রুতগতির একটি উপায়
একবার একটি করে অগ্মেন্টিং পাথ খোঁজার পরিবর্তে, হপক্রফট-কার্প (Hopcroft-Karp) অ্যালগরিদমটি প্রতিটি ধাপে সবগুলো ক্ষুদ্রতম বা সবচেয়ে ছোট অগ্মেন্টিং পাথ একসাথে খুঁজে বের করে:
- বিএফএস (BFS) ধাপ: সবগুলোর ক্ষুদ্রতম অগ্মেন্টিং পাথের দৈর্ঘ্য খুঁজে বের করুন এবং একটি লেয়ারড (layered) বা স্তরবিন্যস্ত গ্রাফ তৈরি করুন।
- ডিএফএস (DFS) ধাপ: এই লেয়ারড গ্রাফের মধ্যে থাকা ভার্টেক্স-ডিসজয়েণ্ট (vertex-disjoint) বা আলাদা ভার্টেক্সের অগ্মেন্টিং পাথগুলোর একটি বড় বা ম্যাক্সিমাল সেট খুঁজে বের করুন এবং সেগুলোর সবগুলোকে একসাথেই অগ্মেন্ট করুন বা বাড়িয়ে নিন।
প্রতিটি ধাপের পর, বাকি থাকা ক্ষুদ্রতম অগ্মেন্টিং পাথগুলোর দৈর্ঘ্য কঠোরভাবে বাড়তে থাকে। এটি সর্বোচ্চ \(O(\sqrt{V})\) বার ঘটে, যা থেকে আমরা পাই \(O(\sqrt{V})\) টি ধাপ × প্রতিটি ধাপে \(O(E)\) = \(O(E\sqrt{V})\)।
ম্যাক্স ফ্লো (Max Flow)-তে রূপান্তর (Reduction)
বাইপার্টাইট ম্যাচিং আসলে এক ধরনের ম্যাক্স ফ্লো (max flow) সমস্যা। প্রতিটি L ভার্টেক্সের সাথে সংযুক্ত একটি সুপার-সোর্স s (যার ধারণক্ষমতা বা ক্যাপাসিটি ১) যুক্ত করুন, প্রতিটি R ভার্টেক্স থেকে একটি সুপার-সিঙ্ক t (যার ক্যাপাসিটি ১) যুক্ত করুন এবং সমস্ত L-R এজগুলোকে ১ ক্যাপাসিটিতে রেখে দিন। এরপর যেকোনো ম্যাক্স ফ্লো অ্যালগরিদম রান বা চালান — প্রাপ্ত ফলাফলটি ঠিক ম্যাক্সিমাম ম্যাচিং বা সর্বোচ্চ ম্যাচিংয়ের সমান হবে।
এই ইউনিট-ক্যাপাসিটি (Unit-capacity network) নেটওয়ার্কের ওপর ডিনিকের (Dinic's) অ্যালগরিদম চালালে এর কমপ্লেক্সিটি হয় \(O(E\sqrt{V})\) — যা ঠিক হপক্রফট-কার্পের (Hopcroft-Karp) মতোই।
কোনিগের থিওরেম বা উপপাদ্য (König's Theorem)
একটি ভার্টেক্স কভার (vertex cover) হলো ভার্টেক্সগুলোর এমন একটি সেট যা প্রতিটি এজকে "স্পর্শ" করে (অর্থাৎ প্রতিটি এজের অন্তত একটি প্রান্ত এই কভারের মধ্যে থাকে)। বাইপার্টাইট গ্রাফের ক্ষেত্রে:
ম্যাক্সিমাম ম্যাচিং এর সাইজ = মিনিমাম ভার্টেক্স কভার এর সাইজ
এই চমৎকার ডুয়ালিটি (duality) বা দ্বৈততা — যাকে কোনিগের থিওরেম বলা হয় — সাধারণ গ্রাফের ক্ষেত্রে প্রযোজ্য নয় (যেখানে মিনিমাম ভার্টেক্স কভার বের করা একটি NP-hard বা বেশ কঠিন কাজ)। তবে একটি ম্যাক্সিমাম ম্যাচিং বা সর্বোচ্চ ম্যাচিং ব্যবহার করে অল্টারনেটিং-পাথ (alternating-path) কনস্ট্রাকশনের মাধ্যমে সহজেই একটি মিনিমাম ভার্টেক্স কভার খুঁজে পাওয়া সম্ভব।
বাইপার্টাইট ম্যাচিং — ডিএফএস অগ্মেন্টিং পাথ বা DFS Augmenting Paths
Complexity
ছোট কুইজ
পড়া চালিয়ে যান