مقایسه دو کتاب مرجع الگوریتم نویسی دانشگاهی CLRS و Sedgewick
در شماره‌های پیشین ماهنامه شبکه در زمینه اهمیت شیوه آغاز تحصیل در رشته کامپیوتر به تفصیل صحبت کردیم. یکی از مهم‌ترین عوامل تاثیرگذار در این زمینه، کتاب‌هایی هستند که به عنوان مرجع درسی و دانشگاهی به دانشجویان معرفی می‌شود تا با یک مبحث مهم علمی در رشته کامپیوتر آشنا شوند. چنانکه می‌دانید، یکی از اولین مباحث رشته کامپیوتر «مبانی برنامه‌نویسی» و «الگوریتم‌نویسی» است. دو کتاب دانشگاهی مرجع و مشهور، یکی از دانشگاه MIT و دیگری از دانشگاه پرینستون، از جمله مشهورترین رفرنس‌های دنیا در این زمینه هستند. در ایران نیز مانند خیلی کشورهای دیگر این دو مرجع یا به طور مستقیم یا غیرمستقیم مورد استفاده قرار می‌گیرند. در این مطلب، محتوای این دو کتاب را به طور اجمالی مرور می‌کنیم و مقایسه مختصری میان آن دو و دیگر کتاب‌های مطرح در این زمینه خواهیم داشت.

کتاب مشهور CLRS

کتاب «الگوریتم‌نویسی مقدماتی – ویرایش سوم از دانشگاه MIT»1 بیشتر با سرنام چهار نویسنده آن یعنی C.L.R.S. شناخته می‌شود، زیرا آنان در تالیف این کتاب از یک «شبه زبان»2 ابداعی خودشان استفاده کرده‌اند که در بعضی کلاس‌های تدریس مبانی یا تجزیه و تحلیل الگورتیم‌ها رایج است. استفاده از شبه‌زبان‌های ابداعی یک شیوه مرسوم و کاملا مقبول در کتاب‌های علم الگوریتم‌نویسی است و معمولا هر کتاب مرجع شیوه و شبه‌زبان خاص خودش را استفاده کرده است. من نیز در این مقاله به کتاب مذکور با همین نام غیررسمی‌اش اشاره خواهم کرد. ویرایش سوم کتاب CLRS‌ با 1300 صفحه 35 فصل دارد و از سال 2009 تاکنون همچنان یکی از مراجع وزین و اصلی بحث تجزیه و تحلیل الگوریتم‌ها به شمار می‌رود.

کتاب محبوب Sedgewick

کتاب «الگوریتم‌ها ـ ویرایش چهارم ـ انتشارات ادیسون ویسلی»3 تالیف رابرت سجویک و کوین وین4 بیشتر با نام نویسنده اصلی آن یعنی سجویک شناخته شده است. ویرایش چهارم این کتاب در سال 2011 با 990 صفحه منتشر شده و یکی از رفرنس‌های محبوب برای آموزش الگوریتم‌نویسی به دانشجویان است.  این کتاب در شش فصل مبانی الگوریتم‌ها و داده ساختارها را تشریح می‌کند.

بررسی محتوای کتاب‌ها

یکی از دلایل محبوبیت کتاب CLRS در میان اساتید دانشگاه‌ها جامع بودن طیف مباحثی است که از نظر انواع الگوریتم‌ها و تجزیه و تحلیل کارایی و میزان پیچیدگی آنها در آن مطرح شده‌اند. در واقع CLRS یک کاتالوگ از انواع الگوریتم‌ها و مشخصات فنی آنهاست. به همین دلیل در این کتاب 1300 صفحه‌ای 35 فصل وجود دارد؛ در حالی که در 990 صفحه کتاب سجویک تنها 6 فصل وجود دارد. حتی بدون مراجعه به محتوای این دو کتاب می‌توان حدس زد که CLRS طیف وسیعی از انواع الگوریتم‌ها را بررسی می‌کند اما این بررسی‌ها چندان عمیق نیست، در حالی که کتاب سجویک طیف کوچکی را بررسی می‌کند اما در مورد هر یک از انواع الگوریتم‌ها عمق موضوع را کاویده است. 
از این گذشته، کتاب سجویک انواع مشهورتر الگوریتم‌ها (یعنی مرتب سازی، جستجو، گراف‌ها و رشته‌ها) را بررسی می‌کند که هم کاربردشان گسترده‌تر است و هم برای دانشجویان نوآموزی که تازه رشته کامپیوتر را آغاز کرده‌اند قابل فهم‌تر و شیرین‌تر است. در حالی که تمرکز کتاب CLRS روی تجزیه و تحلیل کارایی الگوریتم‌هاست و چگالی مطالب و محاسبات ریاضی در آن بسیار بالاست. از این رو، کتاب سجویک برای دانشجویان سال‌های اول و دوم رشته کامپیوتر مناسب است، در حالی که کتاب CLRS بیشتر برای دانشجویان سال‌های سوم و چهارم و به ویژه درس تجزیه و تحلیل الگوریتم‌ها ـ و نه مبانی آن ـ مناسب است. تفاوت رویکرد این دو کتاب در فصل ضمیمه آخر آنها به خوبی مشخص است. در حالی که فصل ششم سجویک به حوزه‌های کاربرد الگورتیم‌ها در دنیای واقعی اختصاص دارد، ضمیمه پایانی کتاب CLRS به مرور مبانی ریاضیات مورد استفاده در تجزیه و تحلیل الگوریتم‌ها اختصاص یافته تا دانشجویانی که در این زمینه احساس ضعف می‌کنند بتوانند مباحث ریاضی مرتبط را به طور خلاصه مرور کنند.

کتاب CLRS طیف وسیعى از انواع الگوریتم‌ها را بررسى می‌کند اما این بررسی‌ها چندان عمیق نیست، در حالى که کتاب سجویک طیف کوچکى را بررسى می‌کند اما در مورد هر یک از انواع الگوریتم‌ها عمق موضوع را کاویده است.

دغدغه سجویک در کتابش آن بوده که نوآموزان رشته کامپیوتر را گام به گام تا اعماق بحث الگوریتم‌ها هدایت کند تا موضوع برایشان خوب جا بیفتد و این به قیمت صرفه‌نظر کردن از یک طیف وسیع از انواع الگورتیم‌های دیگری است که اصلا ذکری از آنها در کتاب به میان نیامده است. در مقابل، کتاب CLRS آنچنان دغدغه جامعیت و پوشش کامل انواع الگوریتم‌ها را دارد که چندان فرصتی برای واکاوی عمیق هریک از آنها پیدا نمی‌کند. به همین دلیل، بسیاری از مفاهیم و نکات عمقی به جای اینکه داخل فصول تشریح شوند، به صورت مسائل انتهای هر فصل ظاهر شده‌ و به دانشجو واگذار شده‌اند. 
یک تفاوت محسوس دیگر بین دو کتاب زبان مورد استفاده در تشریح الگوریتم‌هاست. از آنجا که دغدغه کتاب CLRS جامعیت و ریاضیات تجزیه و تحلیل الگورتیم‌هاست، از یک شبه‌زبان ابداعی توسط نویسندگان کتاب که به همین CLRS مشهور است استفاده شده و به هیچ زبان خاصی وابسته نیست. در مقابل، کتاب سجویک به دلیل رویکرد کاربرد محور نویسندگانش از زبان‌های برنامه‌نویسی متداول در دنیای واقعی استفاده کرده است. نسخه‌های قبلی کتاب سجویک از زبان‌های پاسکال و سی برای الگوریتم‌نویسی استفاده کرده بودند اما نسخه اخیر روی زبان جاوا تکیه کرده است.

مطلب پیشنهادی

درسی از تجزیه و تحلیل الگوریتم‌ها

دوره‌های آموزشی آنلاین مبتنی بر این کتب

خوشبختانه هر دو کتاب هم به صورت چاپی و هم به صورت PDF موجودند و علاقمندان می‌توانند آنها را در اینترنت پیدا کنند. اما یک روش جدیدتر برای مطالعه این کتاب‌ها، دوره‌های آموزشی آنلاینی است که بر مبنای این رفرنس‌ها تهیه شده‌. سجویک و دیگر نویسنده کتابش محتوای یک دوره آموزشی مفصل و دو قسمت از کتاب را روی سایت کورسرا گذاشته‌اند که دسترسی به آن رایگان است. آدرس هر دو قسمت را می‌توانید در پی‌نوشت‌های انتهای مقاله پیدا کنید.5 کتاب CLRS را نمی‌توانید مستقیم در کورسرا پیدا کنید اما پروفسور تیم راف گاردن از دانشگاه استنفورد یک دوره آموزشی مفصل چهار قسمتی6 دارد که رویکرد آن بسیار متاثر از کتاب CLRS است هرچند که از کتاب سجویک نیز در محتوای دوره استفاده شده است. از آنجا که تمرکز کتاب سجویک تجزیه و تحلیل الگورتیم‌ها به شیوه کتاب CLRS نیست، خود پروفسور سجویک از دانشگاه پرنستون یک دوره آموزشی در زمینه تجزیه و تحلیل روی سایت کورسرا ارائة کرده7 که علاقه‌مندان به کتاب ایشان می‌توانند از دوره مذکور نیز بهره بگیرند.

سایر کتب معروف و مرجع

غیر از دو کتاب فوق، چند کتاب دیگر نیز محبوبیت زیادی در سراسر دنیا دارند و اینجا و آنجا مورد استفاده اهالی دانشگاه هستند، از جمله:

• The Algorithm Design Manual - Steven S Skiena
• Algorithm Design - Jon Kleinberg
• The Art of Computer Programming - Donald E. Knuth
• Algorithms - Dasgupta

در ایران نیز چند کتاب مرجع به زبان فارسی (اعم از تالیف و ترجمه) موجود است که یکی از شناخته‌شده‌ترین آنها، کتاب «داده ساختارها و مبانی الگوریتم‌ها» از دکتر محمد قدسی در شماره 201 ماهنامه شبکه معرفی شده است. رویکرد این کتاب بیشتر شبیه CLRS است و دکتر قدسی خود در مقدمه آن توضیح داده که در تالیف بعضی از فصول کتابش مستقیم از محتوای کتاب CLRS کمک گرفته است.
از نظر محتوایی، کتاب CLRS به کتاب قدیمی‌تری به نام «هنر برنامه‌نویسی کامپیوتر» از Donald E. Knuth شبیه است. این کتاب در واقع چهار جلد دارد که هریک بین 600 تا 800 صفحه هستند و روی طیفی از انواع الگوریتم‌ها تمرکز دارند. به این ترتیب، این مجموعه چهار جلدی از نظر جامعیت، عمق و ریاضیات کامل‌تر و مفصل‌تر است. این مجموعه که انتشار آنها به قبل از سال 2000 برمی‌گردد تا مدت‌ها مرجع بسیاری از دانشگاه‌های دنیا بود اما بعدها کتاب CLRS به دلیل خلاصه کردن همان گستره از مباحث در تنها 1300 صفحه شهرت بیشتری پیدا کرد. اما این خلاصه‌سازی به قیمت دشوار شدن متن کتاب برای دانشجو تمام شده است؛ به عبارت دیگر، عدم ارائه توضیحات کافی روی هریک از انواع الگوریتم‌ها باعث می‌شود که وقتی دانشجو شروع به حل مسائل انتهای فصل می‌کند، برای انجام این کار چندان آماده نباشد. به همین دلیل، کلاس‌های تکمیلی حل تمرین برای آن‌دسته از کلاس‌های درس که از CLRS یا کتب مشابه آن استفاده می‌کنند، بسیار کارگشاست.

پی‌نوشت:

1) Introduction to Algorithms, 3rd Edition, MIT Press 
2) Pseudocode
3) Algorithms, 4th Edition, Addison-Wesley (https://algs4.cs.princeton.edu/home )
4) Robert Sedgewick, Kevin Wayne
5) قسمت اول دوره آنلاین کتاب سجویک https://www.coursera.org/learn/algorithms-part1
قسمت دوم دوره آنلاین کتاب سجویک
https://www.coursera.org/learn/algorithms-part2
6) دوره چهار قسمتی راف گاردن https://www.coursera.org/specializations/algorithms 
7) دوره تجزیه و تحلیل سجویک 
https://www.coursera.org/learn/analysis-of-algorithms 

برچسب: