معرفی کتاب Grokking Algorithms
کتاب Grokking Algorithms نوشتهٔ آدیتیا بهارگاوا، مقدمهای تصویری و مثالمحور بر الگوریتمها و ساختمان داده است. نویسنده مفاهیم را بهتدریج معرفی میکند و با استفاده از تصویر، مثالهای ملموس و تمرین، به خواننده کمک میکند سازوکار الگوریتمها را بفهمد و کاربرد آنها را در حل مسئله بشناسد.
این صفحه به ویرایش دوم کتاب اختصاص دارد؛ نسخهای انگلیسی از انتشارات Manning که در سال ۲۰۲۴ منتشر شده و نمونهکدهای آن با Python 3 نوشته شدهاند.
از جستوجو و مرتبسازی تا حل مسئله
مسیر یادگیری با جستوجوی دودویی و نماد Big O آغاز میشود. در ادامه، خواننده با آرایهها، فهرستهای پیوندی، مرتبسازی انتخابی، بازگشت و پشتهٔ فراخوانی آشنا میشود. این مباحث، زمینهٔ درک روش تقسیموحل و الگوریتم مرتبسازی سریع را فراهم میکنند.
بخش دیگری از کتاب به جدولهای هش، کاربردهای آنها و عوامل مؤثر بر عملکردشان اختصاص دارد. هدف، تنها آشنایی با نام ساختمانهای داده نیست؛ بلکه شناخت تفاوتها و انتخابهای پیش رو هنگام حل یک مسئله است.
گرافها، درختها و مسیرهای کوتاهتر
کتاب سپس به سراغ گرافها و جستوجوی سطحاول میرود. دو فصل جداگانه به درختها و درختهای متوازن اختصاص یافتهاند. در این بخشها، موضوعاتی مانند پیمایش عمقی، درخت دودویی، کدگذاری هافمن، درختهای AVL، درختهای Splay و B-tree مطرح میشوند.
در ادامه، الگوریتم دایکسترا و کاربرد آن در یافتن مسیر با کمترین مجموع وزن بررسی میشود. مثالهای این بخش نشان میدهند چگونه میتوان یک مسئله را بهصورت گراف مدل کرد و برای آن راهحل الگوریتمی پیدا کرد.
روشهای حل مسئله و آشنایی با یادگیری ماشین
فصلهای پایانی به الگوریتمهای حریصانه، برنامهنویسی پویا و الگوریتم k نزدیکترین همسایه اختصاص دارند. مسئلهٔ کولهپشتی، مقایسهٔ رشتهها، دستهبندی و ساخت سیستم پیشنهاددهنده، از مثالهایی هستند که برای توضیح این موضوعات به کار میروند.
فصل آخر نیز مسیرهایی برای ادامهٔ مطالعه معرفی میکند تا خواننده بتواند پس از یادگیری مبانی، موضوعات تخصصیتر را دنبال کند.
این کتاب برای چه کسانی مناسب است؟
مخاطب کتاب کسی است که مبانی برنامهنویسی را میداند و میخواهد الگوریتمها را بهتر درک کند. برنامهنویسان خودآموز، دانشجویان دورههای آموزشی و افرادی که به مرور مباحث پایهٔ علوم کامپیوتر نیاز دارند، از مخاطبان معرفیشده برای این اثر هستند.
برای استفادهٔ بهتر از کتاب، فصلها را بهترتیب بخوانید، نمونهکدها را اجرا کنید و تمرینها را انجام دهید. دنبالکردن مراحل اجرای الگوریتم با قلم و کاغذ نیز میتواند به روشنشدن روند حل مسئله کمک کند.
مشخصات نسخه
عنوان اصلی: Grokking Algorithms, Second Edition
نویسنده: Aditya Y. Bhargava
ناشر: Manning Publications
سال انتشار: 2024
ویرایش: دوم
زبان کتاب: انگلیسی
زبان نمونهکدها: Python 3
توجه: فارسیبودن متن معرفی این صفحه به معنی فارسیبودن فایل کتاب نیست.
کارگاه مطالعهٔ مستقل: از خواندن تا توضیحدادن الگوریتم
بخش زیر برنامهٔ مطالعاتی تألیفی برای همراهی با کتاب است؛ متن، تصویر یا پاسخ تمرینهای ناشر را بازنشر نمیکند. برای هر موضوع، نخست تعریف مسئله را بنویسید و بعد یک مثال کوچکِ تازه بسازید. مثال تازه کمک میکند معلوم شود مفهوم را فهمیدهاید یا فقط ترتیب مراحل نمونهٔ کتاب را به خاطر سپردهاید. لازم نیست از ابتدا پروژهای بزرگ بسازید؛ مسئلهٔ محدود با ورودی و خروجی روشن، فضای بهتری برای پرسیدن سؤال و دیدن خطا فراهم میکند.
برای هر جلسه سه خروجی کوتاه در نظر بگیرید: توضیح مفهوم با زبان خودتان، یک اجرای دستی و یک آزمونِ برنامه. این سه جای یکدیگر را نمیگیرند. اجرای برنامه میتواند خطای نوشتاری را نشان دهد، اما توضیح دستی کمک میکند دلیل انتخاب روش روشن شود. اگر در توضیح متوقف میشوید، همان نقطه را دوباره بخوانید. پیشرفتن سریع در صفحهها، بهتنهایی معیار یادگیری نیست.
جستوجو را با پیششرط آن یاد بگیرید
یک فهرست از شناسههای ساختگی بسازید. یک بار آن را مرتب و بار دیگر نامرتب نگه دارید. پیش از انتخاب روش جستوجو، مشخص کنید چه قراردادی دربارهٔ داده برقرار است. سپس ورودی خالی، هدفِ ناموجود و مقدار تکراری را بررسی کنید. این تمرین از نمونههای خود کتاب کپی نشده است. هدف آن نشاندادن این است که درستی الگوریتم به تعریف ورودی و پیششرطها وابسته است، نه فقط به نام روشی که انتخاب میکنیم.
تعداد مقایسهها را نیز بشمارید و با بزرگترشدن فهرست مقایسه کنید. زمان واقعی اجرا را از شمارشِ مدلشده جدا نگه دارید. یک دستگاه سریع میتواند تفاوت روشها را در ورودی کوچک پنهان کند. گزارش مناسب باید بگوید چه چیزی شمارش یا اندازهگیری شده و محدودیت آن چیست. این عادت هنگام مطالعهٔ نمادگذاری هزینه، از حفظکردن جدول پیچیدگی بدون فهم مسئله جلوگیری میکند.
بازگشت را روی کاغذ دنبال کنید
یک مسئلهٔ کوچک انتخاب کنید که به نسخهای کوچکتر از خودش تبدیل شود. حالت پایان و اندازهای را که در هر گام کم میشود صریح بنویسید. سپس فراخوانیها و بازگشت نتیجه را با پیکان نشان دهید. اگر حالت پایان روشن نباشد، برنامه ممکن است مسیر معناداری برای توقف نداشته باشد. این تمرین برای تجربهٔ سازوکار است و پاسخ هیچ تمرین مشخصی از کتاب را ارائه نمیکند.
بعد همان مسئله را با روش دیگری حل کنید و تفاوتِ خوانایی، حافظه و توضیحپذیری را بسنجید. قرار نیست یک سبک همیشه برنده باشد. مهم است بدانید هر روش چه فرضی دارد و برای کدام اندازهٔ مسئله مناسب است. نتیجه را با نمونهٔ مرزی نیز بررسی کنید تا فهم شما به یک ورودی خوشایند محدود نماند.
گراف را از مسئله استخراج کنید
چند مکان فرضی و ارتباط میان آنها رسم کنید. پیش از انتخاب الگوریتم، بگویید گره و یال نمایندهٔ چه چیزی هستند و وزن چه معنایی دارد. کمترین تعداد گام با کمترین مجموع هزینه الزاماً یکسان نیست. یک مثال بسازید که این دو پاسخ فرق کنند. چنین تمرینی نشان میدهد بخش مهمی از حل مسئله، مدلسازی است؛ اجرای الگوریتم مشهور روی مدل نادرست نتیجهٔ مورد نیاز را تضمین نمیکند.
برای مقصد دسترسناپذیر و یالهای تکراری نیز قرارداد تعریف کنید. سپس نتیجه را با دست بررسی کنید. اگر از ابزار تصویری استفاده میکنید، ظاهر زیبا نباید جای صحت مدل را بگیرد. بهتر است نمودار کوچک و قابل بررسی باشد تا بتوان دلیل هر گام را توضیح داد. این برنامهٔ مطالعه، راهی برای همراهی با مباحث کتاب است و ادعای پوشش همهٔ سرفصلها یا جایگزینی متن اصلی ندارد.
یک پروژهٔ پایانی کوچک و قابل بازبینی
پیشنهاد آموزشی این است که فهرستی از کتابهای ساختگی بسازید و چند نیاز محدود تعریف کنید: جستوجوی شناسه، مرتبکردن عنوان و پیدا کردن ارتباط میان موضوعها. برای هر نیاز، روش انتخابی و دلیل آن را بنویسید. دادهٔ واقعیِ کاربران لازم نیست. پروژه باید آنقدر کوچک بماند که آزمون و توضیح آن ممکن باشد؛ افزودن رابط پیچیده نباید توجه را از الگوریتم و قرارداد داده دور کند.
در پایان، مستند را به فرد دیگری بدهید و از او بخواهید روش شما را توضیح دهد. هر ابهام، فرصتی برای اصلاح است. فایل معرفی فارسی این صفحه، زبان خود کتاب را تغییر نمیدهد؛ برای مشخصات نسخه به بخش مشخصات و منبع ناشر مراجعه کنید. مطالعهٔ مسئولانه همچنین یعنی تهیه و استفاده از فایل از مسیری که حق دسترسی و انتشار آن روشن باشد. هدف این راهنما، ساخت عادت حل مسئله است، نه جایگزینکردن اثر نویسنده یا بازنشر تمرینهای دارای حق نشر.