دو بخش‌کردن و رنگ‌آمیزی گراف

رنگ‌آمیزی گراف با دو رنگ: تشخیص دوپارچه بودن با BFS/DFS — کاربرد در تقسیم‌بندی و تطبیق

گراف دوپارچه (Bipartite)

گرافی که رئوسش را بتوان به دو گروه تقسیم کرد طوری که هر یال بین دو گروه باشد (داخل گروه یال نداشته باشیم). مثل دو تیم که فقط با حریف بازی می‌کنند!

تشخیص: رنگ‌آمیزی دو رنگ

گراف دوپارچه ⟺ با دو رنگ رنگ‌پذیر است. الگوریتم:

  1. BFS/DFS از هر رأس دیده‌نشده
  2. رنگ شروع = ۰؛ همسایه‌ها = ۱؛ همسایه‌های آن‌ها = ۰...
  3. اگر همسایه با «هم‌رنگ» پیدا شد ← دوپارچه نیست!

چرا جواب می‌دهد؟

دوپارچه نبودن ⟺ وجود دور فرد. رنگ‌آمیزی متناوب، دور فرد را «شکسته» نشان می‌دهد: آخرین و اولین هم‌رنگ می‌شوند — تناقض!

کاربردهای واقعی

مسئلهدو گروه
دانشجو-درسهیچ درسی دو دانشجوی هم‌گروه ندارد
خریدار-فروشندهتطبیق بازار
تشخیص تعارضزمان‌بندی بدون تداخل
شبکه‌های تبلیغاتیدو طرف نمایشگاه

پیچیدگی

O(V + E) — یک پیمایش BFS/DFS با آرایه رنگ.

نکته: رنگ‌آمیزی با k رنگ (k>2) NP-Complete است! فقط حالت دو رنگ، چندجمله‌ای و ساده است — این مرز ظریف را در مصاحبه بدانید.

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل الگوریتم‌ها است.

ابزارهای مرتبط