درخت پوشای کمینه
درخت پوشای کمینه (MST): اتصال همه رأسها با کمترین هزینه کل؛ الگوریتمهای Prim و Kruskal
مسئله MST چیست؟
درخت پوشای کمینه (Minimum Spanning Tree): در گراف وزندار همبند، درختی پیدا کن که همه رأسها را با کمترین مجموع وزن یالها به هم وصل کند.
مثال کلاسیک: شرکت مخابراتی میخواهد کابل به همه روستاها برساند؛ کابلها گراناند — کدام یالها را بگذارد که همه متصل شوند با کمترین هزینه؟
دو الگوریتم طمعکارانه معروف
۱. Prim — رشد از یک نقطه
مثل خزهای که از یک رأس پخش میشود:
- از یک رأس دلخواه شروع
- از همه یالهای بین «داخل درخت» و «بیرون»، سبکترین را بردار
- رأس جدید به درخت اضافه شد — تکرار تا پوشش همه
پیادهسازی با هیپ: O(E log V) — شبیه دایکسترا!
۲. Kruskal — مرتبسازی یالها
از سبک به سنگین، یالها را یکییکی:
- همه یالها را بر اساس وزن مرتب کن
- سبکترین یال را بردار؛ اگر دور نمیسازد، به درخت اضافه کن
- تکرار تا n−1 یال
تشخیص دور با ساختار Union-Find: O(E log E)
مثال کوچک — هر دو یک جواب
1
A ----- B
| |
4| |2
| 3 |
C ----- D
Prim از A: A-B(1), B-D(2), A-C(4) = 7
Kruskal: A-B(1), B-D(2), A-C(4) = 7 ✓
مقایسه Prim و Kruskal
| ویژگی | Prim | Kruskal |
|---|---|---|
| رویکرد | رشد از یک رأس | مرتبسازی یالها |
| پیچیدگی | O(E log V) | O(E log E) |
| مناسب برای | گراف پر یال (Dense) | گراف کمیال (Sparse) |
| ساختار کلیدی | هیپ | Union-Find |
| درخت در طول اجرا | همیشه متصل ✓ | جنگل (تکهتکه) |
کاربردهای واقعی
- شبکه: طراحی شبکه کابل/لوله با کمترین هزینه
- تصویر: segmentation (بخشبندی تصویر)
- خوشهبندی: خوشهبندی سلسلهمراتبی داده
- تقریب TSP: مسئله فروشنده دورهگرد (ضریب ۲)
- برقرسانی و جادهسازی: برنامهریزی زیرساخت
نکته: تفاوت با دایکسترا: MST مجموع وزن کل مسیر را کمینه میکند (نه مسیر تکبهتک!). مسیر A تا B در MST ممکن است از کوتاهترین مسیرشان طولانیتر باشد.
جمعبندی
- MST: اتصال همه رأسها با کمترین هزینه کل (n−1 یال)
- Prim: رشد تدریجی با سبکترین یال مرزی (هیپ)
- Kruskal: یالهای مرتبشده + رد یالهای دورساز (Union-Find)
- کاربرد: زیرساخت، خوشهبندی، تقریب TSP
این مبحث بخشی از دوره آموزش کامل ساختار داده و الگوریتم است.