بستن پنجره
فرادرس - مجموعه آموزش‌های ویدئویی  مهندسی کامپیوتر - طراحی الگوریتم - ساختمان داده
بستن پنجره
وبگاه
این صفحه
اشتراک‌گذاری در LinkedIn     Cloob     اشتراک‌گذاری در Twitter
اشتراک‌گذاری در Facebook     ارسال با Telegram     Google Plus

کتاب طراحی الگوریتم با رویکردی خلاقانه

[برو به فهرست نوشته‌ها]
        معرفی کتاب Introduction to Algorithms: A Creative Approach

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

ادامه ...

الگوریتم جستجوی اول عمق (DFS)

[برو به فهرست نوشته‌ها]
        معرفی الگوریتم جستجوی اول عمق (DFS) برای پیمایش گراف و کاربردهای آن به همراه قطعه کد به زبان برنامه‌نویسی ++C

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

    الگوریتم DFS با فرض انتخاب گره مبدأ به عنوان گره جاری از مراحل زیر تشکیل یافته است:

    1- گره جاری را به پشته اضافه کن.

ادامه ...

کتاب مقدمه‌ای بر الگوریتم‌ها

[برو به فهرست نوشته‌ها]
        معرفی کتاب Introduction to Algorithms (ویراست سوم) به عنوان مرجع مباحث طراحی الگوریتم‌ها و ساختمان داده‌ها

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

ادامه ...

الگوریتم فلوید-وارشال

[برو به فهرست نوشته‌ها]
        آشنایی با الگوریتم فلوید-وارشال برای یافتن کوتاهترین مسیرهای گراف با قطعه کد نمونه به زبان برنامه‌نویسی ++C

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

ادامه ...

کتاب Concrete Mathematics

[برو به فهرست نوشته‌ها]
        معرفی کتاب Concrete Mathematics برای علاقه‌مندان حل سوالات الگوریتمی و شرکت‌کنندگان مسابقات برنامه‌نویسی

کتاب Concrete Mathematics: A Foundation for Computer Science نوشته‌ای با موضوع مفاهیم اولیه‌ی ریاضیات پیوسته (CONtinuous mathematics) و ریاضیات گسسته (disCRETE mathematics) به قلم رونالد گراهام، دونالد کنوت و اُرِن پاتاشنیک - از دانشمندان بزرگ علوم ریاضیات و کامپیوتر - است . در این کتاب از بیان متفاوتی نسبت به نوشتار عموم کتاب‌های آموزش ریاضی استفاده شده و مفاهیم پایه‌ای محاسباتی علم کامپیوتر به زبان ساده و گیرا توضیح داده شده است. این مفاهیم پیش‌نیاز حل بسیاری از مسائل کامپیوتری، ریاضی و محاسبات علمی هستند. به همین دلیل، مطالعه‌ی آن به علاقه‌مندان برنامه‌نویسی، بویژه شرکت‌کنندگان المپیادهای کامپیوتری و مسابقات برنامه‌نویسی توصیه می‌شود.

ادامه ...

الگوریتم جستجوی اول سطح (BFS)

[برو به فهرست نوشته‌ها]
        معرفی الگوریتم جستجوی اول سطح (BFS) برای پیمایش گراف و کاربردهای آن به همراه قطعه کد به زبان برنامه‌نویسی ++C

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

    الگوریتم BFS با وارد کردن گره مبدأ به صف پردازش شروع شده و تا خالی نشدن این صف مراحل زیر را تکرار می‌شود:

    1- عنصر جلوی صف را به عنوان گره جاری انتخاب و از صف حذف کن.

    2- گره جاری را پردازش کن.

    3- گره‌های مجاور گره جاری که پردازش نشده و در صف پردازش نیز قرار ندارند به این صف اضافه کن.

    منظور از پردازش، هر عملی روی گره است که پیمایش یا جستجو به آن نیت صورت گرفته است.

ادامه ...

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

[برو به فهرست نوشته‌ها]
        آشنایی با الگوریتم دایکسترا برای یافتن کوتاهترین مسیر تک‌مبدأ در گراف وزن‌دار بدون یال منفی با قطعه کد به زبان ++C

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

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

ادامه ...

کتاب چالش‌های برنامه‌نویسی

[برو به فهرست نوشته‌ها]
        معرفی کتاب Programming Challenges برای علاقه‌مندان حل سوالات الگوریتمی و شرکت‌کنندگان مسابقات برنامه‌نویسی یا معرفی پیوند دانلود فایل‌های صوتی، تصویری و اسلایدهای کلاس درس نویسنده

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

    در این کتاب برای هر موضوع مورد بحث تعدادی سوال از وب‌سایت UVA انتخاب و مطرح شده است. به این ترتیب خواننده علاوه بر آشنایی با مفاهیم مختلف، با نحوه‌ی طراحی سوال از آن موضوع نیز مواجه می‌شود. نویسندگان کتاب در مقدمه به این نکته اشاره داشته‌اند که در انتخاب سوال‌ها علاوه بر مرتبط بودن موضوع، جنبه‌ی سرگرمی و جذابیت نیز تا حد ممکن رعایت شده است: «گاهی موضوعات جذاب علم کامپیوتر و ریاضیات در قالب داستان‌های سرگرم کننده بیان شده است. این مسأله مطالعه‌ی موارد جذاب دیگری را پیش می‌آورد.»

ادامه ...

روش حریصانه

[برو به فهرست نوشته‌ها]
        آشنایی با روش حریصانه و کاربردهای آن مانند مسأله‌ی خرد کردن پول

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

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

ادامه ...

معمای هشت وزیر

[برو به فهرست نوشته‌ها]
        بررسی معمای هشت وزیر یا n وزیر و راهبرد عقبگرد برای حل مسأله

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

      

برای افرادی که با بازی شطرنج آشنایی ندارند

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

      

معمای هشت وزیر

ادامه ...