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

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

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

الگوریتم‌های تقسیم و غلبه

»

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

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

تعریف: دنباله‌ی اعداد فیبوناچی روی اعداد حسابی به صورت زیر تعریف می‌شود:

ادامه ...

روش مرتب‌سازی ادغامی (Merge Sort) یک روش مرتب‌سازی مبتنی بر مقایسه‌ی عناصر با استفاده از روش تقسیم و غلبه است. این روش از مراحل بازگشتی زیر تشکیل یافته است:

1- آرایه را به دو زیرآرایه با اندازه‌ی تقریبا یکسان تقسیم کن.

2- دو زیرآرایه را به روش مرتب‌سازی ادغامی مرتب کن.

3- دو زیرآرایه‌ی مرتب‌شده را ادغام کن.

ادامه ...

روش مرتب‌سازی سریع (Quick Sort) یکی از الگوریتم‌های مشهور مرتب‌سازی داده‌ها است. این الگوریتم طی مراحل بازگشتی زیر یک روش تقسیم و غلبه برای مرتب کردن داده‌ها ارائه می‌نماید:

1- انتخاب عنصر محوری: یکی از عناصر آرایه به عنوان عنصر محوری (pivot) - به عنوان مثال عنصر اول - انتخاب می‌شود.

2- تقسیم آرایه: چینش عناصر آرایه به قسمی تغییر داده می‌شود که تمامی عناصر کوچکتر یا مساوی محور در سمت چپ آن و تمامی عناصر بزرگتر در سمت راست آن قرار بگیرند. این دو قسمت زیر آرایه‌های چپ و راست نامیده می‌شوند.

ادامه ...

دنباله‌ی اعداد کاتالان (Catalan Numbers) یکی از دنباله‌های عددی مشهور ریاضیات است که برای عدد نامنفی n به صورت $C_n$ نمایش داده می‌شود.

  

$C_n:\qquad 1,\;1,\;2,\;5,\;14,\;42,\;132,\;429,\;1430,\;4862,\;16796,\;\cdots$

  

این دنباله کاربردهای بسیاری در مسائل شمارشی دارد. از جمله:

1- تعداد درخت‌های دودویی با n رأس داخلی برابر $C_n$ است:

ادامه ...

تعریف ترکیب (Combination)

تعداد حالت‌های انتخاب r (عدد صحیح و نامنفی) شیء از n (عدد صحیح و بزرگتر یا مساوی r) شیء را که ترتیب انتخاب اهمیت نداشته باشد، انتخاب r از n یا ترکیب r روی n گویند و به یکی از صورت‌های زیر نمایش می‌دهند:

  

\[C(n,r) = C_r^n= \begin{pmatrix} n \\ r \end{pmatrix} \]

این عدد به ضریب دوجمله‌ای نیز مشهور است که یکی از محل‌های استفاده‌ی آن است.

ادامه ...

دترمینان ماتریس مربعی - که به صورت $ \vert A \vert $ یا $ det( A ) $ نمایش داده می‌شود - یکی از مفاهیم مشهور جبر خطی است که کاربردهای بسیاری در علوم مختلف دارد. امکان محاسبه‌ی سریع دترمینان یک ماتریس با ابعاد بزرگ بحث مهمی است که در ادامه سه روش محاسباتی رایج و پيچيدگي زمانی آنها مرور خواهند شد.

طبق تعریف دترمینان اگر اندازه‌ی ابعاد ماتریس مربعی یک باشد ($n = 1$)، دترمینان همان مقدار تک‌عضو آن است. یعنی:

  

ادامه ...

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

مسئله‌ی برج هانوی (Tower of Hanoi) یکی از مسائل تاریخی مشهور است که در مباحث طراحی الگوریتم نیز به آن پرداخته می‌شود.

به شکل زیر توجه کنید:

  

برج هانوی

ادامه ...

یکی از مسائل جالب طراحی الگوریتم مسئله‌ی کاشیکاری یا فرش کردن زمین با موزاییک‌ است.

فرض کنید قطعه زمین مربعی شکل با ابعادی از توان عدد دو داریم. مثلا با ابعاد 16 متر:

  

مسئله‌ی کاشیکاری

  

هدف فرش کردن این قطعه زمین با استفاده از موزاییک‌هایی با شکل‌های زیر است:

  

ادامه ...

درخت دودویی (Binary Tree)

درختی است که هر گره آن دارای حداکثر دو گره فرزند است که به آنها فرزند راست و چپ گره گفته می‌شود. به همین ترتیب زیردرختی که فرزند راست در رأس آن قرار دارد زیردرخت راست و زیردرختی که فرزند چپ در رأس آن قرار دارد زیردرخت چپ گره نامیده می‌شوند.

  

درخت دودویی

  

درخت جستجوی دودویی (Binary Search Tree - BST)

درختی دودویی است که برای هر گره آن شروط زیر برقرار هستند:

ادامه ...

همه‌ی ما با تعریف ضرب ماتریس‌های مربعی آشنایی داریم. حاصلضرب ماتریس‌های مربعی A و B به صورت زیر تعریف می‌شود:

  

\[ A=(a_{ij})_{n \times n} = \qquad , \qquad B=(b_{ij})_{n \times n} \] \[ C = A \times B = (c_{ij})_{n \times n} \qquad ; \qquad c_{ij}= \sum_{k=1}^{n} a_{ik} \; b{kj} \]

  

به عنوان مثال در حالت $n = 2$ داریم:

  

\[ \begin{pmatrix} a_{11} & a_{12}\\ a_{21} & a_{22} \end{pmatrix} \times \begin{pmatrix} b_{11} & b_{12}\\ b_{21} & b_{22} \end{pmatrix} = \begin{pmatrix} a_{11}b_{11}+a_{12}b_{21} & a_{11}b_{12}+a_{12}b_{22}\\ a_{21}b_{11}+a_{22}b_{21} & a_{21}b_{12}+a_{22}b_{22} \end{pmatrix} \]

ادامه ...

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

   

 

پیوند کوتاه:
برچسب‌ها
#مسئله‌های برنامه‌نویسی #نمونه سوال فارسی مسابقه‌ی ACM #کتابخانه قالب استاندارد ++C #سوالات مسابقات برنامه‌نویسی بیان #حل مسئله‌‌ی الگوریتمی #تمرین المپیاد کامپیوتر #صف #درخت‌ها #سوالات UVa Online Judge #الگوریتم‌های بازگشتی #مسأله‌های برنامه‌نویسی #منبع آموزشی #تمرین مسابقه‌ی برنامه‌نویسی ای‌سی‌ام #حل سوالات مسابقات برنامه‌نویسی #الگوریتم‌های تقسیم و غلبه #الگوریتم‌های مسیریابی #نمونه سوال مسابقه ACM #سوالات چالشی برنامه‌نویسی #آمادگی المپیاد کامپیوتر #الگوریتم‌های گراف #ویدئوی آموزشی #کتاب الکترونیکی #آموزش طراحی الگوریتم #ترجمه‌ی فارسی سوالات ACM #درخت پوشا #الگوریتم #جستجوی اول عمق #تمرین طراحی الگوریتم #پیمایش گراف #نمونه سوال فارسی مسابقات ACM #محاسبات ریاضی #برنامه‌نویسی ++C #الگوریتم دایکسترا #ترجمه‌ی فارسی سوالات UVa Online Judge #آموزش الگوریتم #آموزش برنامه‌نویسی ++C #ترجمه فارسی سوالات کتاب Programming Challenges #معرفی وب‌سایت #الگوریتم فلوید-وارشال #دانلود کتاب #مسابقه برنامه نویسی #آموزش ساختمان داده‌ها #حل سوالات ACM-ICPC #حل سوالات UVa Online Judge #کتاب الگوریتم #سوالات مسابقات ACM-ICPC #ترجمه‌ی فارسی سوالات برنامه‌نویسی #حل سوالات Timus Online Judge #جستجوی اول سطح #کتاب مسابقات برنامه‌نویسی #وبلاگ #نکات برنامه‌نویسی #نمونه سوالات مسابقه برنامه‌نویسی #برنامه‌نویسی #الگوریتم‌های عقبگرد #تکنیک‌های طراحی الگوریتم #آمادگی مسابقه برنامه‌نویسی #الگوریتم‌های برنامه‌نویسی پویا #آمادگی مسابقه ACM #مسئله‌ی کوله‌پشتی #نمونه سوال فارسی مسابقات برنامه‌نویسی #مسابقات برنامه‌نویسی #گراف #مسابقات برنامه‌نویسی ACM #سوالات برنامه‌نویسی #ماتریس #الگوریتم‌های کوتاهترین مسیر #الگوریتم‌های حریصانه #تمرین مسابقه برنامه‌نویسی #مسابقه برنامه‌نویسی #مسئله‌های الگوریتمی #ساختمان داده #مسأله‌های الگوریتمی #الگوریتم‌های مرتب‌سازی #Python