تالار گفتمان مانشت
محاسبه مرتبه اجرایی این کدها - نسخه‌ی قابل چاپ

محاسبه مرتبه اجرایی این کدها - one hacker alone - 26 خرداد ۱۳۹۱ ۰۱:۲۵ ق.ظ

سلام دوستان من با روش زیگما مشکل دارم
دوستان اگه وقت کردن ممنون میشم هر کی حوصله داشت یکی از کد های زیر رو حساب کنه
در کل یه دوست برای سه کد زیر میخوایم Smile
کد:
==================۱)
void p(int n)
{
    int sum=0,i=1,j=1;
    while(i<=n)
    {
        for(j=1;j<n;j++)
            sum=sum+j;
        i=i*3;
    }
}
==================۲)
s=0
for(i=1;i<n;i++)
{
    j=1;
    while(j<n)
    {
        s=s+i*j;
        j=j*3;
    }
}
cout<<"s="<<s;


=================۳)
void s(int a[],int n)
{
    for(i=1;i<=n;i++)
    {
        v=a[i];
        j=i-1;
        while(v<a[j] && j>0)
        {
            a[j+1]=a[j];
            j--;
        }
        a[j+1]=v;
    }
}


RE: محاسبه مرتبه اجرایی این کدها - riga - 26 خرداد ۱۳۹۱ ۰۲:۳۷ ق.ظ

سلام
به نظرم اینجوریهSmile

محاسبه مرتبه اجرایی این کدها - one hacker alone - 27 خرداد ۱۳۹۱ ۰۱:۳۱ ق.ظ

دوست عزیز ممنون از جوابتون اما من مراحل کار رو میخواستم بدونم و شما خیلی کلی گفتین
اگه امکان داره هر کدوم از دوستان که وقت میکنن مراحل حل رو بگن به روش زیگما

محاسبه مرتبه اجرایی این کدها - Premier Homme - 27 خرداد ۱۳۹۱ ۰۱:۵۹ ق.ظ

ببینید در حالت کلی حلقه وایل از مرتبه logn هست
و حلقه فور از مرتبه n

اینا که گفتم حالت کلی است نه لزوما همیشه .
اینکه حلقه ها به وایسته باشند ، یا مستقل باشند ، هم فرق میکنه اگر دو حلقه به هم وابسته باشندمرتبه دو حلقه در هم ضرب میشن و اگر مستقل باشند با هم جکع میشوند ( اینها توضیحات کلی است که باید بدانید)

RE: محاسبه مرتبه اجرایی این کدها - ف.ش - ۲۷ خرداد ۱۳۹۱ ۰۲:۰۰ ق.ظ

شما هر بار که به حلقه for می رسید اون رو n بار اجرا می کنید و هر بار فقط یک عمل جمع انجام میدین ، یعنی یک بار به ازای j=1 یکبار به ازای j=2 و .... یعنی دارید :
[tex]\sum_{j=1}^{n-1} 1=n-1[/tex]

هر بار که وارد حلقه while می شید هم for رو اجرا می کنید و هم یک عمل ضرب ، اما چه زمانی وارد حلقه while می شید ؟
ازi=1 و هر بار i*3 میشه تا حداکثر به n برسید. یعنی [tex]\left \lfloor \log n \right \rfloor[/tex] بار (در مبنای ۳)

میتونید n=8 بگیرید تا دلیل حدپایین گذاشتن رو متوجه بشید.

چون i هر بار ۳ برابر میشه نمیشه با سیگما نشونش داد پس من از متغیر k استفاده کردم.

که k=logn در مبنای ۳ هست و در نتیجه i=3^k

[tex]\sum_{k=0}^{\left \lfloor logn \right \rfloor-1}[/tex] بار عملیات داخل while تکرار میشه :

[tex]\sum_{k=0}^{\left \lfloor log n \right \rfloor -1} ( \sum_{j=1}^{n-1}1 1)=(\left \lfloor log n \right \rfloor((n-1) 1))=\left \lfloor log n \right \rfloor(n)[/tex]


-------------------------------

حالا اگه مثلا حلقه for به جای j<n بود j<=i اونوقت اندیس سیگمای درونی وابسته میشد به اندیس سیگمای بیرونی.

[tex]\sum_{k=0}^{\left \lfloor log n \right \rfloor-1}( \sum_{j=1}^{3^{k}}1 1)[/tex]

RE: محاسبه مرتبه اجرایی این کدها - riga - 27 خرداد ۱۳۹۱ ۰۲:۵۱ ق.ظ

(۲۷ خرداد ۱۳۹۱ ۰۲:۰۰ ق.ظ)afagh1389 نوشته شده توسط:  شما هر بار که به حلقه for می رسید اون رو n بار اجرا می کنید و هر بار فقط یک عمل جمع انجام میدین ، یعنی یک بار به ازای j=1 یکبار به ازای j=2 و .... یعنی دارید :
[tex]\sum_{j=1}^{n-1} 1=n-1[/tex]

هر بار که وارد حلقه while می شید هم for رو اجرا می کنید و هم یک عمل ضرب ، اما چه زمانی وارد حلقه while می شید ؟
ازi=1 و هر بار i*3 میشه تا حداکثر به n برسید. یعنی [tex]\left \lfloor \log n \right \rfloor[/tex] بار (در مبنای ۳)

میتونید n=8 بگیرید تا دلیل حدپایین گذاشتن رو متوجه بشید.

چون i هر بار ۳ برابر میشه نمیشه با سیگما نشونش داد پس من از متغیر k استفاده کردم.

که k=logn در مبنای ۳ هست و در نتیجه i=3^k

[tex]\sum_{k=0}^{\left \lfloor logn \right \rfloor-1}[/tex] بار عملیات داخل while تکرار میشه :

[tex]\sum_{k=0}^{\left \lfloor log n \right \rfloor -1} ( \sum_{j=1}^{n-1}1 1)=(\left \lfloor log n \right \rfloor((n-1) 1))=\left \lfloor log n \right \rfloor(n)[/tex]

سلام
مرسی توضیحاتتون خیلی خوب بود.فقط یه راهنمایی میخواستم از شماک این که تو توضیحاتتون از نمادهای ریاضی مثل سیگما وتوان استفاده کردین ولی راستش من هر کاری میکردم نمی تونستم اینجا بنویسمشون ، همه چی بهم می ریخت ، واسه همین اونارو توی word نوشتم وبعد attach کردم.

-------------------------------

حالا اگه مثلا حلقه for به جای j<n بود j<=i اونوقت اندیس سیگمای درونی وابسته میشد به اندیس سیگمای بیرونی.

[tex]\sum_{k=0}^{\left \lfloor log n \right \rfloor-1}( \sum_{j=1}^{3^{k}}1 1)[/tex]


محاسبه مرتبه اجرایی این کدها - ف.ش - ۲۷ خرداد ۱۳۹۱ ۰۸:۱۷ ق.ظ

riga جان

موقعی که پاسخ جدید رو میزنید زیر کادر متن نوشته شده نوشتن فرمول در Tex اونجا میتونید راحت فرمولها رو بنویسید و نیازی به Attach هم نداره.

روش نقل قول کردنتون اشتباهه!! باید نوشته های خودتون بعد از نوشته های من باشه نه وسطتش.

محاسبه مرتبه اجرایی این کدها - riga - 27 خرداد ۱۳۹۱ ۱۰:۴۶ ب.ظ

این یکی رو بلد بودم ولی اشتباه شد
ممنون از توضیحاتتون.