الگوریتم‌های حریصانه پیشرفته

حریصانه پیشرفته: زمان‌بندی با فاصله، مسئله پرش و کد هافمن (مفهومی) — کجا حریصی اثبات‌شده جواب می‌دهد

حریصانه فراتر از پایه

در دوره DSA، حریصانه پایه را دیدید. اینجا سه مسئله پیشرفته‌تر که حریصی آن‌ها اثبات‌شده است:

۱. زمان‌بندی با فاصله (Task Scheduler)

وظایف با خنکی n: بین دو وظیفه یکسان، حداقل n واحد فاصله. کمترین زمان کل؟

بینش حریصانه: پرتکرارترین اول — فریم (max_count−1)×(n+1)+1 بساز و بقیه را در شکاف‌ها بچین!

۲. مسئله پرش (Jump Game)

آرایه‌ای که arr[i] = حداکثر پرش از i. به آخر می‌رسیم؟

حریصانه از راست: «آخرین خوب» را نگه دار؛ اگر i + arr[i] ≥ آخرین‌خوب ← i خوب است. O(n)!

last_good = n - 1
for i from n-2 downto 0:
    if i + arr[i] >= last_good:
        last_good = i
return last_good == 0

۳. کد هافمن (مفهومی)

فشرده‌سازی بهینه: کاراکتر پرتکرار = کد کوتاه! حریصانه: دو گره کم‌فراوانی را با هیپ ادغام کن — درخت بهینه prefix-free. پایه ZIP و JPEG!

حریصانه یا DP؟

معیارحریصانهDP
انتخاب محلیقطعی و نهاییهمه گزینه‌ها امتحان
سرعتسریع ✓کندتر
تضمین بهینهفقط با اثبات!همیشه ✓
مثال شکست حریصیسکه‌های [1,3,4] هدف ۶: حریصی 4+1+1=3، بهینه 3+3=2!—
هشدار: قبل از حریصانه، با مثال نقض چالش کنید! اگر شک دارید، DP امن‌تر است. حریصانه اثبات‌نشده = جواب احتمالاً غلط.

جمع‌بندی

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

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