ادغام فواصل (Merge Intervals)

الگوی ادغام فواصل: مرتب‌سازی بر اساس شروع + ادغام همپوشان‌ها؛ تقاطع، درج و پوشش فواصل

مسئله فواصل

مسائل فاصله (Interval) همه‌جا هستند: جلسات تقویم، رزرو اتاق، بازه‌های زمانی سرور، پوشش شبکه. الگوی حل همه یکی است!

الگوی سه‌گامی

  1. مرتب‌سازی بر اساس شروع فاصله — قلب الگو
  2. پیمایش: فاصله فعلی با آخرین فاصله ادغام‌شده مقایسه کن
  3. ادغام یا افزودن: اگر شروع فعلی ≤ پایان قبلی ← همپوشان ← ادغام (پایان = max)؛ وگرنه فاصله جدید

شرط همپوشانی

فاصله‌های (a_start, a_end) و (b_start, b_end):
همپوشان ⟺ a_start ≤ b_end و b_start ≤ a_end

بعد از مرتب‌سازی بر اساس شروع، فقط یک شرط می‌ماند: شروع_فعلی ≤ پایان_آخرین

مسائل کلاسیک

مسئلهتغییر الگو
ادغام فواصل همپوشانالگوی پایه
درج فاصله در لیست مرتبادغام از محل درج
تقاطع دو لیست فاصلهmax شروع‌ها، min پایان‌ها
اتاق‌های جلسات (حداقل چند اتاق؟)رویدادهای شروع/پایان + شمارنده
می‌توان همه جلسات را شرکت کرد؟مرتب‌سازی + بررسی همپوشانی

مثال گام‌به‌گام

ورودی: [(1,3), (2,6), (8,10), (15,18)]

مرتب (هست): شروع = 1, 2, 8, 15

(1,3) شروع → نتیجه: [(1,3)]
(2,6): 2 ≤ 3 همپوشان! → (1, max(3,6)) = (1,6)
(8,10): 8 > 6 جدا → افزودن
(15,18): 15 > 10 جدا → افزودن

خروجی: [(1,6), (8,10), (15,18)]
نکته: پیچیدگی O(n log n) — مرتب‌سازی غالب است. اگر ورودی از قبل مرتب باشد، O(n)! در مسئله «درج فاصله» از همین استفاده کنید.

جمع‌بندی

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

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