آنالیز استهلاکی

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

تحلیل سر‌شکن:
در این نوع آنالیز ، n عمل انجام می شود و هزینه زمانی آن روی n عمل سر شکن می شود . در واقع ممکن است عملیات انجام شده هزینه های مختلفی داشته باشند و برخی هزینه زیادی داشته باشند ولی هزینه متوسط هر عمل کوچک باشد . لازم به ذکر است که آنالیز استهلاکی با آنالیز در حالت میانگین متفاوت است و روش های آماری را شامل نمی شود . در واقع آنالیز استهلاکی زمان اجرای متوسط هر عمل در بدترین حالت را نشان می دهد. برای این نوع آنالیز 3 روش مطرح است:

  1. آنالیز تجمعی(Aggregate Analysis )
  2. روش حسابرسی (Accounting method )
  3. روش پتانسیل ( Potential Method )

آنالیز تجمعی
در این روش هزینه n عمل را به دست می آوریم سپس به n تقسیم می کنیم . مثلاً n عمل روی پشته s که در ابتدا خالی است انجام داده ایم (عنصر از پشته pop می کند، البته اگر کمتر از k عنصر در پشته باشند، همه عناصر pop می شوند) درست است که هزینه ممکن است باشد ولی n عمل از عملیات فوق روی هم هزینه باشد ولی N عمل از عملیات فوق روی هم هزینه دارند پس هزینه هر عمل به صورت سرشکن شده برابر است.

روش حسابرسی
در این روش به عملیات مختلف، شارژهای مختلفی نسبت می دهیم که ممکن است شارژی که نسبت می دهیم، از هزینه واقعی عمل کمتر یا بیشتر باشد . مقداری که یک عمل شارژ می شود را «هزینه استهلاک » آن عمل گویند. اگر « هزینه استهلاک » یک عمل از «هزینه واقعی » آن عمل بیشتر باشد، تفاوت این دو به عنوان «اعتبار» به عناصر خاصی از ساختمان داده تخصیص می یابد. این اعتبار را می توان بعداً برای عملیاتی که هزینه استهلاکشان کمتر از هزینه واقعی شان است، صرف کرد.
به عنوان مثال عملیات پشته را در نظر بگیرید . می دانیم هزینه واقعی عملیات عبارت است از :

که s تعداد عناصر موجود در پشته هنگام فراخوانی Multipop است.
ولی ما هزینه استهلاکی زیر را به عملیات نسبت می دهیم :

با این مقادیر، می توان هر دنباله از عملیات را پشتیبانی کرد. هر push که انجام می شود، هزینه واقعی اش 1 است، پس از شارژ 2 مقداری آن ، 1 مقدار برای هزینه اش صرف می شود و 1 مقدار در عنصر push شده به عنوان اعتبار ذخیره می شود، پس تمام عناصری که در پشته هستند، اعتبار 1 مقداری دارند. حال اگر pop انجام شود، چون هزینه واقعی pop ، 1 است، این 1 را از اعتبار عنصری که pop می شود، دریافت می کند . پس از آنجایی که هزینه استهلاکی push ، pop و Multipop ثابت است پس هزینه Nعمل ، است.

روش پتانسیل
روش قبلی، اعتبار را به عنصر تخصیص می داد ولی این روش، اعتبار را به صورت پتانسیل به کل ساختمان داده تخصیص می دهد. فرض کنید وضعیت اولیه ساختمان داده ای است که می خواهیم عمل روی آن انجام دهیم. هزینه واقعی عمل i ام ، وضعیت ساختمان داده است پس از انجام عمل i ام روی تابع پتانسیلی تعریف می کنیم به اسم که به هر وضعیت ساختمان داده، یک عدد حقیقی نسبت می دهد:
یک عدد حقیقی=
بنابراین هزینه استهلاکی عمل i ام برابر است با :
پس کل هزینه استهلاکی برابر است با :
مثلاً فرض کنید در عملیات پشته ، تابع پتانسیل را برابر عناصر موجود در پشته فرض کنیم . در حالت پشته خالی ، که حالت شروع است. از آنجایی که تعداد عناصر موجود در پشته عددی نامنفی است پس همیشه . پس هزینه کل مستهلک شده برای عمل با توجه به تابع ، یک کران بالا برای هزینه واقعی است. حال هزینه مستهلک شده را برای به دست می آوریم .
اگر عمل ام روی پشته باشد و در حال حاضر تعداد عنصر در پشته باشد آنگاه:

بنابراین هزینه مستهلک شده برابر است با :

به همین ترتیب نشان دهید که هزینه مستهلک شده برابر صفر است. پس هزینه مستهلک شده هر عمل است . بنابراین از آنجایی که هزینه مستهلک شده کران بالای هزینه واقعی است پس هزینه واقعی عمل برابر است.

منابع[ویرایش]

کتاب طراحی الگوریتم- هادی یوسفی

پیوند به بیرون[ویرایش]