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

نوشته‌ها با موضوع الگوریتم

تعریف الگوریتم آنلاین در ویکی‌پدیا به این صورت است: «در علوم رایانه الگوریتم بَرخط به الگوریتمی اطلاق می‌شود که ورودی آن به صورت دنباله‌ای از تقاضاها در دسترس الگوریتم قرار می‌گیرد. به عبارت دیگر، ورودی این الگوریتم‌ها از ابتدا در اختیار الگوریتم نیست ...

ویراست سوم کتاب برنامه‌نویسی رقابتی با نام کامل Competitive Programming 3: The New Lower Bound of Programming Contests با تلاش Steven Halim و Felix Halim از مربیان تیم‌های برنامه‌نویسی ACM-ICPC سنگاپور تالیف و در سال ۲۰۱۳ منتشر شده است که امروزه به عنوان یکی از منابع مناسب برای آمادگی تیم‌های شرکت‌کننده در مسابقات برنامه‌نویسی الگوریتمی بویژه مسابقات برنامه‌نویسی ACM-ICPC توصیه می‌شود ...

کتاب Competitive Programmer's Handbook (راهنمای برنامه‌نویسان رقابتی) کتابچه‌ای است که در آن عموم مباحث مورد نیاز جهت شرکت در رقابت‌های برنامه‌نویسی همچون المپیاد کامپیوتر دانش‌آموزی یا مسابقات برنامه‌نویسی دانشجویی به صورت مختصر و مفید یک جا جمع شده است ...

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

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

مستندات دوره «Introduction to Programming Contests» دانشگاه استنفورد با تدریس Jaehyun Park (مربی تیم‌های ACM-ICPC این دانشگاه) شامل اسلایدها، سوالات برگزیده برای تمرین در موضوعات مختلف ریاضیات، ساختمان داده‌ها و الگوریتم‌ها به همراه نکات برنامه‌نویسی از پیوند زیر قابل مشاهده و دریافت هستند: CS 97SI: Introduction to Programming Contests ...

کتاب Programming Challenges: The Programming Contest Training Manual اثر Steven Skiena و Miguel Revilla یکی از کتاب‌های مناسب تمرین گام به گام برای شرکت در مسابقات برنامه‌نویسی‌ای همچون المپیاد کامپیوتر و ACM-ICPC است ...

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

کتاب Introduction to Algorithms: A Creative Approach را می‌توان مکملی بر استفاده از کتاب Introduction to Algorithms (مشهور به کتاب CLRS) دانست. در این کتاب علاوه بر معرفی تکنیک‌های مختلف طراحی الگوریتم‌ها و روش‌های حل برخی مسائل الگوریتمی، روش‌های تحلیل و حل آنها با جزئیات بیشتر و به صورت گام به گام بررسی شده است ...

الگوریتم جستجوی اول عمق (Depth First Search - DFS) یا نام‌های دیگری همچون جستجو در عمق، پیمایش اول عمق، پیمایش عمق اول الگوریتمی مشابه الگوریتم جستجوی اول سطح (BFS) برای پیمایش گراف است. این دو الگوریتم خواص و کاربردهای مشترک بسیاری دارند و تفاوت اصلی در این است که در هر تکرار الگوریتم DFS تنها یکی از گره‌های مجاور گره پردازش شده برای مرحله بعد انتخاب می‌شود ...

کتاب Introduction to Algorithms (مشهور به کتاب CLRS) از انتشارات MIT اثر Thomas H. Cormen ، Charles E. Leiserson ، Ronald L. Rivest و Clifford Stein کتاب جامع مباحث الگوریتم‌ها و ساختمان داده‌ها است که منبع درسی بسیاری از دانشگاه‌های معتبر بوده و تا کنون بیش از سی هزار مقاله و کتاب با ارجاع به آن نگارش یافته است ...

الگوریتم فلوید-وارشال (Floyd-Warshall) یک الگوریتم مبتنی بر روش برنامه‌نویسی پویا برای محاسبه کوتاهترین مسیر بین هر دو جفت گره گراف‌های وزن‌دار است. دو الگوریتم رایج دایکسترا و بلمن-فورد روش‌های محاسبه کوتاهترین مسیر از مبدأ ثابت هستند که در صورت تکرار آنها به ازای هر گره عملکردی همانند الگوریتم فلوید-وارشال دارند ...

الگوریتم پیمایش اول سطح یا جستجوی اول سطح (Breadth First Search - BFS) از جمله الگوریتم‌های مشهور پیمایش و جستجوی گراف است که در حل مسائل الگوریتمی و هوش مصنوعی کاربرد دارد. این الگوریتم برای پیمایش و جستجوی گراف از یک صف برای نگهداری ترتیب جستجو استفاده می‌کند ...

الگوریتم دایکسترا (دیکسترا، دایجسترا - Dijkstra) یک راهکار حریصانه برای یافتن کوتاهترین مسیر از مقصد ثابت (تک منبع) به سایر گره‌های گراف وزن‌دار است. این گراف می‌تواند معرف مسیرهای یک شهر و تقاطع‌های آن باشد که انبار شرکت در یک گره آن قرار داشته و هدف یافتن کوتاهترین مسیر به هر محل دیگر از این انبار است ...

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

دنباله اعداد کاتالان (Catalan Numbers) یکی از دنباله‌های عددی مشهور ریاضیات است که برای عدد نامنفی n به صورت $C_n$ نمایش داده می‌شود. $C_n:\qquad 1,\;1,\;2,\;5,\;14,\;42,\;132,\;429,\;1430,\;4862,\;16796,\;\cdots$ این دنباله کاربردهای بسیاری در مسائل شمارشی دارد ...

مسئله ضرب زنجیره‌ای ماتریس‌ها و پرانتزبندی بهینه آن یکی از مثال‌های مشهور کاربرد برنامه‌نویسی پویا در حل مسائل بهینه‌سازی است. فرض کنید قصد داریم حاصلضرب عبارت ماتریسی $ A_{3 \times 7} \times B_{7 \times 8 } \times C_{8 \times 4} $ را محاسبه کنیم ...

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

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

مرتب‌سازی هرمی (Heap Sort) یکی از روش‌های مشهور مرتب‌سازی داده‌ها است که بر اساس خصوصیات درخت heap (هیپ، هرم یا کپه) و عملکرد آن پیاده‌سازی شده است. بر اساس تعریف درخت heap، در یک max-heap (یا min-heap) بزرگترین (یا کوچکترین) مقدار بین داده‌ها همواره در ریشه درخت قرار دارد ...

کتاب Programming Challenges: The Programming Contest Training Manual از انتشارات معتبر Springer کتاب مفیدی برای آمادگی شرکت در مسابقات برنامه‌نویسی است که نویسندگان آن به صورت گام به گام، خلاصه و مفید، به مفاهیم و نکات مهم برنامه‌نویسی، ساختمان داده‌ها، محاسبات ریاضی و طراحی الگوریتم‌ها اشاره داشته و با طرح مسائل متفاوت از هر موضوع، خواننده را به چالش حل مسئله کشیده‌اند ...

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

در علم کامپیوتر و ساختمان‌ داده‌های برنامه‌نویسی منظور از درخت دودویی درختی است که از یک گره به نام ریشه و حداکثر دو زیردرخت برای این گره تشکیل شده است که هر کدام از این دو زیردرخت خودشان یک درخت دودویی هستند ...

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

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

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

منظور از ریشه‌ها یک تابع مقادیری برای متغیرهای ورودی آن هستند که به ازای آنها خروجی تابع صفر شود. به عنوان مثال خروجی تابع $f(x)=2x-4$ به ازای $x=2$ صفر یا مقدار $2$ ریشه معادله $2x-4=0$ است. به همین ترتیب در مورد معادلات درجه دوم نیز می‌دانیم چطور می‌توانیم به ریشه یا ریشه‌ها در صورت موجود بودن دست پیدا کنیم ...

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

کتاب مقدمه‌ای بر مسابقات برنامه‌نویسی (با عنوان انگلیسی An Introduction to Programming Contests) کتابی به زبان فارسی مناسب برای علاقه‌مندان به شرکت در مسابقات برنامه‌نویسی است که توسط احمد یوسفان، محسن بیگلری، فائزه میرزایی و امین بابادی، از شرکت‌کنندگان در مسابقات برنامه‌نویسی ACM-ICPC، نوشته شده است ...

یکی از روش‌های مرتب‌سازی، روش مرتب‌سازی حبابی (Bubble Sort) است که به آن روش تعویض استاندارد (Standard Exchange) نیز می‌گویند. این روش شامل چند مرحله است که در هر مرحله یک عنصر از لیست به طور قطع در محل مناسب خود قرار می‌گیرد ...

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

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