کتاب 40 Algorithms Every Programmer Should Know یا به طور ساده 40 الگوریتمی که هر برنامهنویس باید بداند، یکی از کتابهای جذاب و خواندنی برای علاقهمندان به طراحی الگوریتم است. این کتاب با گفتاری شیوا، به بیان سادهی الگوریتمهای معروف و معتبر میپردازد و همچنین برخی از آنها را به صورت کد زبان پایتون به اجرا در میآورد. کتاب 40 Algorithms Every Programmer Should Know چاپ سال 2020 و از جدیدترین کتابهای حال حاضر در زمینه یادگیری طراحی الگوریتم میباشد. از خصوصیات قابل توجه این کتاب شرح و بررسی الگوریتمهای کاربردی به همراه توجه به مسائل مهم در مورد آنها و همچنین تشریح مسائل ریاضی در آنها میباشد.
همچنین شما میتوانید برای یادگیری طراحی الگوریتم به وسیله زبان هسکل از کتاب Algorithm Design with Haskell استفاده کنید.
مروری بر کتاب 40 Algorithms Every Programmer Should Know:
فصل 1، بررسی اجمالی الگوریتمها
فصل 1 از کتاب 40 Algorithms Every Programmer Should Know، اصول الگوریتمها را خلاصه میکند. این کار با بخشی از مفاهیم اساسی مورد نیاز برای درک کار الگوریتمهای مختلف آغاز میشود. در این فصل خلاصهای از چگونگی شروع استفاده افراد از الگوریتمها برای تدوین دسته خاصی از مسائل با استفاده از ریاضیات را شرح میدهد.
همچنین به محدودیتهای الگوریتمهای مختلف اشاره شده است. بخش بعدی روشهای مختلف تعیین منطق یک الگوریتم را توضیح میدهد. از آنجا که در این کتاب از پایتون برای نوشتن الگوریتمها استفاده شده است، در ادامه نحوه تنظیم محیط برنامهنویسی برای اجرای مثالها توضیح داده میشود.
سپس، روشهای مختلفی که میتواند عملکرد یک الگوریتم را اندازهگیری و در مقایسه با الگوریتمهای دیگر مقایسه کند، بحث شده است. سرانجام، در این فصل در مورد روشهای مختلفی که میتوان یک پیادهسازی خاص از یک الگوریتم را تأیید کرد، بحث میشود.
فصل 2، ساختارهای دادهای که در الگوریتمها استفاده میشود
فصل 2 از کتاب 40 Algorithms Every Programmer Should Know، بر نیاز الگوریتمها به ساختارهای دادهای که در حافظه ضروری است و میتوانند دادههای موقتی را نگه دارند تمرکز دارد. الگوریتمها میتوانند پر از داده، محاسبات فشرده یا هر دو باشند. اما برای انواع مختلف الگوریتمها، انتخاب ساختارهای داده مناسب برای اجرای بهینه آنها ضروری است.
بسیاری از الگوریتمها منطق بازگشتی و تکراری دارند و به ساختارهای دادهی ویژهای نیاز دارند که ماهیت آنها اساساً تکرار شونده است. همانطور که از پایتون در این کتاب استفاده شده است، این فصل بر ساختارهای داده پایتون متمرکز شده که میتواند برای پیادهسازی الگوریتمهای مورد بحث در کتاب 40 Algorithms Every Programmer Should Know مورد استفاده قرار گیرد.
فصل 3، الگوریتمهای مرتبسازی و جستجو
فصل 3 از کتاب 40 Algorithms Every Programmer Should Know، الگوریتمهای اصلی که برای مرتبسازی و جستجو استفاده میشوند را ارائه میدهد. این الگوریتمها بعداً میتوانند مبنای الگوریتمهای پیچیدهتری قرار بگیرند. فصل 3 با ارائه انواع مختلف الگوریتمهای مرتبسازی آغاز میشود.
همچنین عملکرد روشهای مختلف را با هم مقایسه میکند. سپس، الگوریتمهای مختلفی برای جستجو ارائه میشود. آنها مقایسه میشوند و عملکرد و پیچیدگی آنها اندازهگیری میشود. سرانجام، این فصل کاربردهای واقعی این الگوریتمها را ارائه میدهد.
فصل 4، الگوریتمهای طراحی
فصل 4 از کتاب 40 Algorithms Every Programmer Should Know، مفاهیم اصلی طراحی الگوریتمهای مختلف را ارائه میدهد. همچنین انواع الگوریتمها را توضیح داده و نقاط قوت و ضعف آنها را مورد بحث قرار میدهد. درک این مفاهیم در هنگام طراحی الگوریتمهای پیچیده و بهینه مهم است.
فصل 4 با بحث در مورد انواع مختلف طرحهای الگوریتمی آغاز میشود. سپس، راه حل مسألهی مشهور فروشنده دوره گرد را ارائه داده. سپس برنامهنویسی خطی و محدودیتهای آن را مورد بحث قرار میدهد. در آخر، یک مثال عملی ارائه میدهد که نشان میدهد چگونه میتوان از برنامهریزی خطی برای برنامهریزی ظرفیت استفاده کرد.
فصل 5، الگوریتمهای نمودار
فصل 5 از کتاب 40 Algorithms Every Programmer Should Know، بر روی مشکلات الگوریتمهای گراف (نمودار) متمرکز است که در علوم کامپیوتر رایج است. بسیاری از مشکلات محاسباتی که تا کنون وجود داشته، میتواند به بهترین وجه از دید گراف نشان داده شود. در این فصل روشهایی برای نمایش گراف و جستجوی گراف ارائه شده است. جستجوی گراف به معنای پیگیری سیستماتیک لبههای گراف است تا بتوان از رئوس گراف نیز آن را مشاهده کنید. یک الگوریتم جستجوی گراف میتواند چیزهای زیادی در مورد ساختار یک گراف کشف کند. بسیاری از الگوریتمها با جستجوی گراف، ورودی خود برای بدست آوردن این اطلاعات ساختاری شروع میکنند.
چندین الگوریتم گراف دیگر نیز بر پایهی جستجوی پایهی گراف توضیح داده میشوند. تکنیکهای جستجوی گراف در قلب زمینه الگوریتمهای گراف نهفته است. بخش اول، دو نمایش رایج رایج گرافها را مورد بحث قرار میدهد: به عنوان لیست همجواری و به عنوان ماتریس همجواری. در مرحله بعدی، یک الگوریتم ساده برای جستجوی گراف به نام جستجوی اول-سطح ارائه شده است و نحوه ایجاد یک درخت اول-سطح را نشان میدهد. بخش زیر جستجوی عمق اول را ارائه میدهد و برخی از نتایج استاندارد را در مورد ترتیب بازدید عمق اول از رئوس ارائه میدهد.
فصل 6، الگوریتمهای یادگیری ماشین بدون نظارت
فصل 6 از کتاب 40 Algorithms Every Programmer Should Know، الگوریتمهای یادگیری ماشین بدون نظارت را معرفی میکند. این الگوریتمها به عنوان نظارت نشده طبقهبندی میشوند زیرا مدل یا الگوریتم سعی میکند ساختارها، الگوها و روابط ذاتی را از دادههای داده شده بدون هیچ گونه نظارتی بیاموزد. ابتدا روشهای خوشهبندی مورد بحث قرار گرفته است. این روشها، روشهای یادگیری ماشینی است که سعی میکند الگوهای شباهت و روابط بین نمونههای داده را در مجموعه داده ما پیدا کند و سپس این نمونهها را در گروههای مختلف قرار دهد، به طوری که هر گروه یا خوشهای از نمونه دادهها، بر اساس ویژگیها یا ویژگیهای ذاتی، دارای شباهت است.
بخش بعدی الگوریتمهای کاهش ابعاد را مورد بحث قرار میدهد، که در پایان آن، تعدادی ویژگی را خواهد داشت. در مرحله بعد، برخی از الگوریتمهای مربوط به تشخیص ناهنجاری ارائه شده است. سرانجام، این فصل قاعده کاوی انجمن را ارائه میدهد، که یک روش دادهکاوی است که برای بررسی و تجزیه و تحلیل مجموعه دادههای بزرگ معاملات برای شناسایی الگوها و قوانین مورد علاقه استفاده میشود. این الگوها بیانگر روابط و ارتباطات جالب توجهی در میان موارد مختلف در سراسر معاملات است.
فصل 7، الگوریتمهای یادگیری تحت نظارت سنتی
فصل 7 از کتاب 40 Algorithms Every Programmer Should Know، الگوریتمهای یادگیری ماشین تحت نظارت سنتی را در رابطه با مجموعهای از مشکلات یادگیری ماشین توصیف میکند که در آنها یک مجموعه داده با برچسب با ویژگیهای ورودی و برچسبها یا کلاسهای متناظر با آن وجود دارد. سپس از این ورودیها و خروجیهای مربوطه برای یادگیری یک سیستم تعمیم یافته استفاده میشود، که میتواند برای پیشبینی نتایج برای نقاط دادهای که قبلاً دیده نشده بودند، استفاده شود.
ابتدا مفهوم طبقهبندی در زمینه یادگیری ماشین معرفی میشود. سپس، سادهترین الگوریتمهای یادگیری ماشین، رگرسیون خطی، ارائه داده خواهد شد. یکی از مهمترین الگوریتمها در این زمینه، درخت تصمیم است. محدودیتها و نقاط قوت الگوریتمهای درخت تصمیم، و سپس دو الگوریتم مهم، SVM و XGBoost در این فصل مورد بحث و بررسی قرار داده شده است.
فصل 8، الگوریتمهای شبکه عصبی
فصل 8 از کتاب 40 Algorithms Every Programmer Should Know، ابتدا مفاهیم اصلی و اجزای یک شبکه عصبی معمولی را معرفی میکند، که این مورد در حال تبدیل شدن به مهمترین نوع تکنیک یادگیری ماشین است. سپس، انواع مختلف شبکههای عصبی را ارائه میدهد و همچنین انواع مختلف توابع فعالسازی را که برای تحقق این شبکههای عصبی استفاده میشود، توضیح میدهد. سپس الگوریتم انتشار مجدد به طور مفصل مورد بحث قرار میگیرد.
این الگوریتم پرکاربرد برای همگرایی مسئله شبکه عصبی است. در مرحله بعد، روش یادگیری انتقال توضیح داده شده است، که میتواند برای سادهسازی و تا حدودی خودکار ساختن مدلها مورد استفاده قرار گیرد. سرانجام، نحوه استفاده از یادگیری عمیق برای شناسایی أشیا (Objects) در دادههای چندرسانهای به عنوان یک مثال در دنیای واقعی ارائه شده است.
فصل 9، الگوریتمهای پردازش زبان طبیعی
فصل 9 از کتاب 40 Algorithms Every Programmer Should Know، الگوریتمهایی برای پردازش زبان طبیعی (NLP) ارائه شده است. این فصل از لحاظ نظری به عملی به صورت پشت سر هم پیش میرود. ابتدا، اصول ارائه میشود، و پس از آن ریاضیات اساسی. سپس، در مورد یکی از شبکههای عصبی پرکاربرد برای طراحی و پیادهسازی چند مورد مهم استفاده برای دادههای متنی بحث میشود. محدودیتهای NLP نیز بحث شده است. سرانجام، یک مطالعه موردی ارائه شده است که در آن یک مدل آموزش داده میشود تا نویسنده مقاله را براساس سبک نوشتاری شناسایی کند.
فصل 10، موتورهای پیشنهادی
فصل 10 از کتاب 40 Algorithms Every Programmer Should Know، بر موتورهای پیشنهادی متمرکز است، که روشی برای مدلسازی اطلاعات موجود در رابطه با تنظیمات برگزیده کاربر و سپس استفاده از این اطلاعات برای ارائه توصیههای آگاهانه بر اساس آن اطلاعات است. اساس موتور پیشنهادی همیشه تعامل ثبت شده بین کاربران و محصولات است. این فصل با ارائه ایده اساسی در پشت موتورهای پیشنهادی آغاز میشود. سپس، انواع مختلف موتورهای پیشنهادی را مورد بحث قرار میدهد. سرانجام، در این فصل نحوه استفاده از موتورهای پیشنهادی برای پیشنهاد موارد و محصولات به کاربران مختلف بحث میشود.
فصل 11، الگوریتمهای داده
فصل 11 از کتاب 40 Algorithms Every Programmer Should Know، روی موضوعات مربوط به الگوریتمهای داده محور متمرکز است. این فصل با مروری مختصر در مورد مسائل مربوط به دادهها آغاز میشود. سپس، معیارهای طبقهبندی دادهها ارائه میشود. در مرحله بعد، توضیحی درباره نحوه استفاده از الگوریتمها برای برنامههای داده جریانی ارائه شده و سپس مبحث رمزنگاری ارائه میشود. سرانجام، یک مثال عملی از استخراج الگوها از دادههای توئیتر نیز ارائه شده است.
فصل 12، رمزنگاری
فصل 12 از کتاب 40 Algorithms Every Programmer Should Know، الگوریتمهای مربوط به رمزنگاری را معرفی میکند. فصل با ارائه پیش زمینه آغاز میشود. سپس، الگوریتمهای رمزگذاری متقارن مورد بحث قرار میگیرند. الگوریتمهای هش MD5 و SHA توضیح داده شده و محدودیتها و ضعفهای مرتبط با اجرای الگوریتمهای متقارن ارائه شده است. در مرحله بعد، الگوریتمهای رمزگذاری نامتقارن و نحوه استفاده از آنها برای ایجاد گواهینامههای دیجیتال مورد بحث قرار گرفتهاند. سرانجام، یک مثال عملی که خلاصه همه این فنون در آن در نظر گرفته شده، مورد بحث قرار گرفته است.
فصل 13، الگوریتمهای مقیاس بزرگ
فصل 13 از کتاب 40 Algorithms Every Programmer Should Know، توضیح میدهد که چگونه الگوریتمهای مقیاس بزرگ دادههایی را که نمیتوانند در حافظه یک گره قرار بگیرند و شامل پردازش نیاز به پردازندههای متعدد هستند، مدیریت میکنند. این فصل با بحث در مورد مناسبترین نوع الگوریتمها برای اجرای موازی شروع میشود.
سپس، در مورد مسائل مربوط به موازیسازی الگوریتمها بحث میکند. همچنین این معماری CUDA را ارائه میدهد و در مورد چگونگی استفاده از یک GPU یا آرایهای از GPU برای تسریع الگوریتمها و تغییراتی که باید در الگوریتم ایجاد شود استفاده میشود تا بتوان از GPU به طور مؤثر استفاده کرد.
سرانجام، این فصل درباره محاسبات خوشهای بحث میکند و نحوه ایجاد مجموعه دادههای توزیع شده انعطافپذیر (RDD) Apache Spark را برای ایجاد یک اجرای موازی بسیار سریع الگوریتمهای استاندارد مورد بحث قرار میدهد.
بیشتر بخوانید: معماری CUDA چیست؟
فصل 14، ملاحظات عملی
فصل 14 از کتاب 40 Algorithms Every Programmer Should Know، با موضوع مهم توضیحپذیری آغاز میشود، که اکنون با توضیح منطق تصمیمگیری خودکار، اهمیت آن بیش از پیش مشخص میشود. سپس این فصل، رفتار استفاده از الگوریتم و امکانات ایجاد تعصب در هنگام اجرای آنها را ارائه میدهد. در مرحله بعدی، تکنیکهای مربوط به رسیدگی به مشکلات انپی-سخت (NP-hard) با جزئیات آن مورد بحث قرار گرفته شده است. سرانجام، روشهای پیادهسازی الگوریتمها، و چالشهای دنیای واقعی مرتبط با آن، به طور خلاصه بیان شده است.
سرفصلهای کتاب 40 Algorithms Every Programmer Should Know:
- Section 1: Fundamentals and Core Algorithms
- Overview of Algorithms
- Data Structures Used in Algorithms
- Sorting and Searching Algorithms
- Designing Algorithms
- Graph Algorithms
- Section 2: Machine Learning Algorithms
- Unsupervised Machine Learning Algorithms
- Traditional Supervised Learning Algorithms
- Neural Network Algorithms
- Algorithms for Natural Language Processing
- Recommendation Engines
- Section 3: Advanced Topics
- Data Algorithms
- Cryptography
- Large-Scale Algorithms
- Practical Considerations
فایل کتاب 40 Algorithms Every Programmer Should Know را میتوانید پس از پرداخت دریافت کنید.
دیدگاهها
هیچ دیدگاهی برای این محصول نوشته نشده است.