نمایش نتایج 1 تا 13 از 13

نام تاپیک: طریقه محاسبه پیچیدگی زمانی

  1. #1

    Wink طریقه محاسبه پیچیدگی زمانی

    پیچیدگی زمانی

    من دارم کتاب مقسمی رو می خونم ( مبحث پیچیدگی زمانی ) - مشکلی که دارم اینه که یه سوال داده نمی دونم چطور حل شده.
    سوال اینه که برنامه زیر چند بار اجرا میشود؟


    for(i=1;i<=m;i++)
    for(j=1;i<=n;j++)
    x=x+1;


    جوابش اینه : t(n)=(m+1)+m(n+1)+mn

  2. #2

    نقل قول: طریقه محاسبه پیچیدگی زمانی

    سلام
    دوست عزیز استدلال من از این سوال اینه که حلقه i,m+1 بار اجرا میشه و حلقه j,n+1 و x=x+1; هم n بار. که میشه m+1*(n+1+n);
    دوست عزیز اگه جوابم اشتباهه , کمی جزیی تر توضیح بدید تا متجه بشم.
    ممنون.

  3. #3
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    توی کامپیوتر
    پست
    282

    نقل قول: طریقه محاسبه پیچیدگی زمانی

    با سلام

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

    پیچیدگی زمانی توابع در کتابهای طراحی الگوریتم به صورت کامل بیان شده است.
    حلقه برای تکرار یک سری کار نوشته می شود مثلا:
    for (int i=1;i<=10; i++)
    cout << i;

    و مثال دوم:
    for int j= 1 ; j<=20 ; j++)
    cout << j;

    در مثال اول دستور cout ده بار اجرا می شود.
    و در مثال دوم دستور cout بیست بار اجرا می شود.
    حال وقتی که دو حلقه را تو در تو بنویسیم مثل زیر:

    for(int i = 1; i<=10; i++)
    for(int j=1; j<20; j++)
    cout << i << j;


    دستور cout ، به تعداد 20*10 بار اجرا می شود.

    جواب سوال شما هم می شه m*n بار

  4. #4
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مرداد 1391
    سن
    29
    پست
    596

    نقل قول: طریقه محاسبه پیچیدگی زمانی

    این سوالی که شما پرسیدی اگر دقیقا همینیه که گزاشتی که کلا سوال اشتباهه!(چند جور برداشت متفاوت میشه ازش کرد...)

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    اسفند 1389
    محل زندگی
    تهران - باراجين
    سن
    31
    پست
    56

    نقل قول: طریقه محاسبه پیچیدگی زمانی

    ببین اون جوابی که نوشتی از نظر منم اشتباهه (تو 3 حالت میشه بررسی کرد ایزوله و نیمه ایزوله و ایزوله نشده)

    ویرایش : جواب کتاب درسته من اون "=" رو پشت n , m ندیدم

    الان دو تا حلقه تو در تو هست و یک خط اجرا

    در همه حالات دستور چاپ فقط و فقط یک بار اجرا میشود

    دستورات حلقه هم اگر از صفر شروع شده باشد تا n

    for(int i=0;i<m;i++)

    پیچیدگی زمانی میشه n بار + یک بار آخر که شرط رو چک میکنه .

    طبق این تفاسیر حلقه بیرونی (m) که خودش اجرا میشه و بعد از اجرای آخر میاد یک بار دیگه چک میکنه ببینه بازم ادامه بده یا نه پس میشه

    [(m)+1] = m+1



    حلقه داخلی هم به همین روال ولی هر بار که حلقه به پایان میرسه تازه یک بار حلقه بیرونی چرخیده و پیچیدگی زمانی این دو در هم ادغام میشه

    (m)[(n)+1] = m(n+1)



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

    [(m)(n)]




    جواب کل هم میشه جمع عبارات بالا یعنی :

    (m+1)+m(n+1)+mn
    آخرین ویرایش به وسیله chris66001 : شنبه 08 تیر 1392 در 21:31 عصر

  6. #6
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مرداد 1391
    سن
    29
    پست
    596

    نقل قول: طریقه محاسبه پیچیدگی زمانی

    شماهم که اشتباه نوشتی...
    1 دونه +1 برای همشون کم گزاشتی جواب کتاب درسته
    البته به شرطی که تعداد دفعات تکرار I++و j++وi=1وj=1 رو در نظر نگیریم

  7. #7
    کاربر تازه وارد
    تاریخ عضویت
    اسفند 1389
    محل زندگی
    تهران - باراجين
    سن
    31
    پست
    56

    نقل قول: طریقه محاسبه پیچیدگی زمانی

    نقل قول نوشته شده توسط omidshaman مشاهده تاپیک
    شماهم که اشتباه نوشتی...
    1 دونه +1 برای همشون کم گزاشتی جواب کتاب درسته
    البته به شرطی که تعداد دفعات تکرار I++و j++وi=1وj=1 رو در نظر نگیریم

    منم که همین رو گفتم :
    دستورات حلقه هم اگر از صفر شروع شده باشد تا n پیچیدگی زمانی میشه n بار
    یعنی دیگه اون -1 ها رو نمیخواد بزاریم ولی این چون از یک شروع شده من یک رو کم کردم.

  8. #8
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مرداد 1391
    سن
    29
    پست
    596

    نقل قول: طریقه محاسبه پیچیدگی زمانی

    سوال گفته j<=n نه j<n
    یعنی لازم نیست که 1 رو کم کنین.

  9. #9
    کاربر تازه وارد
    تاریخ عضویت
    اسفند 1389
    محل زندگی
    تهران - باراجين
    سن
    31
    پست
    56

    نقل قول: طریقه محاسبه پیچیدگی زمانی

    نقل قول نوشته شده توسط omidshaman مشاهده تاپیک
    سوال گفته j<=n نه j<n
    یعنی لازم نیست که 1 رو کم کنین.
    بله بله کاملا درسته من اون "=" رو ندیدم . الان پست رو درست میکنم

  10. #10

    نقل قول: طریقه محاسبه پیچیدگی زمانی

    خیلیییییییییییییییییییییی ییییییییییییییییییییییییی یییییی سخته

  11. #11
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,181

    نقل قول: طریقه محاسبه پیچیدگی زمانی

    for(i=1;i<=m;i++)

    برای حل این سوال از فرمول زیر استفاده میکنیم
    (n-k+1)+1

    n حد بالا یا شرط حلقه که در اینجا m هست
    k حد پایین یا مقدار شروع بدنه حلقه هست که در اینجا مقدار 1 مربوط به i=1 هست
    پس جواب خط اول میشه
    (m-1+1)+1

    و ساده تر میکنیم عبارت داخل پرانتر میشه:*
    (m)

    که این (m) در حلقه دوم و بدنه تاثیر گذار هست
    و جواب نهایی حلقه اول برابر است با :**
    (m+1)


    مرحله دوم سراغ حلقه دومی رفته
    for(j=1;j=<n;j++)

    باز فرمول را پیاده میکنیم
    (n-1+1)+1

    جواب درون پرانتر ساده تر میشه:*
    1-با +1 زده میشه و n تنها میمونه
    (n)

    و این (n) در بدنه تاثیر گذاره
    و جواب این حلقه میشه :**
    (n+1)*(m)

    این (m) در واقع همون جواب داخل پرانتر حلقه اول که با یک تک ستاره * مشخص شده هست

    مرحله سوم سراغ بدنه حلقه میریم
    x=x+1
    جوابش میشه 1 و اون (n) و (m) که با تک ستاره علامت گذاشتم هم میاد در بدنه تاثیر میگذاره و جواب بدنه میشه **
    (1*m*n)


    حالا( t(n
    برابر هست با جمع تمام عباراتی که با دوتا ستاره علامتگذاری کردم
    t(n)=(m+1)+(n+1)*(m)+(1*m*n)

    اگر این عبارت رو مرتب تر بنویسیم جواب پیچیدگی بدست میاد
    (m+1)+m(n+1)+(mn)
    آخرین ویرایش به وسیله ali_md110 : جمعه 24 مرداد 1393 در 13:39 عصر

  12. #12
    کاربر دائمی
    تاریخ عضویت
    اسفند 1391
    پست
    118

    نقل قول: طریقه محاسبه پیچیدگی زمانی

    من که اخر سردرنیاوردم ! :/

  13. #13

    نقل قول: طریقه محاسبه پیچیدگی زمانی

    اگه n بزرگتر یا مساوی m باشه جواب می شه:

    n*(n+1)/2 -(n-m)*(n-m+1)/2 =
    m*n - 0.5*m^2 + 0.5* m

    در غیر این صورت جواب می شه

    0.5 * n^2 + 0.5 * n

تاپیک های مشابه

  1. نحوه محاسبه پیچیدگی زمانی الگوریتم
    نوشته شده توسط میلاد قاضی پور در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 1
    آخرین پست: پنج شنبه 16 آبان 1392, 18:24 عصر
  2. محاسبه پیچیدگی زمانی و مکانی یک برنامه
    نوشته شده توسط B E H N A M در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 3
    آخرین پست: دوشنبه 21 آبان 1386, 14:30 عصر
  3. یک الگوریتم با پیچیدگی زمانی تتاnlogn
    نوشته شده توسط zahra_zapata در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 13
    آخرین پست: جمعه 12 خرداد 1385, 22:05 عصر
  4. چگونگی محاسبه فاصله زمانی بین دو تاریخ
    نوشته شده توسط jandaghian در بخش کامپوننت های سایر شرکت ها، و توسعه کامپوننت
    پاسخ: 6
    آخرین پست: جمعه 11 آذر 1384, 12:37 عصر
  5. پیچیدگی زمانی واسه این مقایسه
    نوشته شده توسط Developer Programmer در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 3
    آخرین پست: شنبه 14 شهریور 1383, 10:59 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •