PDA

View Full Version : مبتدی: محاسبه زمان مصرفی و حافظه مصرفی یک الگوریتم



ali682344
چهارشنبه 19 خرداد 1389, 22:20 عصر
با سلام
ببخشید چطور میشه یه زمان مصرفی و حافظه مصرفی یک الگوریتم رو محاسبه کرد

اگه لطف کنید با مثال از تون ممنون میشم

mooo0h
سه شنبه 25 خرداد 1389, 09:20 صبح
مي گم اين سايت در زمينه الگوريتم ضعيف عمل كرده من هرچي گشتم راجع به زمان اجراي الگوريتم و محاسبه پيچيدگي زماني و مرتبه آن مطلب كاملي نديدم. متشكرم

loknatesabz
سه شنبه 27 دی 1390, 07:57 صبح
سلام
منم دارم الگوریتمی مینویسم که نیاز دارم زمان اجراش رو محاسبه کنم. کسی میتونه راهنماییم کنه؟

IamOverlord
سه شنبه 27 دی 1390, 12:26 عصر
خوب آخه این که یه فرمول خاص نداره.
باید کدت رو تحلیل کنی.

r00tkit
سه شنبه 27 دی 1390, 12:49 عصر
الگوریتمت رو با چه زبونی داری می نویسی توی .net می تونی از
http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

برای C++‎
http://www.mkyong.com/c/calculate-program-execute-time-time-elapsed-in-c/


برای پایتون :
http://wolfram.kriesing.de/blog/index.php/2006/learning-how-to-calculate-with-date-and-time-in-python

و برای .... از google استفاده کنی :)

soroushp
سه شنبه 27 دی 1390, 12:53 عصر
الگوریتم تون رو بنویسید تا با کمک هم مرتبه زمانی ش رو بدست آوریم

r00tkit
سه شنبه 27 دی 1390, 13:12 عصر
فکر نکنم منظور دوستموم مرتبه زمانی باشه ، ایشون دقیقا زمان اجرا شدن رو می خواست که من گفتم

soorena
سه شنبه 27 دی 1390, 19:12 عصر
سلام

لینک‌هایی‌ که geek گفت مدت زمان اجرا شدن یه برنامست که البته با الگوریتم میتونه خیلی‌ فرق داشته باشه.الگوریتم راه حل پیاده سازی یک مساله هستش در حالی‌ که برنامه نویسی روشی‌ برای پیاده سازی الگوریتم هستش.باتوجه به پست شماره ۱ چیزی که اینجا مطرح هستش محاسبه زمان با حافظه مورد نیاز یک الگوریتم هستش که منظور همون مرتبه اجرائی و پیچیدگی‌ محاسباتی هستش.خیلی‌ وقت‌ها ما قبل از اجرای یک برنامه باید پیچیدگی‌ محاسبتی اون رو بدونیم چون شاید اجرای اون برنامه مدت زمان زیادی طول بکشه و این همون کاری هستش که پیچیدگی‌ محاسباتی انجام میده.روش‌های محاسبه پیچیدگی‌ زمانی‌ متنوع هستش. روش محاسبه برای الگوریتم‌های بازگشتی و خطی‌ تا حدودی مختلف هستش.

من اینجا یکمش رو توضیح میدم باقیش رو به طور کامل میتونی با سرچ کردن پیدا کنی‌.(اگه اشتبا داشتم بهم بگین)

با c میگم چون پیاده سازیش سادست‌ و نیاز به ماشین مجازی و محاسبات اضافی و .. نداره.

۱.هر دستور ساده با ۲ عملوند مثل جمع ، تفریق ضرب تقسیم رو مرتبه اجراییش رو(1)oبگیر.

۲.تعریف متغیر توابع رو کلا بی‌خیال شو و اصلا در نظر نگیر.

۳.حلقه for مرتبه اجراییش به تعداد کانترش +۱

۴.حلقه while مرتبه اجراش می‌شه تعداد دفعات اجرا شده +۱ (اگه تعدادش با شرط مشخص شده و معلوم نیست میتونی‌ میانگین بگیری.)

۵.هر دستور داخل حلقه for مرتبه اجراش می‌شه مرتبه خودش * تعداد اجرای حلقه فور.

۶.دستکاری ساختمان داده‌ها هم بسته به نوعش مرتبه اجرا‌های مختلفی‌ داره.

مثلا دسترسی به هر عنصر آرای مرتبه (1)o و جستجوی یک عنصر تو آرایه مرتبه (o(n . جستجوی لیست پیوندی یکطرفه (o(n و به همین ترتیب....

soroushp
سه شنبه 27 دی 1390, 20:00 عصر
به پاسخی که جناب geek1982 به جوابه من داده مثله اینکه توجه نکردی ، اینی که شما نوشتی ما تو طراحی الگوریتم مختصا برای برنامه های C لحاظ می کنیم اما ایشان برای برنامه های دیگر رو هم آورده که البته لینک مختصر و مفیدی هست و سوال تاپیک مرتبه زمانی Clrs نیست بلکه زمان و حافظه ی مصرفی به صورت کلی ست

IamOverlord
سه شنبه 27 دی 1390, 20:22 عصر
روش soorena (http://barnamenevis.org/member.php?12120-soorena) تقریبا یه روش جامعی بود...
با یه کم تغییرات می شه در زبان های دیگه ای هم به کار برد.
البته هر چه قدر زبان سطح بالاتر باشه کار سخت تره.

soorena
سه شنبه 27 دی 1390, 20:54 عصر
سلام


به پاسخی که جناب geek1982 به جوابه من داده مثله اینکه توجه نکردی ، اینی که شما نوشتی ما تو طراحی الگوریتم مختصا برای برنامه های C لحاظ می کنیم اما ایشان برای برنامه های دیگر رو هم آورده که البته لینک مختصر و مفیدی هست و سوال تاپیک مرتبه زمانی Clrs نیست بلکه زمان و حافظه ی مصرفی به صورت کلی ست

شما هم ظاهراً به جوابی‌ که بنده نوشتم توجه نکردی. اولا من نوشتم که فقط برای زبان سی‌ از این روش استفاده می‌کنیم که با کمی‌ تغیرات به تمام زبان‌ها قابل اعمال هستش.

دوم اینکه چیزی که geek نوشته اصلا روش خاصی‌ نیستش بلکه فقط یک تابع ساده هستش که زمان اجرای برنامه رو بر میگردونه همین و بس. حالا اگه برنامه ۱۰ ساعت اجراش طول بکشه شما باید ۱۰ ساعت صبر کنی‌ تا روشت جواب بده ولی‌ با روشی‌ که من توضیح دادم شما خیلی‌ راحت میتونی‌ حدود زمان اجرای برنامت رو بدست بیاری.


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

soroushp
سه شنبه 27 دی 1390, 23:47 عصر
من دعوایی ندارم اما سوال تاپیک مربوط به یک الگوریتم هست ما الگوریتم رو لزوما نباید با C مرتبه ی زمانیش رو بدست بیاریم ، کدی که در c نوشته می شه مرتبه زمانی متفاوتی با کدی که در matlab نوشته می شه ، اگر سوال تاپیک مختصا پیاده سازی با c بود حق با شما بود اما فقط نوشته الگوریتم و ما الگوریتم رو با شبه کد می نویسیم نه با c