کتاب Grokking Data Structures (درک عمیق ساختمانهای داده) یک منبع آموزشی کاربردی و تصویری برای درک عمیق ساختمانهای داده است که با زبانی ساده و مثالهای ملموس، مفاهیمی مثل آرایهها، لیستهای پیوندی، پشتهها، صفها، درختها، گرافها و جدولهای هش را بدون پیچیدگیهای غیرضروری توضیح میدهد. این کتاب با رویکرد یادگیری از طریق نمودارها، تمرینهای گامبهگام و کدهای واقعی به خواننده کمک میکند تا نه فقط ساختار هر ساختمان داده، بلکه زمان مناسب استفاده از آن را برای حل مسائل دنیای واقعی و مصاحبههای برنامهنویسی به خوبی درک کند.
در ادامه مقدمهای از کتاب Grokking Data Structures را از زبان نویسنده شرح خواهیم داد.
مقدمهای بر کتاب Grokking Data Structures:
در سال ۲۰۱۶، من به طور منظم برای وبلاگهای فنی مطلب مینوشتم و بیشتر دربارهٔ جاوااسکریپت و فریمورکهای آن مقاله ارائه میکردم. از این کار لذت میبردم و به من کمک کرد تا درک عمیقتری از این زبان پیدا کنم، زبانی که روزانه در توییتر از آن استفاده میکردم. اما در نقطهای از خودم پرسیدم که آیا واقعاً این موضوعی است که میخواهم پوشش دهم. این پرسش بیشتر جنبهٔ بلاغی داشت، زیرا از ترم دوم سال دوم دانشگاه میدانستم که موضوعاتی که واقعاً مرا شیفته خود میکند، الگوریتمها، ساختمانهای داده و بهینهسازی هستند.
این شروع سفری پنجساله بود که به انتشار اولین کتاب من با عنوان “الگوریتمها و ساختمانهای داده پیشرفته” (منتشرشده توسط منینگ، ۲۰۲۱) انجامید.
در بهار ۲۰۲۳، قصد نداشتم به این زودیها کتاب دیگری بنویسم. تا اینکه فرصت همکاری روی کتاب “درک عمیق ساختمانهای داده” پیش آمد، درست زمانی که بیشتر از همیشه وقت آزاد داشتم – تقریباً به شکلی تصادفی.
چالش پیش رو را میدیدم، اما با اشتیاق فراوان آن را پذیرفتم و تصمیم گرفتم شش ماه بعدی را روی پیشنویس “درک عمیق ساختمانهای داده” متمرکز کنم. این کار آسان نبود، زیرا این کتاب با “الگوریتمها و ساختمانهای داده پیشرفته” تفاوت بنیادی دارد. در حالی که کتاب دوم یک شیرجه عمیق در مباحث پیشرفته است، هدف هر کتاب مجموعهٔ “گروکینگ” (درک عمیق) این است که مفاهیم، هر چقدر هم پیچیده باشند، را برای گستردهترین طیف ممکن از مخاطبان به ریشه و سادگی قابلفهم کند. این به آن معنا بود که باید رویکردم را تغییر دهم و روی چیزهای متفاوتی تمرکز کنم.
اولین چالش، ایجاد مسیری در سراسر کتاب Grokking Data Structures بود که خواننده را راهنمایی کند و علاقهٔ او را همواره بالا نگه دارد. تصمیم گرفتم با ایجاد دانش پایهای دربارهٔ آرایهها و لیستهای پیوندی شروع کنم، مدتی را به بررسی عمیق این مباحث اختصاص دهم، و سپس ساختمانهای دادهٔ پیچیدهتری را پیرامون آنها بسازم.
کاری که در سراسر کتاب Grokking Data Structures سعی کردم انجام دهم این است که هر ساختمان داده را از زوایای مختلف نشان دهم: نظریهٔ آن، البته، تا بفهمیم چگونه کار میکند، اما همچنین چگونگی استفاده از آن در عمل، و اینکه چگونه میتواند زندگی شما را آسانتر یا کدتان را مقاومتر کند. همچنین توضیح میدهم که چرا به هر ساختمان دادهای نیاز داریم و اگر بین چند گزینه انتخاب داشته باشیم، چرا باید یکی را بر دیگری ترجیح دهیم.
قالب کتابهای مجموعهٔ «گروکینگ» (درک عمیق) نیز منحصربهفرد است و من این ویژگی منحصربهفرد را پذیرفتم، به ویژه وقتی صحبت از ارائهٔ یک داستان مرتبط و همذاتپندار برای هر فصل بود که خواننده بتواند با آن ارتباط برقرار کند و همچنین تصاویر آموزشی که بیشتر از کتابهای معمولی از آنها استفاده شده است.
نوشتن یک کتاب، مانند بسیاری از کارها، اغلب به یافتن تعادل مناسب میان جنبههای مختلف بستگی دارد. من تمرکز خود را بر این گذاشتم که هر ساختمان داده را به درستی و به وضوح توضیح دهم و پایهای محکم برای شما در هر ساختار فراهم کنم. امیدوارم این رویکرد به شما کمک کند تا با ساختمانهای داده آشنا شوید، یا اگر از قبل با این موضوع شگفتانگیز آشنایی دارید، درک خود را عمیقتر کنید و چیزهای تازهای دربارهٔ آنها کشف نمایید. و مهمتر از آن، امیدوارم کتاب Grokking Data Structures بتواند الهامبخش شما باشد و شما را به ساختمانهای داده و الگوریتمها علاقهمند کند، همانگونه که من از برخی کتابهای کلاسیک این حوزه الهام گرفتم.
دربارهٔ کتاب Grokking Data Structures: چه کسانی این کتاب را بخوانند؟
این کتاب برای مبتدیان نوشته شده است: اگر دانشجو، فارغالتحصیل تازهکار یا برنامهنویسی هستید که تازه شروع به کار کرده و میخواهید دربارهٔ ساختمانهای داده بیشتر یاد بگیرید، ممکن است رویکرد این کتاب برایتان جالب باشد. موضوعات پوششدادهشده شامل ساختمانهای داده در سطح مبتدی و (تا حدی) متوسط است؛ من وارد جزئیات ریاضی یا اثباتهای فنی نمیشوم — تقریباً هیچ ریاضیاتی در این کتاب وجود ندارد.
کتاب Grokking Data Structures مباحث اصلی ساختمانهای داده را که پیش از یادگیری الگوریتمها و ساختمانهای داده پیشرفته باید بدانید، مورد بحث قرار میدهد. ایدههای کلیدی پشت آنها را میبینیم و درمییابیم که چگونه کار میکنند و چگونه میتوانید از آنها در کار روزمرهٔ خود استفاده کنید.
اگر این مفاهیم برای شما تازه هستند، اگر میخواهید مطالبی را که در مدرسه یاد گرفتهاید دوباره مرور کنید، اگر میخواهید برای مصاحبهٔ برنامهنویسی آماده شوید، یا اگر فقط میخواهید کیفیت و کارایی کد خود را بهبود ببخشید، کتاب Grokking Data Structures میتواند انتخاب مناسبی باشد.
برای بحث پیشرفتهتر یا عمیقتر دربارهٔ این موضوع (شاید پس از خواندن این کتاب)، کتاب دیگر من، “الگوریتمها و ساختمانهای داده پیشرفته” (منتشرشده توسط منینگ، ۲۰۲۱) را بررسی کنید.
ساختار کتاب Grokking Data Structures: نقشهٔ راه
این کتاب به ۱۳ فصل تقسیم شده است. بیشتر فصلها بر روی یک ساختمان دادهٔ خاص تمرکز دارند. اگر برای اولین بار به این موضوع نزدیک میشوید، یا بهکلی مبتدی هستید، فصلها را به ترتیب بخوانید. هر فصل بر اساس فصلهای قبلی بنا شده است و برای مثال، درک عمیقتری که از آرایهها در فصلهای ۲ و ۳ به دست میآورید، یا مبانی تحلیل مجانبی در فصل ۴، به شما کمک میکند تا ساختمانهای دادهٔ پیچیدهتر را در فصلهای بعدی بهتر درک کنید.
پس از اولین بار خواندن کتاب Grokking Data Structures، میتوانید از آن به عنوان یک مرجع استفاده کنید و مستقیماً به سراغ ساختمان داده یا موضوعی بروید که نیاز به مرور دارید. همین موضوع برای زمانی که به عنوان خوانندهٔ متوسط یا پیشرفته به این کتاب نزدیک میشوید نیز صادق است – همچنان ارزش دارد که حداقل یک بار فصلها را به ترتیب مناسب مرور کنید.
بیایید هر فصل را به تفصیل مرور کنیم:
- فصل ۱ معرفی ملایمی به ساختمانهای داده است و بحث میکند که چه زمانی، چگونه و چرا با زیر سوال بردن ساختمانهای دادهای که استفاده میکنید، میتوانید یک مزیت به دست آورید.
- فصل ۲ آرایهها را معرفی میکند و نشان میدهد که چگونه کار میکنند و چه عملیات معمولی را پشتیبانی میکنند. در این فصل، روی آرایههای با اندازهٔ ایستا (ثابت) تمرکز میکنیم.
- فصل ۳ کتاب Grokking Data Structures به آرایههای مرتب شده میپردازد، چگونگی بهرهگیری از مزایای آنها و چگونگی مقابله با معایبشان را نشان میدهد. شما دربارهٔ جستجوی دودویی (باینری سرچ) یاد میگیرید و درمییابید که چرا بهتر از جستجوی خطی عمل میکند.
- فصل ۴ نماد بیگ-او (big-O) و تحلیل مجانبی را معرفی میکند و توضیح میدهد که چگونه میتوانیم از آنها برای مقایسهٔ عملکرد الگوریتمهای دلخواه روی یک مسئلهٔ مشخص استفاده کنیم. سپس از این مفاهیم برای نشان دادن رسمی این موضوع استفاده میکنیم که جستجوی دودویی واقعاً نسبت به جستجوی خطی مزیت دارد.
- فصل ۵ بحث آرایهها را به پایان میبرد با توصیف چگونگی ایجاد توهم آرایههای با اندازهٔ پویا، بدون اینکه توانایی مقیاسپذیری آنها قربانی شود.
- فصل ۶ کتاب Grokking Data Structures، به لیستهای پیوندی میپردازد که میتوانند به جای آرایهها برای ذخیرهٔ ترتیبی دادهها استفاده شوند. در سراسر این فصل، لیستهای پیوندی را با آرایهها مقایسه میکنیم و از آنچه در فصل ۴ آموختهایم برای درک اینکه چه زمانی استفاده از یکی نسبت به دیگری مزیت دارد، بهره میبریم.
- فصل ۷ کتاب Grokking Data Structures تفاوت میان ساختمانهای داده، انواع دادهٔ انتزاعی و پیادهسازیها را روشن میکند. سپس این نظریه روی مثالهای عینی اعمال میشود. در ادامه، دستهٔ ظرفها (کانتینرها) و «کیسه» (bag) را به عنوان یک ظرف ساده معرفی میکند.
- فصل ۸ پشته (stack) را ارائه میدهد، ظرفی که سیاست LIFO (آخرین ورودی، اولین خروجی) را پیادهسازی میکند. نحوهٔ کار آن و چگونگی پیادهسازیاش را توضیح میدهد. همچنین کاربردهای عملی پشتهها را نشان میدهد.
- فصل ۹ صف (queue) را ارائه میدهد، ظرفی که سیاست FIFO (اولین ورودی، اولین خروجی) را پیادهسازی میکند و نشان میدهد که چگونه با پشته تفاوت دارد. پیادهسازیهای مختلف را هم با آرایهها (صفهای خطی و حلقوی) و هم با لیستهای پیوندی بررسی میکند.
- فصل ۱۰ مفهوم صفها را با صفهای اولویتدار تعمیم میدهد. مفهوم اولویت، رابط برنامهنویسی (API) نوع دادهٔ انتزاعی را توضیح میدهد و سپس هیپ دودویی (binary heap) را به عنوان رایجترین پیادهسازی صفهای اولویتدار معرفی میکند.
- فصل ۱۱ کتاب Grokking Data Structures اولین فصلی است که فراتر از ظرفها میرود. درختان (trees) را به عنوان یک دسته از ساختمانهای داده بررسی میکند و روی درختان جستجوی دودویی (binary search trees) تمرکز مینماید، ساختمان دادهای که میتواند تعادل خوبی برای عملکرد همهٔ عملیات پایه (درج، حذف، جستجو) فراهم کند.
- فصل ۱۲ نوع دادهٔ انتزاعی دیکشنری (dictionary) را معرفی میکند و بحث میکند که چگونه میتوان آن را با ساختمانهای دادهٔ ارائهشده در فصلهای قبل پیادهسازی کرد. سپس جدولهای هش (hash tables) را معرفی میکند و توضیح میدهد که چگونه کار میکنند و چرا برای پیادهسازی دیکشنریها مناسبتر هستند.
- فصل ۱۳ کتاب Grokking Data Structures را با معرفی یک ساختمان دادهٔ محوری به پایان میبرد – گرافها (graphs). پس از تعریف گراف و ارائهٔ ویژگیهای پایهٔ آن، این فصل دو استراتژی ممکن برای پیادهسازی گرافها را بحث میکند و در نهایت الگوریتمهای جستجوی BFS (اولویت با سطح) و DFS (اولویت با عمق) را بررسی میکند.
بیشتر فصلها شامل تمرینهایی برای حل کردن هستند. گاهی از شما میخواهند که نوع تغییریافتهای از آنچه در آن فصل بحث کردهام را پیادهسازی کنید؛ در موارد دیگر، سوالات انتزاعیتر و باز هستند. هر دو نوع تمرین فرصت خوبی برای خودآزمایی درک شما از موضوع هستند، بنابراین توصیه میکنم حداقل چند دقیقه را صرف تلاش برای حل آنها کنید. اگرچه پاسخ تمرینها را در خود کتاب نخواهید یافت، من بحثها و راهنماییهایی برای تمرینها در مخزن کتاب در GitHub اضافه کردهام.
سرفصلهای کتاب Grokking Data Structures:
- Grokking Data Structures
- brief contents
- contents
- foreword
- preface
- acknowledgments
- about this book
- about the author
- 1 Introducing data structures: Why you should learn about data structures
- 2 Static arrays: Building your first data structure
- 3 Sorted arrays: Searching faster, at a price
- 4 Big-O notation: A framework for measuring algorithm efficiency
- 5 Dynamic arrays: Handling dynamically sized datasets
- 6 Linked lists: A flexible dynamic collection
- 7 Abstract data types: Designing the simplest container-the bag
- 8 Stacks: Piling up data before processing it
- 9 Queues: Keeping information in the same order as it arrives
- 10 Priority queues and heaps: Handling data according to its priority
- 11 Binary search trees: A balanced container
- 12 Dictionaries and hash tables: How to build and use associative arrays
- 13 Graphs: Learning how to model complex relationships in data
- index
جهت دانلود کتاب Grokking Data Structures میتوانید پس از پرداخت، دریافت کنید.

دیدگاهها
هیچ دیدگاهی برای این محصول نوشته نشده است.