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


۴۷۲۰+
کدآموز
۱۲۰+
تمرین عملی
۸۵+
درسنامه آموزشی
به همراه گواهی معتبر
۱۲۰ روز مهلت گذراندن دوره
تجربهی طراحی و بهینهسازی الگوریتمها با رویکردی خلاقانه و مسئلهمحور
بهترین نقطه آغاز
ورود به مسابقات المپیاد و ICPC
پایهای محکم
برای ورود به حوزهٔ علوم کامپیوتر
۸۰٪ مصاحبههای
شرکت گوگل بر پایه الگوریتم
معرفی
مخاطبین
پیشنیازها
سرفصلها
اساتید
0 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1
الگوریتمها پایههای یک برنامه کامپیوتری هستند. بعد از یادگرفتن حداقل یک زبان برنامه نویسی باید سعی کنیم برنامههایی را بنویسم که در سریعترین زمان ممکن و با مصرف کردن کمترین مقدار حافظه خروجی مطلوب را تولید کند و باعث افزایش بازدهی سیستم شود. شما در این دوره توانایی استفاده از ساختمانهای دادهی ساده و الگوریتمهای پیشرفتهتر را کسب خواهید کرد.
این دوره مناسب شما است اگر...
• مشتاقید به بازار پردرآمد برنامهنویسی و حوزهی نرمافزار وارد شوید.
• برای پروژههای دانشگاهی یا کاری خود نیاز به یادگیری الگوریتم و ساختمان دادهها دارید.
• معتقدید یادگیری برنامهنویسی در دنیای امروز ضروریست.
• میخواهید الگوریتم پیشرفته و کار با ساختمان دادهها را برای همیشه به شکل اصولی بیاموزید.
این دوره مناسب شما نیست اگر...
• هنوز فکر میکنید که شرکتها برای استخدام به مدرک دانشگاهی شما توجه میکنند.
• تجربهی عملی چندین هزار خط کدنویسی برایتان ارزشی ندارد.
• حاضر نیستید در هفته ۶ ساعت برای یادگیری، پیشرفت و رشد خودتان زمان بگذارید.
• میخواهید الگوریتم پیشرفته و ساختمان دادهها را به طور سطحی و گذرا بیاموزید.
پیشنیازها
لازم است...
علاقه و پشتکار داشته باشید.
مبانی برنامهنویسی را بشناسید.
لازم نیست...
در رشتهی کامپیوتر تحصیل کرده باشید.
درسنامه
تمرین
اهداف فصل
درسنامه
خصوصیات الگوریتم
درسنامه
الگوریتم چیست
درسنامه
مراحل حل مسئله
درسنامه
مقایسه الگوریتمها
درسنامه
زمان اجرای برنامه
درسنامه
شمارش عملیاتها
درسنامه
جستوجو در دنباله ۱
۱۰۰ امتیاز
تمرین
جستوجو در دنباله ۲
۱۰۰ امتیاز
تمرین
تبدیل به حسابی ۱
۱۰۰ امتیاز
تمرین
میانه صحیح
۱۰۰ امتیاز
تمرین
تبدیل به حسابی ۲
۱۰۰ امتیاز
تمرین
اهداف فصل
درسنامه
عدم اهمیت ضریبها
درسنامه
تعریفِ ابتداییِ اردر
درسنامه
چند مثال از اردر
درسنامه
مقایسه اردرها
درسنامه
بزرگترین زیربازه ۱
۱۰۰ امتیاز
تمرین
بزرگترین زیربازه ۲
۱۰۰ امتیاز
تمرین
نیمه مرتب
۱۰۰ امتیاز
تمرین
شمارش مثلثها ۱
۱۰۰ امتیاز
تمرین
شمارش مثلثها ۲
۱۰۰ امتیاز
تمرین
شمارش مثلثها ۳
۱۵۰ امتیاز
تمرین
مرتبسازی و تحلیل زمانی
درسنامه
مرتبسازی حبابی
درسنامه
مرتبسازی حبابی
۱۰۰ امتیاز
تمرین
اهداف فصل
درسنامه
استقرای ریاضی
درسنامه
استقرای قوی
درسنامه
مرتبسازی انتخابی
درسنامه
مرتبسازی انتخابی
۱۰۰ امتیاز
تمرین
مرتبسازی درجی
درسنامه
مرتبسازی درجی
۱۰۰ امتیاز
تمرین
بزرگترین زیربازه ۳
۱۰۰ امتیاز
تمرین
الگوریتم هورنر
۱۰۰ امتیاز
تمرین
مجموع ارقام
۱۰۰ امتیاز
تمرین
اهداف فصل
درسنامه
آشنایی اولیه
درسنامه
چند مثال ساده
درسنامه
پشته فراخوانی
درسنامه
روشهای تحلیل توابع بازگشتی
درسنامه
مثالهای تحلیل توابع بازگشتی
درسنامه
دنباله بازگشتی
۱۰۰ امتیاز
تمرین
فرکتال
درسنامه
ب.م.م
۱۰۰ امتیاز
تمرین
برج هانوی
۱۰۰ امتیاز
تمرین
کد گرِی
۱۰۰ امتیاز
تمرین
𝑛تایی مرتب
۱۰۰ امتیاز
تمرین
تناظر زیر مجموعهها با اعداد دودویی
درسنامه
بخشبندی
۱۰۰ امتیاز
تمرین
اهداف فصل
درسنامه
آشنایی اولیه
درسنامه
خریدن کتاب
۱۰۰ امتیاز
تمرین
زندگی کارمندی
۱۰۰ امتیاز
تمرین
پمپ بنزین
۱۰۰ امتیاز
تمرین
کافکیک
۱۰۰ امتیاز
تمرین
انرژی خور
۱۰۰ امتیاز
تمرین
تخته
۱۰۰ امتیاز
تمرین
بیشترین تعداد بازه
۱۰۰ امتیاز
تمرین
اشتباهات رایج
درسنامه
آبمیوه فروشی حریصانه
۱۰۰ امتیاز
تمرین
جاسوسی
۱۰۰ امتیاز
تمرین
اهداف فصل
درسنامه
استارت-آپ باکلاس
۱۰۰ امتیاز
تمرین
فرکتال
۱۰۰ امتیاز
تمرین
پلهنوردی
۱۰۰ امتیاز
تمرین
علسوپا
۱۰۰ امتیاز
تمرین
پالیندرومینیا
۱۰۰ امتیاز
تمرین
ضرب متناظر دو دنباله
۱۰۰ امتیاز
تمرین
بستههای شکر
۱۰۰ امتیاز
تمرین
تعمیر پشتبام
۱۰۰ امتیاز
تمرین
شرکت پالایش و پخش نخود در برره
۱۰۰ امتیاز
تمرین
مساوات
۱۰۰ امتیاز
تمرین
اهداف فصل
درسنامه
آشنایی اولیه
درسنامه
دومینوار
۱۰۰ امتیاز
تمرین
بزرگترین زیربازه
۱۰۰ امتیاز
تمرین
آجرچینی
۱۰۰ امتیاز
تمرین
بزرگترین زیر جدول
۱۰۰ امتیاز
تمرین
انتخاب
۱۰۰ امتیاز
تمرین
بیشینه مسیر جدول
۱۰۰ امتیاز
تمرین
اشتباهات رایج
درسنامه
چالش مسیریابی
۱۰۰ امتیاز
تمرین
مسئلهی کوله پشتی
درسنامه
یا همه یا هیچ یا یکی
۱۰۰ امتیاز
تمرین
بهینهسازی حافظه کوله پشتی
درسنامه
بزرگترین زیردنباله مشترک
۱۰۰ امتیاز
تمرین
ضرب ماتریس
۱۰۰ امتیاز
تمرین
بزرگترین زیردنباله اکیدا صعودی
۱۰۰ امتیاز
تمرین
بریم توچال!
۱۰۰ امتیاز
تمرین
اهداف فصل
درسنامه
آشنایی اولیه
درسنامه
مسائل پسگرد
درسنامه
تعداد جایگشت
۱۰۰ امتیاز
تمرین
دنباله پسگردنی
۱۰۰ امتیاز
تمرین
سودوکو
۱۰۰ امتیاز
تمرین
𝑛 وزیر
۱۰۰ امتیاز
تمرین
یک اسب
۱۰۰ امتیاز
تمرین
اهداف فصل
درسنامه
آشنایی اولیه
درسنامه
ادغامات
۱۰۰ امتیاز
تمرین
محاسبهٔ توان
درسنامه
تابع تواندار
۱۰۰ امتیاز
تمرین
قلّه
درسنامه
جستجوی دودویی
درسنامه
بشمر!
۱۰۰ امتیاز
تمرین
نابهجایی
۱۰۰ امتیاز
تمرین
مرتبسازی سریع
درسنامه
pivot کجاست؟
۱۰۰ امتیاز
تمرین
دسته به دسته
۱۰۰ امتیاز
تمرین
اهداف فصل
درسنامه
مرد مالیاتچی و جاعل
۱۰۰ امتیاز
تمرین
تعداد ۱۱ بخش پذیرها (۲)
۱۰۰ امتیاز
تمرین
مثلثها
۱۰۰ امتیاز
تمرین
خواب پوپک
۱۰۰ امتیاز
تمرین
باقر حال نداره ولی پول داره
۱۰۰ امتیاز
تمرین
تکامل
۱۰۰ امتیاز
تمرین
انتقام از TA سختگیر
۱۰۰ امتیاز
تمرین
رژیم سخت
۱۰۰ امتیاز
تمرین
دنباله تورجپسند
۱۰۰ امتیاز
تمرین
سینما، سینما
۱۰۰ امتیاز
تمرین
بازرگانی سوکرات و پسران
۱۰۰ امتیاز
تمرین
شیر
۱۰۰ امتیاز
تمرین
متوازیالاضلاع ممنوع!
۱۰۰ امتیاز
تمرین
آجر چینی (۲)
۱۰۰ امتیاز
تمرین
بازار موبایل
۱۰۰ امتیاز
تمرین
منظرهای به یاد ماندنی
۱۰۰ امتیاز
تمرین
اهداف فصل
درسنامه
آشنایی اولیه
درسنامه
پشته
درسنامه
پرانتزگذاری معتبر
۱۰۰ امتیاز
تمرین
هیستوری
۱۰۰ امتیاز
تمرین
صف
درسنامه
الگوی من کیه؟
۱۰۰ امتیاز
تمرین
صف دوطرفه
درسنامه
آرایه پویا
درسنامه
لیست پیوندی
درسنامه
پیادهسازی ساختماندادههای قبلی با لیست پیوندی
درسنامه
ویرایشگر متن
۱۰۰ امتیاز
تمرین
درخت هرمی
درسنامه
کافه سالاد
۱۰۰ امتیاز
تمرین
میانهروی
۱۰۰ امتیاز
تمرین
درخت دودویی جستجو و ساختار مجموعهای
درسنامه
برنامهریزی فرودگاه
۱۰۰ امتیاز
تمرین
برش کیک
۱۰۰ امتیاز
تمرین
پول یا وجدان؟
۱۰۰ امتیاز
تمرین
اهداف فصل
درسنامه
آشنایی اولیه
درسنامه
مجموع جزئی
۱۰۰ امتیاز
تمرین
خواستار
۱۰۰ امتیاز
تمرین
مجموع جزئی در ماتریس
۱۰۰ امتیاز
تمرین
مربع
۱۰۰ امتیاز
تمرین
کادوی مشتی
۱۰۰ امتیاز
تمرین
درخواست مینیمم عدد در بازه
درسنامه
کمینه در بازه
۱۰۰ امتیاز
تمرین
مرتبسازی درجی رشتهها
درسنامه
مجموع جزئی در آرایه متغَیّر
۱۰۰ امتیاز
تمرین
بیشینه در آرایه متغیّر
۱۰۰ امتیاز
تمرین
اهداف فصل
درسنامه
گراف
درسنامه
DFS
درسنامه
دیاِفاِسِ پیشگو
۱۰۰ امتیاز
تمرین
BFS
درسنامه
بیاِفاِسِ مسیریاب
۱۰۰ امتیاز
تمرین
پیدا کردن دور در گرافها
درسنامه
گرافهای دوبخشی
درسنامه
پیدا کردن کمر گراف
درسنامه
مسافرت
۱۰۰ امتیاز
تمرین
پادشاه
۱۰۰ امتیاز
تمرین
دوستیابی
۱۰۰ امتیاز
تمرین
جدول
۱۰۰ امتیاز
تمرین
قطـــر
۱۰۰ امتیاز
تمرین
اهداف فصل
درسنامه
وسیله کمک آموزشی
۱۰۰ امتیاز
تمرین
زینی
۱۰۰ امتیاز
تمرین
بتایپ
۱۰۰ امتیاز
تمرین
قطار کامیابی
۱۰۰ امتیاز
تمرین
هیچوقت مغرور نشو!
۱۰۰ امتیاز
تمرین
دنباله متوازن
۱۰۰ امتیاز
تمرین
مرتفع
۱۰۰ امتیاز
تمرین
گراف قرمز و آبی
۱۰۰ امتیاز
تمرین
ترور
۱۰۰ امتیاز
تمرین
میانترم هندسه
۱۰۰ امتیاز
تمرین
اسم فامیل
۱۰۰ امتیاز
تمرین
صفا
۱۰۰ امتیاز
تمرین
مساحت محصور
۱۰۰ امتیاز
تمرین
عدد روی تخته
۱۰۰ امتیاز
تمرین
دنباله
۱۰۰ امتیاز
تمرین
کمینه بیشینه اختلاف!
۱۰۰ امتیاز
تمرین
منابع خوب
درسنامه
نکاتی درباره باقیمانده و سرریز کردن (Overflow)
درسنامه
تحلیل الگوریتمها
درسنامه
پیادهسازی ساختماندادهها بخش اول
درسنامه
پیادهسازی ساختماندادهها بخش دوم
درسنامه
مرتبسازی در زبان ++C
درسنامه
استفاده از pair در ++C
درسنامه
ساختمانهای داده در ++C
درسنامه
کتابخانهها و توابع پرکاربرد ++C
درسنامه
روشهای دیگر خواندن ورودی در ++C
درسنامه
پرکابردهای پایتون بخش اول
درسنامه
پرکابردهای پایتون بخش دوم
درسنامه

الگوریتم پیشرفته و ساختماندادهها
۱۲۰+ تمرین عملی
۸۵+ درسنامه آموزشی
سوالات متداول
شما در هر زمانی که بخواهید میتوانید در دوره ثبتنام و دوره را آغاز کنید.
پیشنیاز این دوره، تسلط به مباحث مبانی برنامهنویسی است.
اگر هنوز به این مباحث مسلط نیستید، پیشنهاد میکنیم پیش از شروع این دوره، دورهٔ «مبانی برنامهنویسی و تفکر الگوریتمی» را در حداقل یک زبان ++C یا Python بگذرانید.
خیر؛ نیازی نیست!
اگر پیشنیاز دوره (تسلط به مبانی برنامهنویسی) را داشته باشید، میتوانید در این دوره شرکت کنید.
بله؛ شما میتوانید از درسنامههایی که بلد هستید سریع بگذرید، اما در نکات گفته شده در درسنامهها موارد بسیاری وجود دارد که میتواند دانش شما را تکمیل کند؛ پس پیشنهاد میکنیم که آنها را هم مطالعه کنید.
همچنین حتما میدانید که هرچقدر در برنامهنویسی تمرین کنیم، باز هم کافی نیست؛ پس پیشنهاد میکنیم که تمرینات مربوط به این مباحث را نیز حل کنید تا یادگیری کاملی داشته باشید.
محتوای دوره به صورت درسنامههای متنی و در بعضی قسمتها ویدیوهای آموزشی میباشد.
پس از درسنامهها، نوبت به تمرین و حل مسئله میرسد. تعدادی تمرین مطرح میشود که شما دستورات آنها را نوشته و ارسال میکنید. سامانه داوری خودکار Quera در مدت کوتاهی کد شما را تصحیح میکند و نمره میدهد.
در صورتی که نمرهٔ کامل نگرفتید نگران نباشید، میتوانید کد خود را تغییر دهید و دوباره ارسال کنید.
در طول این دوره تمرینهای متعددی وجود دارد تا شما با انجام آنها، مهارت خود را تقویت کنید.
در کنار این تمرینها، داوری آنلاین نیز وجود دارد. یعنی کد ارسالی شما در همان لحظه توسط سیستم، داوری و امتیازدهی میشود تا اشکالاتتان را پیدا کرده و آنها را رفع کنید.
با هریک از زبانهای
شما بعد از رسیدن به فصل «الگوریتمهای استقرایی»، ۹۰ روز فرصت دارید تا دوره را به اتمام برسانید و بعد از اتمام دوره برای همیشه به تمام محتواهای دوره دسترسی خواهید داشت.
همچنین اگر تا انتهای زمانِ گفتهشده نتوانستید دوره را تمام کنید نگران نباشید، چون امکان تمدید دوره وجود دارد!
در انتهای دوره با مفاهیم پایه طراحی الگوریتم مثل «الگوریتمهای حریصانه»، «برنامهنویسی پویا»، «ساختماندادههای مقدماتی»، «الگوریتمهای گراف» و... آشنا شده و میتوانید طیف گستردهای از مسائل و چالشهای برنامه نویسی را حل کنید.
بشر در طول زندگی خود با مشکلات بسیاری مواجه میشود که ممکن است بسیاری از آنها بارها تکرار شوند. برای حل کردن مشکلاتی که چندین بار با آنها مواجه شدهایم، ثبت و دستهبندی راه حلهای مشخص کمک میکند که بتوانیم سریعتر و مطمئنتر با مسائل تکراری برخورد کنیم. ما به این راه حلهای تست شده و مطمئن، الگوریتم میگوییم. در این محتوا یاد میگیریم که الگوریتم چیست و در برنامه نویسی چه مفهومی دارد و جذابیت دوره آموزش الگوریتم پیشرفته چیست؟
ما اغلب برای حل مشکلات به دنبال سادهترین و سریعترین راهحلها هستیم. سالها است که علم با یافتن پاسخ سؤالات خود و استفاده از آنها در پیشامدهایی که الگوی تکراری دارند، اهداف خود را پیش میبرد و سریعتر از انتظار ما رازهای طبیعت را از دل آن بیرون میکشد. راهحلهایی که تست شده و مطمئن هستند و میتوانند سوالاتی با مفاهیم یکسان را حل کنند، الگوریتم نامیده میشوند.
اگر بخواهیم معنی الگوریتم را در زمینه علوم کامپیوتر بررسی کنیم، میتوان گفت الگوریتمها مجموعه فرایندهایی هستند که به کمک آنها میتوان بسیاری از مسائل برنامهنویسی را بهراحتی حل کرد. به عنوان مثال الگوریتم یک موتور جستجو را در نظر بگیرید. الگوریتم موتور جستجو گوگل بهطور ساده اینگونه است که عبارت تایپ شده شما را دریافت کرده، آن را در پایگاه دادههای خود جستجو میکند و سپس صفحات وب مربوطه را پیدا کرده و به شما نشان میدهد. این روند کلی از ایجاد سؤال تا رسیدن به پاسخ یک الگوریتم محسوب میشود. استفاده از الگوریتمها در کاهش هزینههای مالی و زمانی یک پروژه اهمیت زیادی دارد. الگوریتمها با انجام سلسله اقدامات مشخصی و در ازای گرفتن ورودی تعریف شده، نتیجهای مطابق انتظار به ما خواهند داد.
جالب است بدانید که ریشه کلمه الگوریتم از نام خوارزمی دانشمند ایرانی به دست آمده است. خوارزمی در قرن دوم هجری شمسی در دوره مامون عباسی زندگی میکرد. از آنجایی که زبان آن دوره عربی بود از این رو خوارزمی را به صورت الخوارزمی صدا میزدند.
روش دانشمند ایرانی؛ در عملیات جمع و تفریق، ضرب و تقسیم مورد توجه دانشمندان ریاضی اروپا قرار گرفت و خوارزمی در محاسبات چهار عمل اصلی و حل انواع مسائل ریاضی روش مرحله به مرحله و دقیقی ارائه داده بود و در نهایت به جواب منجر میشد. به همین خاطر از آن به بعد، هر روشی را که حل مسائل را به صورت مرحله به مرحله و دقیق و با جزئیات کافی بیان کند و در پایان به جواب برسد روش الگوریتمی نامیدند. کلمه الگوریتم از تلفظ لاتینی الخوارزمی به صورت Algorism یا الگوریتمی Algorithmic به دست آمده است.
تا به اینجا در این مقاله به صورت کامل به این پرسش پرداختیم که الگوریتم چیست، در این قسمت میخواهیم بگوییم الگوریتم چه کاربردی دارد؟ در زیر به برخی از کاربردهای الگوریتمها اشاره میکنیم:
تمامی الگوریتمها در هنگام طراحی باید معیارهای زیر را رعایت کنند تا بتوانند به جواب درستی برسند:
صرفا نوشتن توالی دستورالعملها به عنوان یک الگوریتم برای انجام یک کار خاص کافی نیست. داشتن ویژگیهای زیر در ارتباط با یک الگوریتم ضروری است:
کامپیوتر اساسا ریاضیات زیادی را انجام میدهد، به این معنی که مشکلات زیادی برای حل کردن وجود دارد. دقیقا به همین دلیل است که الگوریتمها قلب علم کامپیوتر را تشکیل میدهند. الگوریتم رایانه روشی محاسباتی است که مجموعهای از ورودی را میگیرد و با استفاده از برخی ریاضیات و منطق آن را به خروجی تبدیل میکند.
چندین الگوریتم در برنامه نویسی وجود دارد که عبارتند از:
یکی از جنبههای مهمی که باید در مورد الگوریتمهای برنامهنویسی بدانید این است که الگوریتمها در برنامهنویسی به هیچ عنوان محدود نیستند و راهحلهای مختلفی را برای خروجی بهتر ارائه میدهند. حوزه الگوریتم برنامهنویسی به قدری گسترده و عمیق شده است که میتواند در هر مورد و نظریه محاسباتی به ما کمک کند و راهحلهای بسیار کارآمدی را به ما ارائه دهد.
الگوریتمها با توجه به ساختار منطقی که دارند در 3 دسته جا میگیرند:
الگوریتمها دارای نقش مهمی در برنامهنویسی و حل مسئله هستند و از لحاظ کارایی و با توجه به نوع مسئله انواع مختلفی دارند که ما در این بخش به بررسی تعدادی از آنها میپردازیم.
الگوریتمهای بازگشتی حالت پایه یا به اصطلاح base case مسئله را حل کرده و سپس با استفاده از این جواب، به حل مسائل تودرتو میپردازند. درواقع مسئله به چند بخش کوچک شکسته میشود که با استفاده از پاسخ مرحله قبل، مسئله بعدی قابلحل است.
از الگوریتمهای پویا یا دینامیک میتوان برای محاسبه بخشی از برنامه و استفاده از پاسخ آن، در مسائل آینده استفاده کرد. یعنی از پاسخهای یک بخش، میتوانید برای حل مسائل دیگر نیز بهره برد.
الگوریتم عقبگرد به دنبال پیدا کردن سرنخهای امیدبخشی است تا بهینهترین جواب را پیدا کند. این شیوه برای حل مسائل درخت فضای آن مسئله را ایجاد کرده و تعیین میکند کدام گره امیدبخش است. الگوریتمهای عقبگرد از علامتهایی برای بیان اینکه یک راهحل کاندید به حل مسئله نمیانجامد استفاده میکنند.
مثلا در ساخت درخت فضای حالت یک سؤال، اگر شاخهای از درخت جواب بهینهای در پی نداشته باشد، علامتگذاری میشود تا در عمق زیاد بررسی نشود و به جای آن، شاخه امیدبخشتر بررسی میشود. البته شاخه اول بهطورکلی هرس نمیشود بلکه موقتا کنار گذاشته میشود تا در صورت پیدا نکردن بهینهترین جواب در شاخه دیگر، مجددا به آن بازگردیم.
الگوریتمهای تقسیم و حل ابتدا مسئله را با توجه به نوع آن، چند بخش کوچکتر تقسیم کرده و به حل آنها میپردازند. سپس از ترکیب پاسخ بخشهای کوچکتر، پاسخ کلی مسئله بهدست میآید. برخی از روشهای مرتبسازی مانند مرتبسازی ادغامی (Merge Sort) و مرتبسازی سریع (Quick Sort) نیز از این دسته الگوریتمها محسوب میشوند.
بهعنوان مثال مرتبسازی ادغامی ابتدا آرایهای از مقادیر ورودی را دو قسمت کرده و بهصورت بازگشتی، دوباره هر قسمت را دو قسمت میکند. این روند آنقدر ادامه پیدا میکند تا اعداد در دستههای کوچکتر صعودی یا نزولی مرتب شوند. سپس از ادغام زیر بخشهای کوچک، آرایه مرتبشدهی بخشهای بزرگتر به دست میآید.
الگوریتمهای حریصانه به دنبال جستجوی بهینهترین پاسخ ممکن هستند اما لزوما در هر مسئلهای، نمیتوانند بهینهترین پاسخ را پیدا کنند اما یکی از جوابهای بهینه را به شما معرفی خواهند کرد. البته برخی مسائل هم بهطورکلی پاسخ بهینه ندارند که به آنها مسائل NP complete میگویند. در شیوه حریصانه در هر مرحله عنصری که بر مبنای معیارها بهترین به نظر میرسد، بدون توجه به انتخابهایی که قبلا انجام شده یا در آینده انجام خواهد شد، انتخاب میشود.
مسئله خرد کردن سکهها یکی از مثالهای معروف در بهکارگیری الگوریتم حریصانه است. این مسئله میگوید فرض کنید که شما باید مبلغی مثلا 36 تومان را با سکههای 20 تومانی، 10 تومانی، 5 تومانی و 1 تومانی پرداخت کنید به طوری که کمترین تعداد سکه را بپردازید. کمترین تعدادی که بتوان با آن 36 تومان را پرداخت کرد پاسخی بهینه برای مسئله ما خواهد بود که در اینجا، برداشتن یک سکه از هر 4 مدل است.
الگوریتم جستجوی جامع یا بروت فورس تمامی راهحلهای احتمالی را بررسی میکند تا بتواند بهینهترین پاسخ را پیدا کند. در این الگوریتم بهینهترین پاسخ با ویژگی "ارضا کردن شرط مسئله" سنجیده میشود و به همین دلیل بیشتر برای مسائل کوچک کاربرد دارد. این الگوریتم در رمزگشایی نیز کاربرد زیادی دارد و عملکرد آن بهگونهای است که تمامی کلیدها را چک میکند تا به جواب برسد. دادهکاوی نیز زمینه دیگری برای استفاده از این نوع الگوریتمها است.