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

نام تاپیک: efficiency - بازدهی زمان اجرا در برنامه های نوشته شده به زبان جاوا + یک مثال

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    کاربر دائمی آواتار jlover
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    زیر میز کامپیوترم !
    سن
    40
    پست
    314

    efficiency - بازدهی زمان اجرا در برنامه های نوشته شده به زبان جاوا + یک مثال

    با سلام

    به این مسئله توجه کنید :
    http://acm.timus.ru/problem.aspx?space=1&num=1706
    و اما تشریح مسئله ( ممکنه درکش براتون وقتگیر باشه ! ) :
    من سعی می کنم با همون مثال توضیح بدم. رشته ی abaccc رو در نظر بگیرید به همراه کلید 3
    برای رسیدن به خروجی مورد انتظار ، باید ، برای این رشته - ی 6 حرفی - ، به تعداد حروفش ، - 6 تا - زیررشته ، به طول کلید - 3 - در نظر گرفت
    ( وقتی هم دیگه به پایان رشته رسیدیم دور میزنه )
    در اینصورت داریم :

    aba
    bac
    acc
    ccc
    cca
    cac

    خاست مسئله اینه که برای هر کدوم از این زیر رشته ها تعداد زیر رشته های ناتهی و متمایز محاسبه بشه

    نکته : با کمی دقت متوجه میشیم که حداکثر این تعداد برابر با
    k(k+1)/2
    خاهد بود که در مورد رشته ی مفروض میشه :
    3(3+1)/2
    یعنی 6 ( مثل رشته ی bac )
    و همینطور کمترین تعداد برابر خاهد بود با k (کلید) که در اینجا میشه 3 ( مثل رشته ی ccc )
    من در نسخه ی سوم برنامه م از این نکته استفاده کردم !

    یک نکته ی کلیدی هم که من - در هر سه نسخه ی برنامه م _ در الگوریتم بررسی هر کدوم از این رشته ها در متد compute برای بدست آوردن عدد مربوط به هر زیررشته بکار گرفتم اینه که هر رشته ای رو برای مثال بصورت زیر منشعب میکنیم تا بشه یک پیمایش منطقی روش اعمال :
    aba = { a, ab, aba ; b, ba ; a
    که خب زیررشته ی a تکراریست.

    اگر به صفحه ی زیر مراجعه کنید و توضیحات این حقیر رو ملاحظه بفرمایید میبینید که مسئله ی زمان اجرا (time limit) بدجوری منو تو گل فرو برده
    http://acm.timus.ru/forum/thread.asp...57230736032500
    شاید ایراد از الگوریتم و استراتژی حل مسئله باشه که من بکار بردم، اما با نگاهی به صفحه ی زیر
    http://acm.timus.ru/help.aspx?topic=java
    می بینیم که حتی نحوه ی دریافت ورودی و پرداخت خروجی ،هم ،در محاسبه ی طول زمان اجرا تاثیر گذاره و به همین خاطر این موضوع رو در این تالار هم ( بعلاوه ی تالار الگوریتم ) عنوان کردم.
    برای مثال زمانیکه از StringBuffer استفاده میکردم (بجای String ) تا شاید زمان اجرا رو بهبود بدم (که تاثیری نداشت ) مشاهده میشد که میزان خافظه ی مصرفی بالاتر رفته که بدیهی هم هست یا مثلن در برنامه ی اول از متدهای موجود در کلاس ArrayList بغایت برای ساده سازی حل مسئله استفاده شده ، ولی حدس زدم شاید زمانگیر بودن برنامه به این علته و نسخه های دوم و سوم رو ساختم که حلشون کمی پیچیده تره ، حافظه بهبود بسزایی پیدا میکنه ، اما زمان اجرا ...................................

    من بسته ی هر سه نسخه رو ضمیمه میکنم ، نسخه ی اول برنامه رو که بخونید استراتژی کار دستتون میاد (مستندات پیاده سازیش رو سعی کردم مفصل باشه )

    با تشکر
    آخرین ویرایش به وسیله jlover : چهارشنبه 23 تیر 1389 در 09:55 صبح

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

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