کتاب Data Structures and Algorithms in JavaScript (ساختارهای داده و الگوریتمها در جاوا اسکریپت) یک راهنمای جامع برای برنامهنویسان جاوا اسکریپت است که میخواهند درک عمیقتری از مفاهیم بنیادی برنامهنویسی به دست آورند. این کتاب به بررسی دقیق انواع مختلف ساختارهای داده مانند آرایهها، لیستهای پیوندی، درختها، گرافها و الگوریتمهای مختلفی میپردازد که برای مدیریت و دستکاری این ساختارها استفاده میشوند.
در ادامه مقدمهای از کتاب Data Structures and Algorithms in JavaScript را از زبان نویسنده شرح خواهیم داد.
مقدمهای بر کتاب Data Structures and Algorithms in JavaScript:
پیش گفتار
از زمانی که یادگیری درباره کامپیوتر را شروع کردم، یعنی در هزاره گذشته، همیشه به الگوریتمها و ساختارهای داده علاقه خاصی داشتم و دوست داشتم بهترین، کارآمدترین و سریعترین راه حل را برای مسائل محاسباتی پیدا کنم.
در طول سالها، دیدهام که توسعهدهندگان همیشه در مورد زبانهای برنامهنویسی و فریمورکهای جدید آموزش میبینند، اما همچنین متوجه شدهام که تمرکز بر توسعه الگوریتم و طراحی ساختار داده تا حدودی کاهش یافته است، به این معنی که برنامهنویسان تمام ابزارهای مورد نیاز برای مواجهه با چالشهای پیچیدهتر را ندارند.
همچنین دیدهام که بسیاری از مصاحبههای شغلی معمولاً شامل سوالاتی هستند که اگر پیشزمینهای در زمینه الگوریتمها داشته باشید، به راحتی میتوان به آنها پاسخ داد، اما در غیر این صورت یک مانع بزرگ هستند. به طور مشابه، چالشهای کدنویسی اغلب به ساختار داده خاصی نیاز دارند تا به طور بهینه مشکلات را حل کنند و این مکان دیگری است که دانش در مورد عملکرد و ترتیب الگوریتمها ضروری است.
من میخواستم کتاب Data Structures and Algorithms in JavaScript تا حد امکان مطالب گستردهای را پوشش دهد و شما در اینجا موضوعات زیادی برای کاوش خواهید یافت. بدیهی است، با سرعتی که همه حوزههای علوم کامپیوتر پیشرفت میکنند، پوشش دادن همه الگوریتمها و توصیف هر ساختار داده ممکن کاملاً غیرممکن است، بنابراین من بر مهمترین آنها تمرکز کردم و پایهای را برای تطبیقها و بهبودهای احتمالی فراهم کردم.
امیدوارم شما، خواننده، از این کتاب چندین مزیت ببرید: تجربه بیشتر با زبان جاوا اسکریپت، درک بهتر جنبههای عملکردی الگوریتمها و توانایی تطبیق و بهبود ساختارهای داده برای ارائه راهحلهای بهینه برای مشکلات کدنویسی خود. با تشکر از اینکه مطالعه میکنید!
بیشتر بخوانید: کتاب Full-Stack JavaScript Strategies
مقدمه
کتاب Data Structures and Algorithms in JavaScript به دو مفهوم اساسی در علوم کامپیوتر میپردازد: ساختارهای داده و الگوریتمها. ساختار این کتاب مشابه برنامههای درسی دانشگاهی است و مثالهایی از چالشهای کدنویسی و سوالات مصاحبه اضافه میکند تا مزایا و معایب نسبی الگوریتمها و ساختارهای داده خاص را مورد بحث قرار دهد.
تمام مثالها به طور کامل با جاوا اسکریپت کدنویسی شدهاند و توجه ویژهای به ویژگیهای مدرن زبان شده است که کدنویسی را سادهتر میکند. عملکرد نیز از هر دو دیدگاه نظری (ترتیب الگوریتمها) و عملی (ساختار، اندازهگیری) در نظر گرفته میشود. هر فصل با مجموعهای از سوالات به پایان میرسد که مفاهیم پوشش داده شده در فصل را تقویت میکند و مثالهای بیشتری را برای کاربرد خواننده ارائه میدهد. پاسخهای این سوالات در انتهای کتاب ارائه شده است.
چه کسانی باید کتاب Data Structures and Algorithms in JavaScript را بخوانند؟
این کتاب برای سه گروه از خوانندگان مناسب است:
گروه اول و اصلی، توسعهدهندگان فرانتاند (وب) و بکاند (Node.js) جاوا اسکریپت هستند، زیرا این کتاب به بررسی نحوه استفاده از ساختارهای داده و الگوریتمها برای حل و بهینهسازی مسائل پیچیده میپردازد.
گروه دوم، دانشجویان علوم کامپیوتر (CS) هستند، زیرا کتاب موضوعاتی را پوشش میدهد که در اکثر دورههای CS وجود دارد. این دانشجویان باید با چندین زبان برنامهنویسی آشنا باشند، بنابراین تمرکز بر جاوا اسکریپت نباید مانعی باشد. الگوریتمها به شدت به جنبههای زبان وابسته نیستند و میتوانند با کمی تغییر به زبانهای دیگر ترجمه شوند.
گروه سوم، برنامهنویسان دیگری هستند که برای مصاحبههای کدنویسی آماده میشوند یا به برنامهنویسی رقابتی علاقهمند هستند. این خوانندگان از پیادهسازی واقعی الگوریتمها و ساختارهای داده و دیدن مثالهایی از انواع سوالاتی که با آنها روبرو میشوند، بهرهمند خواهند شد.
رویکرد کتاب Data Structures and Algorithms in JavaScript چیست؟
این کتاب همیشه رویکردی عملی برای موارد استفاده واقعی دارد. مشکلات رایج را در نظر میگیرد و الگوریتمها و ساختارهای داده مناسب را برای آنها مورد بحث قرار میدهد. ما نسخههای مختلف و بهینهسازیها را بررسی خواهیم کرد و چندین متغیر پیادهسازی را توسعه میدهیم تا درک عمیقتری از راهحلهای جایگزین ممکن ارائه دهیم.
تمام الگوریتمها با استفاده از جاوا اسکریپت برنامهنویسی شدهاند، زیرا این زبان به طور گسترده در دسترس است و هم برای فرانتاند و هم برای بکاند قابل استفاده است. جاوا اسکریپت امروزه بسیار شناخته شده و پرکاربرد است و باید برای همه انواع مشکلات قابل استفاده باشد.
کتاب Data Structures and Algorithms in JavaScript شامل چه مواردی است؟
کتاب به سه بخش تقسیم میشود. بخش اول به اصول اولیه و نکات برجسته جنبههای مهم جاوا اسکریپت میپردازد که در بقیه کتاب استفاده میشود. ما به بررسی برنامهنویسی تابعی خواهیم پرداخت تا برخی از ملاحظات طراحی که در فصلهای بعدی استفاده میشوند را درک کنیم.
همچنین انواع داده انتزاعی (ADT) را در نظر خواهیم گرفت که مفهومی است که شامل ساختارهای داده و الگوریتمها میشود. در نهایت، موضوع عملکرد را در رابطه با الگوریتمها بررسی خواهیم کرد که در بقیه کتاب اغلب مورد استفاده قرار میگیرد. فصلهای زیر در بخش اول قرار دارند:
فصل 1: استفاده از جاوا اسکریپت
در این فصل از کتاب Data Structures and Algorithms in JavaScript، ویژگیهای مهم جاوا اسکریپت را که در بقیه کتاب استفاده میشود، پوشش میدهیم، اما فقط به نکات برجسته خواهیم پرداخت، زیرا فرض میشود که شما قبلاً با این زبان آشنا هستید. موضوعات شامل نسخه فعلی جاوا اسکریپت، ترانسپایل، تایپینگ، توابع پیکانی، گسترش، ساختارشکنی، ماژولها و موارد دیگر خواهد بود. همچنین برخی از ابزارهای زیادی را که برای کمک به توسعه کد جاوا اسکریپت در دسترس هستند، معرفی خواهم کرد.
فصل 2: برنامهنویسی تابعی در جاوا اسکریپت
در این فصل، به ویژگیهای برنامهنویسی تابعی در جاوا اسکریپت میپردازیم که در بقیه کتاب از آنها استفاده میشود. ما به بررسی برنامهنویسی تابعی خواهیم پرداخت تا برخی از ملاحظات طراحی که در فصلهای بعدی استفاده میشود را درک کنیم. موضوعاتی مانند چه چیزی برنامهنویسی تابعی است، چرا باید از آن استفاده کرد، آیا جاوا اسکریپت یک زبان برنامهنویسی تابعی است، سبک برنامهنویسی اعلامی، اثرات جانبی و توابع مرتبه بالاتر، از جمله موضوعاتی هستند که در این فصل بررسی میشوند.
فصل 3: انواع داده انتزاعی
در این فصل از کتاب Data Structures and Algorithms in JavaScript مفهوم انواع داده انتزاعی را به عنوان پایهای برای بررسی ساختارهای داده و عملیات مرتبط با آنها معرفی میکنم. در فصلهای بعدی، تمام ساختارها به عنوان ADT در نظر گرفته میشوند تا مزایا و معایب و همچنین عملکرد آنها برجسته شود. مباحث کلیدی شامل تعریف ADT و نحوه پیادهسازی آنها در جاوا اسکریپت است.
فصل 4: تحلیل الگوریتمها
در این فصل به جنبههای عملکردی الگوریتمها از نظر فضا و سرعت میپردازیم. ما مفهوم کلاسهای پیچیدگی و چگونگی (و زمان) اعمال آن در طراحی الگوریتمها و ساختارهای داده را مورد بحث قرار میدهیم. موضوعاتی که بررسی خواهیم کرد عبارتند از: عملکرد یک الگوریتم چیست، نمادگذاری بزرگ O، کلاسهای پیچیدگی، تفاوتهای بین بهترین، متوسط، بدترین و میانگین موارد، نحوه اندازهگیری عملکرد و مبادلات بین زمان و فضا.
قسمت دوم کتاب: الگوریتمها
بخش دوم کتاب Data Structures and Algorithms in JavaScript بر روی الگوریتمها تمرکز دارد و به استراتژیهای طراحی الگوریتم میپردازد. به طور خاص، ما جستجو، مرتبسازی، درهمکردن و نمونهبرداری را بررسی خواهیم کرد که همه الگوریتمهای شناخته شدهای دارند. فصلهای این بخش به شرح زیر است:
فصل 5: طراحی الگوریتمها
در این فصل، به بررسی استراتژیهای طراحی الگوریتم میپردازیم و مثالهایی از هر مورد را بررسی میکنیم. ما در مورد روشهای کلی، بازگشت، جستجوی جامع، الگوریتمهای حریصانه، تقسیم و غلبه، بازگشت به عقب، برنامهنویسی پویا، شاخه و کرانه، تبدیل و کاهش مسئله بحث خواهیم کرد.
فصل 6: مرتبسازی
در این فصل از کتاب Data Structures and Algorithms in JavaScript، چندین الگوریتم مرتبسازی رایج و مهم برای تولید یک دنباله مرتب شده از دادههای نامرتب را بررسی خواهیم کرد. برخی از الگوریتمها (مانند هیپ مرتبسازی) فقط به طور خلاصه ذکر میشوند، زیرا در فصلهای بعدی که ساختار داده مربوطه شرح داده شده است، بیشتر مورد تجزیه و تحلیل قرار میگیرند.
موضوعات شامل توصیفی از مسئله مرتبسازی، مرتبسازی داخلی در مقابل مرتبسازی خارجی، تابع مرتبسازی جاوا اسکریپت، الگوریتمهای مبتنی بر مقایسه (مانند حباب مرتبسازی، انتخاب مرتبسازی، درج مرتبسازی، کوئیک مرتبسازی و ادغام مرتبسازی و غیره) و الگوریتمهای مرتبسازی بدون مقایسه (مانند بیت مپ مرتبسازی، شمارش مرتبسازی و رادیکس مرتبسازی)، مرتبسازی شمارشی و مرتبسازی مقایسهای است.
فصل 7: انتخاب
این فصل از کتاب Data Structures and Algorithms in JavaScript، الگوریتمهایی را برای پیدا کردن تنها kامین مقدار کوچکتر در یک لیست یا آرایه نشان میدهد، برخلاف مرتبسازی که در آن میخواستیم کل مجموعه را مرتب کنیم. ما مسئله انتخاب را به طور کلی مورد بحث قرار میدهیم، با استفاده از توابع حداقل و حداکثر جاوا اسکریپت؛ انتخاب با مرتبسازی (یا مرتبسازی جزئی)؛ و چندین الگوریتم دیگر مانند کوئیکانتخاب، فلوید-ریوست، میانه میانهها و مرتبسازی با انتخاب.
فصل 8: درهمکردن و نمونهبرداری
این فصل را میتوان مکمل فصل 6 (مرتبسازی) در نظر گرفت. در این مورد، ما میخواهیم یک دنباله تصادفی نامرتب از دادهها تولید کنیم، به جای اینکه یک دنباله کاملاً مرتب داشته باشیم، همانطور که ممکن است برای یک بازی کارت کامپیوتری یا نمونهبرداری آماری مورد نیاز باشد. ما به مسئله درهمکردن، نحوه انجام مرتبسازی تصادفی، الگوریتم فیشر-ییتس، مرتبسازی با کلید تصادفی و الگوریتمهای نمونهبرداری تصادفی خواهیم پرداخت.
فصل 9: جستجو
در این فصل از کتاب Data Structures and Algorithms in JavaScript، چندین الگوریتم جستجوی رایج را بررسی میکنیم که به سرعت پاسخ میدهند که آیا یک مقدار خاص در یک مجموعه داده وجود دارد یا خیر. برخی از الگوریتمها تنها در اینجا معرفی میشوند، اما ما آنها را در فصلهای بعدی که ساختار دادههای مربوطه شرح داده شده است، به طور کاملتر بررسی خواهیم کرد. موضوعات این فصل شامل توصیفی از مسئله جستجو، توابع جستجوی جاوا اسکریپت، جستجوی خطی (با یا بدون نگهبان)، جستجوی پرشی، جستجوی دودویی و جستجوی درونیابی است.
قسمت سوم کتاب: ساختارهای داده
قسمت سوم کتاب به ساختارهای داده اختصاص دارد و انواع مختلفی از ساختارهای داده را از سادهترین ساختارهای خطی تا پیچیدهترین ساختارهای غیرخطی در نظر میگیرد. فصلهای زیر در این قسمت گنجانده شده است:
فصل 10: لیستها
این فصل از کتاب Data Structures and Algorithms in JavaScript، سادهترین ساختار، یعنی لیست پیوندی را که انواع مختلفی نیز دارد، مورد بحث قرار میدهد. ما به طور مفصل به لیستها میپردازیم (آنها چیستند، انواع مختلف آنها، ADT آنها، لیستهای تکسویه، دو سویه و دایرهای)، پشتهها (آنها چیستند و چندین پیادهسازی)، صفها (صفها چیستند و برای چه مواردی استفاده میشوند، ADT آنها و بسیاری از پیادهسازیها) و دِکها (هدف آنها، ADT و پیادهسازی آنها) میپردازیم.
فصل 11: کیسهها، مجموعهها و نگاشتها
در این فصل، ما ساختارهایی را بررسی میکنیم که به شما امکان میدهند مجموعهها (بدون عناصر تکراری) و کیسهها (عناصر تکراری مجاز) را نشان دهید، با نگاشتها (جفتهای کلید-مقدار) به عنوان یک مورد خاص مهم. ما خواهیم دید که کیسهها و مجموعهها چیستند و پیادهسازی آنها (از جمله نسخههای جاوا اسکریپت و همچنین نسخههای مبتنی بر آرایه و لیست) چگونه است و با هش کردن و بیتمپها به پایان میرسیم.
فصل 12: درختهای دودویی
این فصل از کتاب Data Structures and Algorithms in JavaScript، به درختان دودویی و به ویژه درختهای جستجوی دودویی (BST) میپردازد که پایه بسیاری از الگوریتمها هستند. ما در مورد درخت چیست، پیمایش درخت (الگوریتمهای پیشسفری، وسطسفری و پسسفری) و استفاده از درختهای جستجوی دودویی برای جستجو (از جمله درختهای اسپلی، درختهای جستجوی متعادل مانند AVL و درختهای قرمز-سیاه و درختهای جستجوی دودویی تصادفی) بحث خواهیم کرد.
فصل 13: درختها و جنگلها
در این فصل از کتاب Data Structures and Algorithms in JavaScript، ما انواع عمومیتر درختان از جمله جنگلها (مجموعهای از درختان) را مطالعه میکنیم. موضوعات شامل این است که درختان و جنگلها چیستند، چگونه آنها را به چندین روش نمایش دهیم، الگوریتمهای پیمایش (الگوریتمهای پیمایش عرضی و عمقی)، درختهای B و انواع مختلف آن که برای جستجو جهتگیری شدهاند و درختهای قرمز-سیاه به عنوان نوعی از BSTها.
فصل 14: هیپها
در این فصل از کتاب Data Structures and Algorithms in JavaScript، به بررسی هیپها میپردازیم که نوعی از درختان دودویی هستند که بدون نیاز به حافظه پویا ذخیره میشوند و پیادهسازی صف اولویت و مرتبسازی را آسان میکنند. ما در مورد هیپها، هیپهای دودویی و انواع آنها (هیپهای سه تایی یا d-ary)، هیپسورت (الگوریتم مرتبسازی مبتنی بر هیپ)، الگوریتمهای نمونهبرداری مبتنی بر هیپ و تریپها (نوعی BST مرتبط با هیپ) بحث خواهیم کرد.
فصل 15: هیپهای گسترده
در این فصل از کتاب Data Structures and Algorithms in JavaScript، مفهوم هیپها را گسترش میدهیم و به بررسی انواع دیگری از هیپها میپردازیم که عملیاتهای اضافی مانند تغییر (تغییر مقدار یک کلید) و ادغام (ترکیب دو یا چند هیپ) را امکانپذیر میکنند. موضوعات شامل هیپهای دودویی، هیپهای دودویی تنبل، هیپهای فیبوناچی و هیپهای جفت میشود.
فصل 16: درختهای جستجوی دیجیتال
در این فصل از کتاب Data Structures and Algorithms in JavaScript، درختهایی را بررسی میکنیم که به طور خاص برای جستجوی رشتهها طراحی شدهاند، مانند یک “فرهنگ لغت” رایج که در آن کلمات را جستجو میکنیم. ما درختهای تری، رادیکس تری، تریهای سه تایی و انواع دیگر این ساختارها را بررسی خواهیم کرد.
فصل 17: گرافها
در این فصل از کتاب Data Structures and Algorithms in JavaScript، گرافها را بررسی میکنیم که در بسیاری از کاربردهای امروزی مانند گوگل مپ یا محاسبه وابستگیها در یک پروژه نرمافزاری استفاده میشوند. موضوعات شامل تعریف گراف، روشهای مختلف نمایش گراف (مانند لیستهای مجاورت یا ماتریسهای مجاورت)، پیمایش گراف و یافتن مسیر (از جمله الگوریتمهای کوتاهترین مسیر) و مرتبسازی توپولوژیکی است.
فصل 18: تغییرناپذیری و ساختارهای داده تابعی
این فصل از کتاب Data Structures and Algorithms in JavaScript، به جنبه تغییرناپذیری میپردازد و بررسی میکند که چگونه میتوان الگوریتمها را تغییر داد تا به جای اصلاح ساختارهای داده ورودی، ساختار داده جدیدی تولید کنند. ما خواهیم دید که ساختارهای داده تابعی چیست، تغییرناپذیری به چه معناست، انجماد اشیاء، الگوریتمهای مورد نیاز برای اجتناب از اصلاح ساختارهای داده و برخی مثالهای خاص از ساختارهای داده تابعی مانند لیستها، صفها و درختان.
پایان کتاب Data Structures and Algorithms in JavaScript
کتاب با پاسخ به سوالات انتهای هر فصل به پایان میرسد؛ گاهی اوقات پاسخها به طور کامل داده میشوند و گاهی اوقات نکات یا لینکهایی به راه حلها ارائه میشود.
سرفصلهای کتاب Data Structures and Algorithms in JavaScript:
- Cover
- Praise for Data Structures and Algorithms in Javascript
- Title Page
- Copyright
- Dedication
- About the Author
- About the Technical Reviewer
- Brief Contents
- Contents in Detail
- Preface
- Acknowledgments
- Introduction
- Who Should Read This Book?
- What’s the Book’s Approach?
- What’s in the Book?
- Part I: The Basics
- 1. Using Javascript
- 2. Functional Programming in Javascript
- 3. Abstract Data Types
- 4. Analyzing Algorithms
- Part II: Algorithms
- 5. Designing Algorithms
- 6. Sorting
- 7. Selecting
- 8. Shuffling and Sampling
- 9. Searching
- Part III: Data Structures
- 10. Lists
- 11. Bags, Sets, and Maps
- 12. Binary Trees
- 13. Trees and Forests
- 14. Heaps
- 15. Extended Heaps
- 16. Digital Search Trees
- 17. Graphs
- 18. Immutability and Functional Data Structures
- Answer Key
- Bibliography
- Index
- Back Cover
جهت دانلود کتاب Data Structures and Algorithms in JavaScript میتوانید پس از پرداخت، دریافت کنید.
دیدگاهها
هیچ دیدگاهی برای این محصول نوشته نشده است.