تالار گفتمان مانشت
آنالیز زمانی این برنامه؟ - نسخه‌ی قابل چاپ

آنالیز زمانی این برنامه؟ - JetiX - 23 مهر ۱۳۹۵ ۰۷:۴۴ ب.ظ

دوستان توی مبحث آنالیز زمانی واقعا ممنون میشم کمکم کنید
سپاسگزارم.


مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.


RE: آنالیز زمانی این برنامه؟ - Pure Liveliness - 23 مهر ۱۳۹۵ ۰۸:۱۶ ب.ظ

سلام. مطمئن نیستم درست باشه :|
trace می کنیم.
در ابتدا : Dec=0
در حلقه ی اول:
i=0 … j=1 … [tex]l=power(2,i)=2^0=1[/tex]
چون j=l هست پس شرط while یه بار درست هست و داخلش اجرا میشه.
درون while :
s=1 … ++dec
s=4 … ++dec
s=7 … ++dec
s=10 … ++dec
.
.
s=n*n … ++dec
در انتهای while : j=j*2=2
چند بار ++dec انجام شده؟ از ۱ تا n به توان ۲ با گام ۳ : [tex]\frac{n^2}{3}[/tex]بار تقریبا
------------------------------------------------------------------------------------
i=1 … j=1 … [tex]l=power(2,i)=2^1=2[/tex]
شرط while در ابتدا درست هست که j=1 و l=2 شده.
درون while :
s=1 … ++dec
s=4 … ++dec
s=7 … ++dec
s=10 … ++dec
.
.
s=n*n … ++dec
در انتهای while : j=j*2=2.
چند بار ++dec انجام شده؟ از ۱ تا n به توان ۲ با گام ۳ : [tex]\frac{n^2}{3}[/tex]بار تقریبا
حالا j=2 شده و l هم که درست هست، پس یه بار دیگه شرط while درست هست و داریم:
درون while :
s=1 … ++dec
s=4 … ++dec
s=7 … ++dec
s=10 … ++dec
.
.
s=n*n … ++dec
در انتهای while : j=j*2=2.
چند بار ++dec انجام شده؟ از ۱ تا n به توان ۲ با گام ۳ : [tex]\frac{n^2}{3}[/tex]بار تقریبا
------------------------------------------------------------------------------------
i=2 … j=1 … [tex]l=power(2,i)=2^2=4[/tex]
شرط while دفعه ی اول که j=1 هست، دفعه ی دوم که j=2 میشه و دفعه ی سوم که j=4 میشه درست هست چون از l کوچیکتر هست. پس سه بار داخل حلقه ی while اجرا میشه.
------------------------------------------------------------------------------------
i=3 … j=1 … [tex]l=power(2,i)=2^3=8[/tex]
شرط while دفعه ی اول که j=1 هست، دفعه ی دوم که j=2 میشه و دفعه ی سوم که j=4 میشه و دفعه ی چهارم که j=8 میشه درست هست چون از l کوچیکتر هست. پس چهار بار داخل حلقه ی while اجرا میشه.
------------------------------------------------------------------------------------
i=4 … j=1 … [tex]l=power(2,i)=2^4=16[/tex]
شرط while دفعه ی اول که j=1 هست، دفعه ی دوم که j=2 میشه و دفعه ی سوم که j=4 میشه و دفعه ی چهارم که j=8 میشه و دفعه ی پنجم هم درست هست چون از l کوچیکتر هست. پس پنج بار داخل حلقه ی while اجرا میشه.
خب پس به ازای هر i اون حلقه ی while به اندازه ی [tex]\log l\: +1[/tex] بار انجام میشه و هر بار هم هزینه ش میشه [tex]\theta(n^2)[/tex]
[tex]l=2^i[/tex]
[tex]\sum^{n-1}_{i=1}\log2^i+1[/tex] بار حلقه ی while اجرا میشه که هر بار هزینه ش [tex]\theta(n^2)[/tex] هست.
پس کل هزینه و مقدار نهایی dec میشه : [tex]n^2\times\sum^{n-1}_{i=1}\log2^i+1=n^2\times\sum_{i=1}^{n-1}i+1=n^2\times[2+3+...+n]=\theta(n^4)[/tex]