الگوریتمستان

برنامه‌نویسی، طراحی الگوریتم و حل مسئله‌های الگوریتمی

 
در صورت ناخوانا بودن نوشته‌ها، از مرورگر دیگری استفاده کنید.
نوشته‌ها با برچسب تکنیک‌های طراحی الگوریتم نوشته‌ها با برچسب تکنیک‌های طراحی الگوریتم - الگوریتمستان الگوریتمستان الگوریتمستان
نوشته‌ها با برچسب «

تکنیک‌های طراحی الگوریتم

»

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

در روش حریصانه رسیدن به هدف در هر گام مستقل از گام قبلی و بعدی است. یعنی در هر مرحله برای رسیدن به هدف نهایی، مستقل از این که در مراحل قبلی چه انتخاب‌هایی صورت گرفته و انتخاب فعلی ممکن است چه انتخاب‌هایی در پی داشته باشد، انتخابی که در ظاهر بهترین انتخاب ممکن است صورت می‌پذیرد. به همین دلیل است که به این روش، روش حریصانه گفته می‌شود. زمانی که یک دزد عجول و حریص وارد خانه‌ای می‌شود، در مسیر حرکت خود هر وسیله و کالای با ارزشی را داخل کیسه می‌اندازد. وی در این حالت چندان توجهی نمی‌کند که چه اشیائی را قبلا برداشته و ممکن است در آینده چه اشیاء گرانبهاتری به دست آورد. او در هر گام تنها از بین اشیاء دم دست خود با ارزش‌ترین آن را انتخاب کرده و به وسایل قبلی اضافه می‌کند.

ادامه ...

یکی از روش‌های پرکاربرد و مشهور طراحی الگوریتم روش برنامه‌نویسی پویا (یا برنامه‌ریزی پویا، برنامه‌سازی پویا - Dynamic Programming) است. این روش همچون روش تقسیم و حل (Divide and Conquer) بر پایه‌ی تقسیم مسئله بر زیرمسئله‌ها کار می‌کند. اما تفاوت‌های چشم‌گیری با آن دارد.

زمانی که یک مسئله به دو یا چند زیرمسئله تقسیم می‌شود، دو حالت ممکن است پیش بیاید:

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

ادامه ...

یکی از روش‌های پرکاربرد و محبوب برای طراحی الگوریتم‌ها روش Divide and Conquer است که در زبان فارسی به صورت تقسیم و حل یا تقسیم و غلبه ترجمه شده است.

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

برای آشنایی بیشتر، چند الگوریتم که با روش حل و تقسیم پیاده‌سازی شده‌اند معرفی می‌شوند.

ادامه ...

الگوریتمستان در تلگرام

   

 

پیوند کوتاه:
»  کتاب Competetive Programming
معرفی کتاب Competitive Programming برای علاقه‌مندان به شرکت در مسابقات برنامه‌نویسی و المپیاد کامپیوتر با قابلیت دانلود نسخه‌ی الکترونیکی
»  دوره‌ی طراحی و تحلیل الگوریتم دانشگاه استنفورد
ویدئوهای آموزشی دوره‌ی Algorithms: Design and Analysis دانشگاه استنفورد با زیرنویس انگلیسی
»  کتاب طراحی الگوریتم با رویکردی خلاقانه
معرفی کتاب Introduction to Algorithms: A Creative Approach  با قابلیت دانلود نسخه‌ی الکترونیکی
»  کتاب مقدمه‌ای بر الگوریتم‌ها
معرفی کتاب Introduction to Algorithms (ویراست سوم) به عنوان مرجع مباحث طراحی الگوریتم‌ها و ساختمان داده‌ها با قابلیت دانلود
»  کتاب چالش‌های برنامه‌نویسی
معرفی کتاب Programming Challenges برای علاقه‌مندان حل سوالات الگوریتمی و شرکت‌کنندگان مسابقات برنامه‌نویسی با قابلیت دانلود کتاب، فایل‌های صوتی، تصویری و اسلایدهای کلاس درس نویسنده
»  کتاب هنر مسابقات برنامه‌نویسی
معرفی کتاب Art of Programming Contest برای علاقه‌مندان حل سوالات الگوریتمی و شرکت‌کنندگان مسابقات برنامه‌نویسی با قابلیت دانلود نسخه‌ی الکترونیکی
برچسب‌ها
#معرفی وب‌سایت #تمرین طراحی الگوریتم #حل سوالات Timus Online Judge #الگوریتم دایکسترا #ویدئوی آموزشی #الگوریتم #کتابخانه قالب استاندارد ++C #سوالات مسابقات ACM-ICPC #الگوریتم‌های مسیریابی #نمونه سوال فارسی مسابقات ACM #سوالات UVa Online Judge #تمرین مسابقه‌ی برنامه‌نویسی ای‌سی‌ام #آموزش برنامه‌نویسی ++C #منبع آموزشی #سوالات برنامه‌نویسی #صف #ترجمه فارسی سوالات کتاب Programming Challenges #الگوریتم‌های برنامه‌نویسی پویا #درخت‌ها #مسئله‌های برنامه‌نویسی #ترجمه‌ی فارسی سوالات ACM #الگوریتم‌های بازگشتی #نمونه سوال فارسی مسابقات برنامه‌نویسی #الگوریتم‌های عقبگرد #کتاب الکترونیکی #گراف #نمونه سوال مسابقه ACM #آموزش ساختمان داده‌ها #مسابقه برنامه نویسی #مسأله‌های الگوریتمی #مسابقات برنامه‌نویسی ACM #الگوریتم‌های مرتب‌سازی #وبلاگ #نمونه سوالات مسابقه برنامه‌نویسی #الگوریتم فلوید-وارشال #ترجمه‌ی فارسی سوالات UVa Online Judge #کتاب الگوریتم #ترجمه‌ی فارسی سوالات برنامه‌نویسی #مسئله‌ی کوله‌پشتی #برنامه‌نویسی #نمونه سوال فارسی مسابقه‌ی ACM #دانلود کتاب #سوالات مسابقات برنامه‌نویسی بیان #سوالات چالشی برنامه‌نویسی #مسابقه برنامه‌نویسی #محاسبات ریاضی #تکنیک‌های طراحی الگوریتم #ماتریس #حل سوالات ACM-ICPC #نکات برنامه‌نویسی #مسأله‌های برنامه‌نویسی #آمادگی مسابقه ACM #پیمایش گراف #الگوریتم‌های کوتاهترین مسیر #آمادگی المپیاد کامپیوتر #آموزش الگوریتم #کتاب مسابقات برنامه‌نویسی #الگوریتم‌های حریصانه #آمادگی مسابقه برنامه‌نویسی #حل مسئله‌‌ی الگوریتمی #الگوریتم‌های تقسیم و غلبه #تمرین مسابقه برنامه‌نویسی #درخت پوشا #حل سوالات مسابقات برنامه‌نویسی #جستجوی اول عمق #مسابقات برنامه‌نویسی #الگوریتم‌های گراف #جستجوی اول سطح #مسئله‌های الگوریتمی #برنامه‌نویسی ++C #تمرین المپیاد کامپیوتر #ساختمان داده #حل سوالات UVa Online Judge #آموزش طراحی الگوریتم