你能推荐我一本书或(更好!)一个有很多关于数据结构的问题和练习的网站?
我已经回答了Euler项目的问题,但这些问题都是有趣的,但不常见的算法。我几乎没用过一棵简单的树。也许有一个网站有类似的练习:嘿,你需要计算一下:....用树做它。现在用拉链做吧。上传你的C(Haskell,Lisp,甚至是Pascal或Fortress go)解决方案。哦,你的解决方案太慢了!
当你尝试学习非常常见的,基本的东西时,自我教育是非常困难的。如何在不参加课程或其他任何事情的情况下帮助自己?
答案 0 :(得分:24)
Introduction to Algorithms, Third Edition, by Cormen, Leiserson, Rivest and Stein是算法和数据结构的一个很好的介绍。每章末尾都有很多练习。大多数都很简单,但有一些更难。
答案 1 :(得分:20)
国家技术强化学习计划(NPTel)在NPTEL Youtube channel的视频讲座。这些由印度的七个IIT和IISc班加罗尔实施,由印度政府MHRD资助。
答案 2 :(得分:15)
非常棒的免费电子书 - «Data Structures and Algorithms»。包含伪代码和显式形式的通用算法的实现。此外,非常好,可理解的方案和图形。
甚至Jon Skeet mentioned that在他的博客中。 : - )
此外,这不到100页的书(你可能知道很多程序员don't read some books)。
答案 3 :(得分:10)
此 是重复的。
我推荐麻省理工学院开放课件网站here。 “电气工程与计算机科学”部分有一些算法课程。
6.006 - Introduction to Algorithms
6.046J - Introduction to Algorithms (SMA 5503)
我推荐后者。材料在网站上。最好从YouTube here访问这些视频 - 搜索“mit算法”。 textbook得到了很好的尊重。第三版刚出来,第二版与课程相匹配。第一版也作为Dr Dobbs Algorithms and Data Structures CD ROM的一部分加入。
Niklaus Wirth有一本算法和数据结构书可从他的personal site下载。我有Modula 2打印版本,虽然它不是Cormen(或aho hopcroft ullman等)的替代品,但它是一本好书。
答案 4 :(得分:4)
除了前面提到的Cormen,Leiserson和Rivest之外,Peter Brass还有一本非常新的书,"Advanced Data Structures"。它在C中有相对丑陋的示例代码,作者对性能有点狂热(例如,他不使用递归),但该书的理论内容是辉煌和独特的,它几乎不与Cormen相交。我希望它成为经典。
答案 5 :(得分:3)
如果您想练习,可以查看http://www.topcoder.com,提出的算法挑战。
答案 6 :(得分:3)
http://www.youtube.com/watch?v=QMV45tHCYNI
CS 61B:数据结构 - 2006年秋季
导师:Jonathan Shewchuk
基本动态数据结构,包括线性列表,队列,树和其他链接结构;数组字符串和哈希表。存储管理。软件工程的基本原理。抽象数据类型。用于排序和搜索的算法。 Java编程语言简介。
你也可以阅读本书的算法..
http://www.amazon.com/Data-Structures-Algorithms-Made-Easy/dp/1466304162
答案 7 :(得分:2)
如果您想要学习算法的启发性替代方案,您可以尝试:Rabhi F., Lapalme G. Algorithms.. a functional programming approach。
作者挑战更传统 教学算法的方法 使用函数式编程 上下文,用Haskell作为 实施语言。这导致 更小,更清晰,更优雅 使程序员能够运行的程序 了解算法本身 更快,并使用它 理解探索替代方案 解决方案。强调重点 程序开发而不是程序开发 算法的数学性质, 这本书使用了一系列 实用的编程实例 在读者中解决问题 可以轻松转移的技能 到其他语言范式。到其他语言范例。
对于有(硬)练习的网站,您总是可以尝试解决,我建议:spoj。
答案 8 :(得分:1)
最后一本带有练习的好教科书似乎是最好的方法。
答案 9 :(得分:1)
除了非常好的教科书算法简介,第三版,Cormen,Leiserson,Rivest和Stein 之外,我强烈建议您观看在线提供的视频讲座麻省理工学院的Leiserson 。如果你有这本书和讲座,就像你在麻省理工学院学习一样; - )
http://videolectures.net/mit6046jf05_introduction_algorithms/