Algorithmic Thinking: A Problem-Based Introduction
کتاب Algorithmic Thinking (تفکر الگوریتمی)، نحوهی حل مسائل چالش برانگیز برنامه نویسی و طراحی الگوریتمها را به شما آموزش میدهد. دانیل زینگارو، استاد ارشد، مثالهای خود را از مسابقات برنامه نویسی در سطح جهانی مانند USACO و IOI گردآوری است. شما در این کتاب یاد خواهید گرفت که چگونه مسائل را طبقه بندی کنید، ساختمانهای داده را انتخاب کنید و الگوریتمهای مناسب را شناسایی کنید. شما همچنین یاد خواهید گرفت که چگونه ساختمان دادهی انتخابی شما، اعم از جدول هش، هرم یا درخت میتوانند بر زمان اجرا و افزایش سرعت الگوریتمهای شما تاثیر بگذارند. همچنین چگونگی اتخاذ استراتژیهای قدرتمند مانند بازگشت، برنامه نویسی پویا و جستجوی دو دویی برای حل مسائل چالش برانگیز را فرا خواهید.
شکستن خط به خط کد به شما یاد میدهد که چگونه از الگوریتمها و ساختمان دادهها استفاده کنید مانند:
- الگوریتم جستجوی سطح اول برای یافتن راه بهینه برای انجام یک بازی تخته ای یا یافتن بهترین راه برای ترجمهی یک کتاب
- الگوریتم دایکسترا برای تعیین اینکه چه تعداد موش میتوانند از هزارتو خارج شوند یا تعداد سریعترین مسیرها بین دو مکان
- ساختمان داده union-find برای پاسخ به سوالات درباره ارتباطات در یک شبکه اجتماعی یا تعیین اینکه چه کسانی دوست یا دشمن هستند
- ساختمان داده هرم (heap) برای تعیین مقدار پولی که در یک تبلیغ ارائه میشود
- ساختمان داده جدول هش برای تعیین اینکه آیا دانههای برف منحصر به فرد هستند یا شناسایی کلمات ترکیبی در فرهنگ لغت
توجه: هر مسئله در این کتاب در وب سایت programming-judge موجود است. آدرس سایت و شناسه مسئله را در توضیحات پیدا خواهید کرد. چه چیزی بهتر از یک بررسی صحت رایگان؟