- عنوان کتاب: Fabulous Adventures in Data Structures and Algorithms
- نویسنده: Eric Lippert
- حوزه: ساختار داده
- سال انتشار: 2026
- تعداد صفحه: 577
- زبان اصلی: انگلیسی
- نوع فایل: pdf
- حجم فایل: 9.81 مگابایت
کتابهایی که برنامه درسی استاندارد کارشناسی را برای مرور یا آمادگی برای مصاحبه پوشش میدهند عالی هستند، اما این کتاب یکی از آنها نیست. بلکه در مورد ساختارها و الگوریتمهای داده عجیب و غیرمعمولی است که من در سه دهه ساخت ابزارهای توسعهدهنده با آنها مواجه شدم. اکثر آنها را مجبور شدم برای حل یک مسئله خاص در محل کار یاد بگیرم، با برخی از آنها به عنوان یک برنامهنویس تفریحی مواجه شدم، همه آنها نحوه تفکر من در مورد حل مسئله را تغییر دادند. یک سوم اول کتاب به تعدادی از انواع داده انتزاعی استاندارد مانند پشتهها، صفها و درختها میپردازد، اما هر کدام را کمی تغییر میدهد. ما به مزایای ساختارهای داده تغییرناپذیر و نحوه استفاده از درخت انگشت برای ساخت لیستهایی که میتوانند از هر دو انتها فشار داده و حذف شوند، خواهیم پرداخت. و بهینهسازیهای زمان و مکان گاهی اوقات شگفتانگیز حاصل از یادداشتبرداری را بررسی خواهیم کرد. یک سوم میانی به برخی از الگوریتمهایی که هنگام ساخت ابزارهای توسعهدهنده با آنها مواجه شدم، میپردازد. ما بررسی خواهیم کرد که چگونه قالببندیکنندگان کد منبع از الگوریتمهای جستجو برای یافتن بهترین طرحبندی استفاده میکنند، چگونه میتوان اشتراکات بین دو تغییر کد را پیدا کرد و چه رابطهای بین رنگآمیزی نقشه و حل یک جدول سودوکو وجود دارد. یک سوم پایانی، الگوریتمها و ساختارهای داده را برای انتزاع اصولیتر برای نمایش مقادیر تصادفی بررسی میکند؛ روشهای آماری در بسیاری از برنامهنویسیهای مدرن اهمیت پیدا کردهاند. بسیاری از زبانها برای مفاهیم متنوعی مانند توالیها، مشاهدهپذیرها، توابع، تهیپذیرها و وظایف، انواع داده دارند، اما برای تصادفی بودن نه. علاوه بر این، همه این مفاهیم یک ساختار ریاضی اساسی مشترک دارند. در بین بخشها، مجموعهای از میانپردههای کوتاه خواهیم داشت که توضیح میدهد چگونه نظریه دستهبندی زیربنای این نوعهاست. برای بهرهمندی هرچه بیشتر از این کتاب، باید تجربهای در برنامهنویسی، چه به صورت حرفهای و چه به صورت تفریحی، و تمایل به اضافه کردن ابزارهای جدید به جعبه ابزار خود داشته باشید. آشنایی با نماد “O بزرگ” که برای توصیف عملکرد مجانبی استفاده میشود، مفید خواهد بود، اما الزامی نیست. تمام کدها به زبان C# نوشته شدهاند، زبانی که من آن را بهتر میشناسم، اما برای هر برنامهنویس که دانش عملی از یک زبان شیگرای مدرن مانند جاوا، C++ و غیره دارد، قابل درک خواهد بود. موضوعات مطرحشده در این کتاب متنوع هستند، اما همه آنها یک چیز مشترک دارند: وقتی برای اولین بار در مورد آنها اطلاعات کسب کردم، بلافاصله به ذهنم رسید که “چطور از این چیز فوقالعاده خبر نداشتم؟ باید به افراد بیشتری در مورد آن بگویم!” این کتاب بخشی از تلاش برای گسترش دانش در مورد موضوعاتی است که هرگز در تحصیلات کارشناسی من پوشش داده نشدهاند. امیدوارم آنها را مفید بیابید، اما حتی بیشتر از آن، امیدوارم که نحوه تفکر شما در مورد برنامهنویسی را تغییر دهند. اگر نظر، پیشنهاد، یادداشتی در مورد آنچه که دنبال کردن آن را آسان یا دشوار یافتید و غیره دارید، لطفاً آنها را در انجمن گفتگوی آنلاین ارسال کنید. این بازخورد در ادامه توسعه کتاب به شکل نهایی آن بسیار مفید خواهد بود. مجدداً از خرید این MEAP و همراهی با من در یک ماجراجویی شگفتانگیز متشکرم!
Books that cover the standard undergraduate curriculum for review or interview prep are great, but this book isn’t one of them. Rather, it’s about the odd and unusual data structures and algorithms I encountered in three decades of building developer tools. Most of them I had to learn about to solve a particular problem at work, some of them I encountered as a recreational programmer, all of them changed the way I think about problem solving. The first third of the book looks at a few of the standard abstract data types such as stacks, queues and trees, but puts a twist on each. We’ll look at the benefits of immutable data structures, and how to use a finger tree to build lists that can be pushed and popped from both ends. And we’ll explore the sometimes astonishing time and space optimizations afforded by memoization. The middle third looks at some of the algorithms I encountered while building developer tools. We’ll explore how source code formatters use search algorithms to find the best layout, how to find the commonalities between two code changes, and what the relationship is between coloring a map and solving a sudoku puzzle. The final third explores algorithms and data structures for a more principled abstraction for representing random quantities; statistical methods have become important in much of modern programming. Many languages have data types for diverse concepts such as sequences, observables, functions, nullables and tasks, but not for randomness. Moreover, all of these concepts share a common underlying mathematical structure; in between sections we’ll have a series of short interludes that explain how category theory underlies these types. To get the most out of this book you’ll want to have some experience with programming, either professionally or recreationally, and a desire to add new tools to your toolbox. Familiarity with the “big-O” notation used to describe asymptotic performance will be useful, but not required. All the code is written in C#, the language I know best, but will be understandable to any programmer who has a working knowledge of a modern object-oriented language such as Java, C++, and so on. The topics covered in this book are diverse, but all of them have one thing in common: when I first learned about them, my immediate thoughts were “How did I not know about this fabulous thing already? I need to tell more people about this!” This book is part of that effort to spread knowledge about topics that were never covered in my undergrad education. I hope you find them useful, but even more so, I hope they change the way you think about programming. If you have any comments, suggestions, notes about what you found easy or hard to follow, and so on, please consider posting them to the online discussion forum. That feedback will be very useful as we continue to develop the book into its final form. Thanks again for buying this MEAP, and for going on a fabulous adventure with me!
این کتاب را میتوانید از لینک زیر بصورت رایگان دانلود کنید:
Download: Fabulous Adventures in Data Structures and Algorithms





نظرات کاربران