您的位置:首页 > 理论基础 > 数据结构算法

如何学好数据结构与算法的若干疑问解答(2)

2009-09-07 00:27 197 查看
书接上文。

最近一段时间以来,给我留言咨询“数据结构与算法学习”方面问题的读者很多,大家都从各自不同的角度提出了自己在学习过程中的困惑,也问到了一些具有突出共性的实际问题。今天我就简单的来汇总一下。

还是来先列出一些大家普遍关心的问题:

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 !!!

----------------------------------------------------

如果你想同我交流,欢迎点击链接http://student.csdn.net/invite.php?u=113322&c=a139a65a1494291d和我成为好友!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: