الگوریتمستان
برنامهنویسی، طراحی الگوریتم و حل مسئلههای الگوریتمی
ماتریس مربعی با ابعاد $N$ در $N$ و درایههایی از اعداد صحیح موجود است. منظور از زیرماتریس بیشینه، زیرماتریسی از ماتریس مفروض است که مجموع عناصر آن بزرگتر یا مساوی مجموع عناصر هر زیرماتریس دیگر آن است.
به عنوان مثال، برای ماتریس زیر:
\[ \begin{matrix} 0 & -2 & -7 & 0 \\ 9 & 2 & -6 & 2 \\ -4 & 1 & -4 & 1 \\ -1 & 8 & 0 & -2 \end{matrix} \]
زیرماتریس بیشینه به این ترتیب خواهد بود:
معمای هشت وزیر از جمله مسائل کلاسیک مباحث طراحی الگوریتم است که در حالت کلیتر با عنوان معمای n وزیر یا معمای چند وزیر مطرح میشود.
وزیر مهرهای از مهرههای بازی شطرنج است که میتواند در تمامی هشت جهت به هر تعداد خانه - تا زمانی که مهرهای مانع نباشد - حرکت کند. اگر در این مسیرها مهرهای از حریف قرار گرفته باشد، آن مهره در معرض خطر حمله توسط وزیر قرار دارد؛ یا به اصطلاح وزیر آن مهره را تهدید میکند.
یک چراغ راهنمایی در مسیر گردش از بزرگراه به یک مرکز فروش بزرگ تعبیه شده است. عملکرد این چراغ به گونهای است که در هر دقیقه حداکثر k خودرو امکان گردش از بزرگراه به سمت مسیر مرکز را دارند. در پایان هفته شهروندان بیشتری برای خرید به این مرکز مراجعه میکنند که باعث بالا رفتن حجم ترافیک میشود. مدیران مرکز سفارش نصب دوربین ویژهای در نزدیکی آن محل را دادهاند که امکان شمارش تعداد خودروهای وارد شده از سمت شهر به محل گردش به مرکز فروش را دارد.
عملکرد دوربین از n دقیقهی قبل آغاز شده است. شما باید با توجه به اطلاعات ارسال شده از طریق این دوربین، تعداد خودروهایی را که در حال حاضر پشت چراغ راهنمایی متوقف شدهاند محاسبه کنید.
تابع بازگشتی (F(n با تعریف زیر مفروض است:
\[ F(n)= \left\{\begin{matrix} n \% 10 & & & if \; (n\%10) > 0\\ 0 & & & if \; n = 0 \\ F(n/10) & & & Otherwise \end{matrix}\right. \]
تابع (S(p, q به این صورت تعریف شده است:
\[ S(p,q)=\sum_{i=p}^{q} F(i) \]
مقدار (S(p, q را به ازای مقادیر ورودی p و q محاسبه کنید.
یکی از تیمهای لیگ برتر فوتبال (جام خلیج فارس) امسال نتایج خیلی بدی گرفته است. هیئت مدیرهی باشگاه برای اخراج مربی تحت فشار هستند. اما این مربی از سوی طرفداران تیم به عنوان یک قهرمان محبوب حمایت میشود. به همین دلیل تصمیم میگیرند یک فرصت دیگر به مربی بدهند. سخنگوی باشگاه به رسانهها اعلام میکند که هیئت مدیرهی باشگاه تنها زمانی از مربی حمایت میکنند که بتواند در 5 بازی آینده 11 امتیاز برای تیمشان کسب کند. مربی میخواهد بداند چقدر احتمال دارد به این موفقیت دست پیدا کند و از شما کمک میخواهد.فرض کنید احتمال کسب برد، باخت و تساوی در مسابقههای بعدی از روی مسابقات انجام شده تا به حال به دست میآید. به عنوان مثال اگر این تیم از 10 بازی انجام دادهی قبلی 3 برد داشته باشد، احتمال برد در آینده 30% خواهد بود.
علاقهمندان به مباحث مختلف طراحی الگوریتم و همینطور شرکتکنندگان مسابقات برنامهنویسی به خوبی میدانند که یکی از مهمترین پارامترهای طراحی موفقیتآمیز یک الگوریتم، شیوهی صحیح فکر کردن روی حل مسئله است. حل انواع سوالات الگوریتمی به ما کمک میکند ذهن خودمان را برای حل مسائل پیچیدهتر آماده کنیم.
مسئلهی برج هانوی (Tower of Hanoi) یکی از مسائل تاریخی مشهور است که در مباحث طراحی الگوریتم نیز به آن پرداخته میشود.
به شکل زیر توجه کنید:
یکی از مسائل جالب طراحی الگوریتم مسئلهی کاشیکاری یا فرش کردن زمین با موزاییک است.
فرض کنید قطعه زمین مربعی شکل با ابعادی از توان عدد دو داریم. مثلا با ابعاد 16 متر:
هدف فرش کردن این قطعه زمین با استفاده از موزاییکهایی با شکلهای زیر است: