مقدمه

بسیاری از مسائل برنامه نویسی تنها با استفاده از Dynamic Programming حل میشوند در این نوشتار سعی شده که طرح کلی برنامه نویسی پویا و دلیل و مزایای استفاده از آن با چندین پیاده سازی برای تابع Fibonacci بیان شود. در مطالب آینده مثال های مهم تر و به نسبت پیچیده تری قرار میگیرد.


برنامه نویسی پویا یا Dynamic Programming چیست ؟

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

در استفاده از تکنیک برنامه نویسی پویا ما حل مسئله را توسط حل مسئله های کوچکتر بیان میکنیم با این تفاوت که با ذخیره سازی از محاسبه دوباره اجتناب میکنیم.

ادامه مطلب

Guilan Faculty of Engineering
Hesam Haddad

Today we are going to be talking about the Importance of Algorithms in Programming and providing their usage, optimization after definitions.
The main propose of this is to help you have a clear view of algorithms or some basic knowledge.


What’s An Algorithm?
Algorithms are sets of rules to be followed in calculation or other problem solving by computer.


Runtime Analysis
After The correctness of an algorithm to solve all the test cases, the most important thing is runtime.
Computer Scientists typically talk about the runtime relative to the size of input. If the input consists of N integers, an algorithm witch has a runtime proportion to N2 represent as O(N2) means that this algorithm terminate and complete after doing N2 operations.

ادامه مطلب

الگوریتم حریصانه چیست؟
الگوریتم حریصانه یا آزمند الگوریتمی است که مبنای آن بر انتخاب عنصر یا مسیری که در هر مرحله بهترین به نظر میرسد بدون توجه به انتخاب های قبل یا بعد میباشد. قبل پیاده سازی این الگوریتم باید ابتدا اثبات کنیم که بهترین انتخاب در هر مرحله به طور کلی بهترین انتخاب میباشد در غیر این صورت به جواب نادرستی میرسیم برای مثال نمیتوانیم در مسئله کوتاه ترین فاصله بین دو گره در گراف از الگوریتم حریصانه استفاده کنیم .

کجا نمیتوان از الگوریتم حریصانه استفاده کرد؟

گراف بدون جهت زیر را در نظر بگیرید.

گراف نمونه

برای پیدا کردن کوتاه ترین مسیر بین گره A   و D اگر به صورت حریصانه عمل کنیم  یال A-C از یال A-B  دارای وزن کمتری میباشد پس یال A-C  را در نظر میگیریم ولی در ادامه مجبوریم از تنها انتخاب یعنی C-D استفاده کنیم و به گره  D برسیم. طول مسیر 9 + 15 یعنی 24 میباشد اما در صورتی که در ابتدا یال A-B را انتخاب کرده بودیم  با اینکه نسبت به A-C در مرحله اول انتخاب بدتری بود اما در ادامه مسیر بهینه تر و کوتاه تری را داشتیم.
پس نمیتوان از الگوریتم حریصانه در پیدا کردن کوتاه ترین میسر بین دو گره استفاده کرد برای اینکار میتوان از الگوریتم هایی مثل Dijkstra استفاده کرد که به این مقاله مربوط نمیشود.
اما باید بدانیم که اگر در مسئله ای الگوریتم حریصانه درست باشد بی شک بهترین راه حل برای آن مسئله حریصانه است چون نسبت به بقییه الگوریتم ها دارای پیچیده گی زمانی کمتری میباشد.
ما بنا بر روال همیشگی امروز یک مسئله ICPC – ACM را برای مثال انتخاب کرده ایم که در حل آن از الگوریتم حریصانه میتوان استفاده کرد.
ابتدا متن سوال را مرور میکنیم

ادامه مطلب

سلام دوستان

امروز به جای حل و بررسی مسائل برنامه نویسی به معرفی منابع و شفاف سازی در زمینه الگوریتم نویسی میپردازیم

قالبا دوستانی که با تگ کلیدی "آموزش الگوریتم نویسی" وارد این تارنما ( بقول پاسداران زبان پارسی ) میشوند را میتوان به دو گروه تقیسم کرد.


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


گروه دوم که به دنبال اموزش Fllowchart فلوچارت یا pseudocode شبه کد به صورت پایه هستند.

ادامه مطلب

سلام دوستان
امروز میخواهیم یک مبحث پر کاربرد در جاوا را توضیح دهیم Timer در برنامه نویسی کاربرد های بسیاری دارد از کاربرد در یک سیستم اندازه گیری زمان گرفته تا بروز رسانی زمان و تاریخ در یک برنامه تجاری.
کار با Timer در JSwing جاوا بنظر عجیب می آید چون مثل C# یا Visual Basic یک کنترل خاص به Timer اختصاص داده نشده است ( حداقل در Netbeans چنین کنترلی وجود ندارد)

ادامه مطلب

سلام دوستان

قبلا یک سوال از مسابقه DM Contest ShareCode به اسم  حل مسئله کابل های در هم - Tangled in Cables Solotion را حل کرده بودیم در این مسابقه واقعا سوال های خوبی انتخاب شده بود و همه سوالها در واقع کاربرد یکی از الگوریتم ها بود.

خب سوال امروز مسئله نا مساوی هاست منبع اصلی سوال سایت ZOJ میباشد.

این سوال با دادن یک سری نامساوی از ما میخواهد که نامساوی های دیگری که نتیجه می دهد را پیدا کنیم . اشتباهی که زمان خواندن این سوال کردم باعث شد که برای چندین بار پشت سر هم Wrong Answer از سایت بگیرم . اما در آخر از دو روش مختلف از سایت ZOJ و Sharecode توانستم Accept بگیرم هر دو روش رو در ادامه به همراه کد توضیح میدهم ابتدا سوال را مطالعه کنید.

ادامه مطلب


سلام دوستان سوالی که امروز براتون انتخاب کردم یه سوال از مسابقه DM Contest سایت Sharecode.ir هستش که چند هفته پیش برگذار شد منبع اصلیش   Mid-Atlantic 2004 هستش ... این مسئله خیلی وقت منو گرفت چون هربار سعی کردم جواب بهتری واسش ارائه بدم ... در آخر هم از سایت ShareCode.ir و سایت poj.org واسه این راه حل Accept گرفتم ولی سایت ICPC Live Archive به کد Wrong Answer داد .

خب ابتدا سوال رو مطالعه کنید

ادامه مطلب

سلام دوستان ، همونطوری که تو نظرات خواسته بودن که سوالات ACM ICPC سایت شریف رو حل کنیم امروز به حل یک سوال نسبتا ساده مسابقه Tehran, Asia Region - Regional 2011 میپردازیم

Mobile SMS Keys

لینک ShareCode.ir

خب قبل از ادامه حل سوال ابتدا سوال رو کامل مطالعه بفرمایید و سعی کنید خودتان حل کنید این سوال فقط نیازمند پیاده سازی است و نیاز به الگوریتم پیچیده خاصی ندارد توصیه من این است که حدافل نیم ساعت وقت برای حل این سوال بگذارید و بعد کد نمونه را چک کنید. 

ادامه مطلب

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

البته این میتونست یک مسئله ACM هم باشه به این صورت که 2 تا عدد بگیره بگه با هم دوست هستند یا نه !!

عدد های دوست اعدادی هستند که جمع مقسوم علیه هاشون برابر با عدد دیگه بشه مثل 220 و 284

ادامه مطلب

سلام
امروز یک مسئله خوب ACM به نام حل مسئله محیط تصاویر Image Perimeters Solotion را برای حل انتخاب کرده ایم این سوال را با استفاده از توابع بازگشتی حل کرده ایم.
این مسئله از مسابقه Mid-Central USA 2001 انتخاب شده است
لینک سوال در ICPC Live Archive
لینک سوال در ShareCode.ir

حل مسئله محیط تصاویر Image Perimeters Solotion
خب قبل اینکه ادامه مطلب را بخوانید ابتدا متن سوال را مطالعه فرماید و سعی کنید که خودتان حل کنید .

ادامه مطلب