我想详细研究算法和数据结构(为了成为更好的程序员:P),我已经编程了2 - 3年(c ++,java,python)
在Google上搜索让我在两种类型的图书/网络资源之间感到困惑
我应该选择像语言一样的书籍 http://www.amazon.com/Data-Structures-Algorithms-Using-Python/dp/0470618299/ref=sr_1_2?ie=UTF8&qid=1320183104&sr=8-2
或类似的通用书籍 http://www.amazon.com/Data-Structures-Algorithms-Alfred-Aho/dp/0201000237
这些只是示例,主要问题是我应该选择什么类型的资源,特定于语言还是通用?无论如何会有区别吗?
另外,建议一个好的网络资源/书籍(免费更好),我可以在算法和数据结构方面积累大量的知识。数学没问题
注意:我知道有很多类似的问题,但我怀疑的是,您对算法和数据结构的研究是否取决于您使用的编程语言?
感谢, Shobhit,
答案 0 :(得分:3)
以特定语言的方式学习算法和数据结构是有利有弊的。从好的方面来说,例子,练习和解释可以是非常具体的。如果您可以访问该语言的执行环境,则可以在学习它们时自行尝试这些概念。这非常强大。
在负面,更难区分核心概念(例如,树中的节点和链接)和用于实现它们的特定于语言的方法(例如,C中的结构和指针)。其他语言可能如此不同(例如,Prolog),如果您还没有学会如何将它们与您学到的语言特定方面分开,那么核心概念可能完全无法识别。还有一个问题是,通常有许多特定于语言的东西完全分散了核心概念。 (c中的malloc / free; C ++中的构造函数和析构函数等,除非你正在研究内存管理算法。)
获得特定语言演示的好处并解决其缺点的一种方法是研究针对两种截然不同的语言提供的相同材料。类似Algol的语言(C,C ++,Pascal,Algol,Java,C#等)的整个系列基本上等同于此目的。我之前提到过Prolog;你也可以考虑Lisp。另一个有趣的方法可能是像SQL这样的4GL语言。如果您可以在C程序中以及在SQL模式和查询集中实现良好的平衡树,那么您可以确信您已经掌握了平衡树中涉及的基本概念。
答案 1 :(得分:2)
您应该从CLRS开始。语言不可知。在算法方面,语言并没有太大的区别。这是理论/概念以及算法的工作原理。这就是你需要学习的东西。
一旦你学会了这个概念,你就可以用你选择的任何语言编写算法。
这是由于复杂性。语言在算法和复杂性方面并没有差别,而是实际的算法。
回应@birryree,Skienna的书,如果你问我很高兴为考试做准备。我觉得有很多谜题。还有Kleinberg和computer algorithms。 CLRS是圣经。
答案 2 :(得分:1)
我建议阅读这两种类型的书籍。通用书籍基本上将指导您关于主题的原因,具体的编程语言通常会告诉您主题如何。所以我建议使用两者,因为它们有自己的意义。
答案 3 :(得分:1)
大多数算法和数据结构书籍都与语言无关。有些使用伪代码,有些甚至没有拥有那么多代码,而my favourite books中的一个代码使用了Pascal。