、《数据结构与问题求解(C++版)》,Mark Allen Weiss,清华大学出版社

来源:百度文库 编辑:神马文学网 时间:2024/07/05 17:03:49
百度空间 | 百度首页 |登录
玖之一
觉得生活过不下去了,就去看书。
主页博客相册|个人档案 |好友
查看文章
如何学好数据结构与算法的若干疑问解答
2009年11月09日 星期一 下午 11:34
最近一段时间以来,给我留言咨询“数据结构与算法学习”方面问题的读者很多,大家都从各自不同的角度提出了自己在学习过程中的困惑,也问到了一些具有突出共性的实际问题。今天我就简单的来汇总一下。
首先是一些问题的解答:
第一大类问题:请我推荐一些学习数据结构和算法方面的书籍:
以下是问题选摘——
陈同学:老师,有什么好点的算法的书啊,关于c或c++的,介绍几本给我!
menghuann:专家你好,我现在正在自学严蔚敏的数据结构(c语言版),感觉很难,这本书说他是用伪c描述的,请问伪c和c++有什么区别? c于与c++的区别大吗?我看谭浩强的《c程序设计》会不会影响我学习c++和严蔚敏的数据结构(c语言版)呢?
menghuann:左专家,你好,上次你提到学习严蔚敏的数据结构(c语言版)是为了应付考试,确实是这样。感觉这本书很难,而我又没有什么编程基础,所以想请教您怎样学好这本书?
排除语言层面上的问题,上述几位朋友都问到了关于“书”的问题。简单的说,你如果要想把这个东西(数据结构与算法)学好,自己备一本(至少一本)专门讲这个东西的书肯定是必须的。我很难想象出如果你想把这个东西学好,然后又不用看书的方法...工欲善其事,不先利其器。一本好的书能够让你学得更轻松,能够让你理解更深刻,让你学得更系统。有的人会说,网络这么大,我就上网找资料学,问题上网上的东西,例如帖子或电子文稿,都非常不系统。就好像你中学学物理,只学了力学和热学,却没学电磁学,就算你力学学得再好,你能去参加高考吗?所以如果是个一瓶子不满半瓶子晃的水平,那根本就不能说自己学了或者学会了,这都言之过早啦。所以要是缺了一本正经八百的书,那在此之后所有的意见和学习方法都是无从谈起了。
讲数据结构和算法的书太多了,真是太多了,不过好的不多啊,呵呵。严格来说,有的书是专门讲算法的,有的书是专门讲数据结构的,这两个其实不是同一个东西,这点大家应该有所明确(至少连名字都不一样吧)。但是这两个东西彼此又紧密联系,所以更多的书选择把它们融合起来讲,这也是可以的。
好了言归正传该推荐书了。前面说了,书是很多的,而且其中有些书很经典,但是我奉劝同学们不要太好高骛远,还是脚踏实地点好,俗话说:万丈高楼平地起啊。一些特别经典的东西理解起来偏难,例如:Knuth的那套《计算机程序设计艺术》(现在分卷分册的中英文对照版国内已经都出了),以及《算法导论》,这两部书都很经典,但刚开始可能不太适合大家。对于普通人来说《算法导论》到研究生阶段再看还比较适合,Knuth的那个除非你是专门搞程序设计与算法方向的,不然就省省吧。
另外,我是不太推荐国内高校教材的,这个原因我之前的关于选购计算机书籍的博文里都说得挺详细的了,我也不太明白好像有人就是特别喜欢买高校教材似的,自己都说看着吃力了还问我怎么才能学好。严老师的那个书我就翻过几页,根本没仔细看过,所以不便发表言论,我推荐的书最起码得是我自己看过了觉得不错的,如果都没仔细看过,那怎么能给各位乱推荐呢?
我下面推荐几本我认为比较好的:
1、《数据结构与问题求解(C++版)》,Mark Allen Weiss,清华大学出版社
这个书我觉得真是不错啊,算法和数据结构基本都讲到了,系统、充实,例子也很好啊,讲得也比较容易理解。而且里面的数据结构和算法都配有完整的代码实现,绝对能运行,真是不容易啊。老外这点真叫人感动,人家教授都是自己给自己的书编代码呀。中国的书里一般都是伪代码,呵呵,这样也省着调试了啊,哈哈。看了这个书,再做做它后面的习题,理论与编程能力双提高啊。缺点就是太厚了,不知道你有勇气读完没有,呵呵。目前中文版,英文版国内都可以买到,我中文版英文版都看过,中文版翻译和排版错误特多,大家小心啦。如果英文过了CET4,直接读英文版吧,挺通俗的。
2、《计算机算法设计与分析》,王晓东,电子工业出版社
这是一本国人写的专门讲算法设计与分析的书,喜欢专门搞算法而已经对数据结构很明白的同学可以看下,不过属于比较难懂得,呵呵,算法就是这样的,对逻辑思维要求更高些。
3、《算法与数据结构——C语言描述》(第2版),张乃孝,高等教育出版社
这其实是一本高校教材。大家别打我,因为没办法,有的网友非得让我给他推荐一本教材,我也很无奈。这方面的教材我看过好几本了,因为都看过才有资格说说他们的情况。这本书的好处是我个人觉得,首先是书很薄也不贵,而且内容比较规范,没有东抄西抄的现象,讲得也挺通俗易懂的,但是毕竟很薄所以内容谈不上特别充实吧(但基本该讲的,他也都讲到了)。另外不足就,里面的代码都是伪代码(就是没办法运行的,教材基本都是这个样子的),或者可以说代码很少,都是文字描述。能帮大家提高理论水平,但是学了这种书,我感觉还是不会用编程的方式来解决实际问题。
4、《C++数据结构原理与经典问题求解》,电子工业出版社
这个书是我写的。500多页,有点厚。我个人感觉是讲得还算通俗易懂吧,有些复杂的算法用了很大的篇幅去描述算法的过程,而且图特别多,一本书下来有大概400多张图表,我觉得这样更容易帮助读者理解。另外一个特点是,这书里面的代码都是绝对可以运行的,绝非伪代码,这里面结合具体的问题和一些经典实例都配有完整的代码。我觉得这样能够让读者提供实际的解决问题的编码能力。但是本书的不足在于(自己爆料一下),印刷错误比较多,这个超郁闷的,应该有二十几处,我自己有勘误表,你自己看的时候就得认真读啦,都是些一眼就看得出来的,也不会把你给带到沟里去吧。
关于荐书的问题就谈到这里,当然,我看到的书也肯定是有限的,我也不是所有的书都看过,所以可能有的好书没谈到,大家见谅吧。因此你也不必非得看我的推荐,这些仅仅是我看过的之中我觉得比较好的,呵呵。在下一篇博文里我将继续围绕大家关心的如何学好数据结构和算法问题进行讲解,不过如果你现在手头还没有一本讲数据结构和算法的书,那我觉得基本上下一篇文章也甭看了,不仔细读一本书,那是学不了地啊...
VIEWER DISCRETION IS ADVISED !!!
----------------------------------------------------
 
书接上文。
最近一段时间以来,给我留言咨询“数据结构与算法学习”方面问题的读者很多,大家都从各自不同的角度提出了自己在学习过程中的困惑,也问到了一些具有突出共性的实际问题。今天我就简单的来汇总一下。
还是来先列出一些大家普遍关心的问题:
nebster:学习c\c++是不是数据结构一定要学好?
杨同学:
第一次提问:
老师,请问,算法该如何学习才更高效,在已有C++一定基础的情况下,当然,跟语言关系不是那么密切,就是想了解下在掌握一门语言后,是不是就是要熟练经典算法?
第二次提问:
恩,这个了解。 因为毕竟算法最终要用一门语言来实现。   熟练经典的数据结构是不是更有效果,或者,怎么样能够逐渐提高,还是常思考? 有没有什么实用的方法?
第三次提问:
老师,你能不能分别给我分析下呢? 就在 提高语言掌握能力 和 算法与数据结构知识,   毕竟像你说的,语言知识工具,掌握后者,熟练运用前者应该是必然的吗?    谢谢了
jiaxurun
左飞老师:
您好!
我是你在学生大本营的忠实读者,从您的搏客中吸取了很多有用的信息和知识。我想请教您一个问题。
您提到程序员水平高低很大程度反映在对数据结构和算法和掌握度上,那么我想请问: “您认为数据结构该怎样学,才能学得扎实、应用起来灵活”? 我平时学习就是根据书上的一些例子,上学调试,可是老觉得程序跑起来出错,而且越来调试程序越感觉自己水平还不如纯学理论不上机之前了。有时候真有点郁闷的。 真诚的希望得到您在学习方法和学习知识方面的指导。 谢谢您!
下面我就针对上述问题来集中阐释一下我的观点。
1、“语言(C、C++及其他)”和“数据结构与算法”的关系
首先,这两个东西其实没啥“必然联系”,很多同学好像还是掰不太清。它们仅仅是同一个学科中的两门课程。但是彼此互有一定的杂糅。比如在讲到C中For循环的时候,老师可能让你用冒泡法实现个排序,这时冒泡排序其实涉及到了算法知识。在讲到数据结构中的队列时,老师也可能会让你用C++写个优先级队列的类,这就涉及到了数据结构的知识。
但是“学好C++是不是一样要把数据结构学好?”,这根本就无从谈起,可以这么说,你完全没学过数据结构,C、C++也能学得挺好。有的程序员整天用Java,.Net之类的开发各种应用系统(比如库存管理系统、银行应用系统、图书馆管理系统),语言用得很顺,经验很丰富,他会说好几年下来也没有用数据结构解决个啥复杂的问题啊。这种情况绝对可能存在。
因此,有没有数据结构知识跟能不能学好C++之间没有必然联系。大家以前应该在中学的时候都学过生物课吧。其中有一本教材是专门讲动物的,另一本则是专门讲植物的。将动物的时候,老师会告诉你动物细胞没有细胞壁,而植物细胞则有。讲到植物的时候,老师也可能会说:绿色植物可以进行光合作用,但是动物却不行。这跟前面的那个互相包含的例子很相似。那么我就想问,如果没学植物学,我就从单细胞动物草履虫开始学习动物学,能不能学好?应该没啥大问题吧。那是不是一定要强调不学数据结构能不能学好C++呢?这其实就没多大意义了啊。
那么数据结构又有什么用呢?是不是就可以不学了呢?还是回到那个例子上,如果你生物课只学植物部分,不学动物部分,你能否参加中考呢?当然不行了。他们和起立才是一个完整的体系。整个的计算机教育中,计算机语言和数据结构都是必修课。考研中,数据结构也几乎是专业课之必考。这是从一个知识全面的角度来讲的。另外,一个比较实际的用途是,在实际工作中,数据结构依然很有用。至少很多公司面试笔试也会考的。如果你不是日复一日地做着“软件组装”的开发工作,而是做一些更高级的研发项目(比作去编个Photoshop,或者研究下Linux内核),如果你数据结构知识为零,那基本上你是无法从事这些更有质量的工作的。如果你看过《编程珠玑》一书(Jon Bentley著),或者《编程之美》,你应该知道我在说什么,你也应该明白算法和数据结构很重要。当然如果你觉得先混口饭吃,管它结构不结构的呢,什么算法都与我无关,数据结构和算法啥都不知道,照样用Java开发系统,我也没意见,呵呵,我不是说了吗——VIEWER DISCRETION IS ADVISED。
2、如何学好编程呢?
这个我在之前的博文中已经讲过了,这里就不再赘述了,有兴趣的朋友可以看之前的文章——“浅谈编程能力的培养与提高”(1、2、3)和“学习C++的一些建议”(1、2、3)。
3、如何学好数据结构呢?
具体建议有三:
首先,又得把计算机语言给拿出来了。一般的规律是你至少得掌握一门计算机语言之后再来学习数据结构。高校中课程一般也是这么排的。这是为什么呢?不是说了不学植物也能把动物学好吗?这里就有一点不同了,植物课和动物课,都是理论型的,都是为了中考。有些东西你只要记住会做题就行了。现在编程可不行了,编程是真刀真枪的,因为你将来可能得靠这个吃饭呢。仅仅纸上谈兵肯定不行。如果你语言学得不好,然后就直接学数据结构,其实对于期末考试,甚至研究生考试来说,问题都不大,中国的学生应试能力都很强大,这根本不成问题。但是我这里的所谓“学好”,标准就是你能够用数据结构和算法知识来编程解决实际问题。比如:最起码自己能够在没有任何资料的帮助下编程解决8皇后问题吧。这其中就涉及到两个能力了。数据结构和算法知识肯定是一方面啊,另一方面呢?编程啊!你连编程都是半瓶子醋,就算数据结构学到天上了又怎么能解决问题呢?纸上谈兵吗?首先语言必须得学好,不管是C还是C++还是Java,什么都行,但得有一个精的,然后再来玩数据结构。如果语言不过关,那就再修修语言吧,啥时候语言通了再来讲数据结构。
其次,看书,看一本好书,认认真真的看一本好书,从头到尾认认真真的看一本好书。(更多关于书的话题前面都讲过了,这里就不多数了。)
最后,现在你语言已经过关了,手头还有一本好书,然后呢?当然是得编程实践了。看到书上的一些实际问题:比如约瑟夫环问题,比如舞伴问题,那就自己编程解决吧(前提是理论已经确实懂了,不要坐在电脑前面眼前一片漆黑,然后想着程序该怎么编呢?那只能说明你书还没看懂。)
这三点是最基本的,其他一些心态上的、方法论上的问题就参考我前面的一些文章吧,里面都有讲。
VIEWER DISCRETION IS ADVISED !!!
----------------------------------------------------
类别:学 | |添加到搜藏 |分享到i贴吧 | 浏览(564) |评论 (1)
上一篇:大学本科计算机专业那些课    下一篇:李开复:三步教你轻松搞定英语单...
相关文章:
如何学好数据结构与算法的若干疑...
网友评论:
1钱逸敏
2010年04月08日 星期四 下午 01:16 |回复 支持
发表评论:
姓 名:   注册 |登录 *姓名最长为50字节
网址或邮箱: (选填)
内 容: 插入表情
▼ 闪光字
验证码: 请点击后输入四位验证码,字母不区分大小写
看不清?

");//-->
©2010 Baidu