我认为对于不熟悉这些学科的学生而言,算法设计和计算复杂性课程总是具有挑战性,因为它们确实需要一定程度的数学成熟度和解决问题的能力。在我的第一本关于“计算复杂性”的研究生课程中,我的一个朋友获得了纯粹的数学学位,他告诉我他为自己感到惊讶,尽管该课程并不需要太多的数学背景(至少在课程大纲),实际上,这几乎需要他通过所有纯数学本科学位所获得的所有技能!
我发现通过阅读和进行Sipser的书中的练习,我最了解“方式”(当我第一次开始我的研究生学习时)。确保您进行练习,因为解决问题的能力和数学成熟度是您要学习的,而不仅仅是一堆事实或定义。
但是,Sipser的书仅适用于复杂性和NP完整性方面的内容,不足以替代CLRS书。CLRS本书的唯一问题是,它的全面覆盖优势可能会使其弱点,因为这本书对于学生来说可能看起来很吓人或不堪重负。因此,我的建议是,您应该真正去图书馆搜索有关算法的书籍,一本一本地浏览,然后选择最适合您的思维方式的书籍。再次不要忘记做运动!
对于算法,我个人建议以下书籍(除了Sadeq和JeffE所建议的书籍):
- S. Dasgupta,CH Papadimitriou和UV Vazirani撰写的一本非常易读且精美的算法。
- 杰夫·埃里克森(Jeff Erickson)的杀手笔记(或书稿)。(由于JeffE不太谦虚地建议自己的笔记,所以我必须自己做。)
通常,每当您学习某种算法或数据结构时,如果某种程度上您的教科书中的论述对您来说不够清楚,那么最好的方法是在google上搜索该特定主题的讲义。在某些情况下,对同一事物的不同解释最终将为您提供完整的图片。至少,这就是我的工作方式。