AlgoVerse

جدول پویا (تحلیل سرشکن)

آرایه‌ای که هر وقت پر شد دو برابر می‌شود؛ کپی‌ها گاهی گران‌اند ولی هزینه‌ی سرشکن هر درج حداکثر ۳ است.

آرایه‌ای می‌خواهیم که هر چقدر بخواهیم در آن درج کنیم. وقتی جدول پر شد، جدولی دو برابر بزرگ‌تر می‌سازیم و همه‌ی عضوها را در آن کپی می‌کنیم.

ادامه‌ی توضیح ↓
ورودی:
n=9خروجی PDF

۹ درج؛ جدول در درج‌های ۲، ۳، ۵ و ۹ بزرگ می‌شود و ۱+۲+۴+۸ = ۱۵ کپی لازم است. هزینه‌ی کل ۲۴، کمتر از ۳ × ۹.

  1. def dynamic_table(items):
  2. capacity = 1
  3. table = [None]
  4. size = 0
  5. copies = 0
  6. for item in items:
  7. if size == capacity:
  8. capacity = 2 * capacity
  9. bigger = [None] * capacity
  10. for i in range(size):
  11. bigger[i] = table[i]
  12. copies = copies + 1
  13. table = bigger
  14. table[size] = item
  15. size = size + 1
  16. return size + copies

ناوردا: بعد از هر درج، تعداد کل کپی‌ها از دو برابر تعداد عضوها کمتر است، پس هزینه‌ی کل حداکثر ۳n است.

شروع اجرا

503182139425764768

متغیرهای محلی

نارنجی = در همین گام عوض شد

items list

538192746

Call stack

  1. dynamic_table()خط 1
گام ۱ از ۱۰۴
خط سیاه = insert · خط نارنجی = گام کلیدیinsert: 0/9 · copy: 0/15 · grow: 0/4 · total_cost: 0/1

    رشد تعداد عملیات با اندازه‌ی ورودی

    میانگین ۱۲ گراف تصادفی برای هر n (با seed ثابت). نشانگر توخالی = ورودی فعلی.

    • insert
    • copy
    • ورودی فعلی (n=9)
    0510152046810121416n = تعداد عضوهای آرایهinsertcopy
    نمایش به شکل جدول
    ninsertcopy
    443
    667
    887
    101015
    121215
    141415
    161615
    توضیح

    ایده

    آرایه‌ای می‌خواهیم که هر چقدر بخواهیم در آن درج کنیم. وقتی جدول پر شد، جدولی دو برابر بزرگ‌تر می‌سازیم و همه‌ی عضوها را در آن کپی می‌کنیم.

    تحلیل سرشکن

    یک درج تکی ممکن است گران باشد (کپی کل جدول)، ولی این گرانی‌ها نادرند. بعد از n درج، کپی‌ها 1 + 2 + 4 + … < 2n هستند؛ پس هزینه‌ی کل کمتر از 3n و هزینه‌ی سرشکن هر درج O(1) است.

    روش حسابداری: برای هر درج ۳ سکه بپرداز: یکی برای خود درج، یکی برای کپی آینده‌ی همین عضو و یکی برای کپی آینده‌ی یک عضو قدیمی‌تر. سکه‌ها همیشه کافی‌اند.

    در trace به چه چیزی نگاه کنی

    • میله‌ها جدول فعلی‌اند و خانه‌های خالی هم دیده می‌شوند.
    • نمودار رشد نشان می‌دهد تعداد کپی‌ها خطی رشد می‌کند، نه درجه دو.