تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 6 از 6

نام تاپيک: محاسبه ی زمان اجرای یک الگوریتم ؟؟؟

  1. #1
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Feb 2008
    پست ها
    253

    پيش فرض محاسبه ی زمان اجرای یک الگوریتم ؟؟؟

    سلام دوستان ...

    من می خوام چند تا الگوریتم رو از لحاظ سرعت با هم مقایسه کنم از این رو می خواستم ببینم چه طور باید این کار یعنی محاسبه زمان اجرا الگوریتم را انجام بدم اونم توی C#??????

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

    مثلا میخام زمان اجرای این حلقه رو بدست بیاره

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  2. این کاربر از ma-bah بخاطر این مطلب مفید تشکر کرده است


  3. #2
    داره خودمونی میشه asadi.hasan's Avatar
    تاريخ عضويت
    Jul 2012
    پست ها
    48

    پيش فرض

    سلام ؛ من قبلا این کارو تویC++انجام دادم و از دستور Time استفاده کردم. به این شکل که ابتدای الگوریتم تایم رو بدست میارید بعد الگوریتم اجرا میشه و سپس در انتهای الگوریتم ، دوباره تایم رو بدست میارید که اگه زمان دوم رو از اولی کم کنید .هزینه الگوریتم محاسبه میشه.

  4. #3
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    سوال جالبی است. جزء موارد مورد علاقه من است.

    البته اصل مطلب را خودتان با حلقه ای که دارید متوجه شده اید.
    (((
    برای اندازه گیری زمان های خیلی کوچک، راه حل ساده ای وجود دارد

    اگر بخواهید قطر یک ورق کاغذ را اندازه بگیرید چه میکنید؟
    100 یا 1000 برگ ان را روی هم گذاشته و اندازه گیری میکنید و در نهایت عدد را بر تعداد تقسیم میکنید.

    در برنامه نویسی هم همین روش به خوبی جواب میدهد.
    اگر قصد اندازه گیری زمان های خیلی کوچک را دارید کافی است کد مورد نظر را در حلقه ای تکرار کنید.
    )))


    مثلاً :
    کد زیر را کلی و مجزا از آزمایش شما در نظر گرفته ام و for شما را هم نادیده گرفته و خودش را جزء مورد آزمایش به حساب آورده ام.
    شبه کد زیر، عملیات Test را 1000 بار انجام داده و زمان اجرای 1000 بار آن را به میلی ثانیه به دست می آورد، ولی زمان نمایش (برای جبران 1000 بار) آن را به میکروثانیه نمایش میدهد.
    (این عملیات Test مجدد میتواند حلقه هم باشد، ایرادی ندارد، میتواند کد main را مستقل در نظر گرفت و مدام تغییرش نداد.)
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    (یک پروژه ConsoleApplication ایجاد کنید.)

    - البته باز هم برای اندازه گیری دقیق تر بهتر است خود این آزمایش را هم حداقل چند بار تکرار کنید و میانگین اعداد چند آزمایش مجزا را به عنوان عدد مورد نظر لحاظ کنید.

    - باید بدانید کامپایل در حالت Debug همواره سرعت کمتری از حالت Release دارد.
    (مثلاً همین کد فوق در رایانه من و در حالت Debug حدود 40µS و در حالت Release حدود 0µS اجرا شد!)

    - برای واقعی تر شدن و عدم حذف احتمالی توسط بهینه سازی مد Release ، سعی کنید کدتان یک نتیجه نهایی (غیر object) را return کند.

    - برای واقعی تر شدن بهتر است بجای اجرای برنامه از داخل VS ، آن را کامپایل کرده و exe آن را مستقلاً از ویندوز اجرا کنید، این مورد مخصوصاً در حالت Release باعث تفاوت سرعت خواهد شد.

    - میتوانید به کامپایل شدن 32بیتی و 64بیتی هم در کارتان دقت کنید.

    - برنامه های در حال اجرا روی رایانه و کلاً منابع آزاد سیستم عامل و سخت افزار میتواند روی نتایج تاثیرگذار باشد.


    امتحان کنید، جالب است!
    موفق باشید.

  5. 4 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  6. #4
    کـاربـر بـاسـابـقـه szh_1367's Avatar
    تاريخ عضويت
    Apr 2007
    پست ها
    1,007

    پيش فرض


    اگر بخواهید قطر یک ورق کاغذ را اندازه بگیرید چه میکنید؟
    100 یا 1000 برگ ان را روی هم گذاشته و اندازه گیری میکنید و در نهایت عدد را بر تعداد تقسیم میکنید.

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

    تشکر

  7. این کاربر از szh_1367 بخاطر این مطلب مفید تشکر کرده است


  8. #5
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Feb 2008
    پست ها
    253

    پيش فرض

    مهندس دستت درد نکنه ....

    با توجه به اینکه من از مفاهیم برنامه نویسی دات نت و به طور کل از مفاهیم و اصطلاحات سر در نمی یارم از جواب کاملتون دو تا سوال همینطوری برام پیش اومده که مربوط به اصل موضوع نیست فقط می خوام یه چیزی یاد گرفته باشم . فقط بهم نخندیا !!!! سوالم اینکه که
    این release که می گی یعنی چی ؟؟؟؟؟؟؟؟؟
    این object که می گی یعنی چه؟؟؟؟؟؟؟؟؟؟؟

  9. #6
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    این release که می گی یعنی چی؟
    برنامه ها در دات نت بطور پیش فرض با دوحالت کامپایلی Debug و Release ایجاد میشوند.
    حالت Debug (همانطورکه از نامش مشخص است) برای اجرا در حالت اشکال یابی و trace و... و مخصوصاً از داخل VS است، که حاوی اطلاعات اضافه و عدم بهینه سازی برای اشکال یابی راحت تر است.

    حال Release (همانطورکه از نامش مشخص است) حالت کامپایلی مطلوب برای انتشار برنامه نهایی و تحویل به مشتری است. این حالت توسط بهینه ساز کامپایلر برای سرعت بیشتر بهینه شده (بعنوان مثال روش inline و یا در سایر زبانها fastcal و...و...) خروجی این حالت بسیار بهینه تر و سریعتر از حالت قبل است ولی برای اشکال یابی در زمان طراحی مناسب نیست.

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

    =====

    این object که می گی یعنی چه؟
    object جدای آن مفهوم شی گرایی اش، در دات نت بطور مشخص نام یک کلاس خاص است.
    کلاسی که تمام اشیا و سایر کلاس های دات نت بطور مستقیم و غیر مستقیم از آن وراسط گرفته اند.
    شما فرض کنید یک نوع متغییر که میتواند هرچیزی را در خود جای دهد. (انواع class, struct, enum, delegate و....)
    در زمان انتقال یک struct (و طبیعتاً enum) از طریق نوع object عملی موسوم به box و unbox صورت میگرد که ضمن سریع بودن در تعداد اجرا زیاد میتواند کمی باعث کندی شود و مخصوصاً در شرایط جاری که نیاز به اندازه گیری عدد دقیقی است، میتواند باعث خطا و غیرواقعی شدن اندازه گیری ها شود.
    و...

    =====

    لازم بذکر است که کد قبلی در پست سوم، از نظرهای مختلف قابل توسعه و بهتر و دقیق تر شدن هم است ...

    موفق باشید.

  10. 2 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •