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

关于数据结构以及学习的一点建议

2011-11-10 00:23 369 查看
我建议大家不要盲目听信他人的方法,我此前看到很多什么“数据结构源代码和演示的重要性”,“7天记忆10000多单词”这样的信息。我首先对此表示质疑,但我不否认这种方法存在的可能性!
      对方法的迷信可能是你失败的因素之一,因为世界上根本没有最好的方法,只有最适合你的方法,最适合往往因人而异。我也在生活中看到这样一类人,他们觉得某种方法非常有效,也非常可靠,自信能比别人在更少的时间内,比别人更出色的做成一件事,然而,结果是,一些主客观方面的偶然因素使他在方法执行过程中出现了必然的偏差,时间的急迫感和他对方法的迷信让他反复妥协和折中,最后,他做出的作品不伦不类,远远赶不上最初使用简单方法的人。当然生活中也有一类无作为的人—即便珍食美馐摆于面前,也不愿着筷箸,最后被饿死。此刻,我想到了马克思的一句话“批判的武器不能代替武器的批判”,借此,送给诸位。
      考试和算法设计精髓一样:
      时间消耗越少,一般空间消耗越大,存储越冗余
      空间消耗越少,一般时间消耗越大,计算越冗余
      空间和时间的消耗如果都降低的话,人的智力和脑力消耗越大,包括人思考所用的时间和记忆力。
      总之,三者无法 同时降低,可能有人要问这三句话有什么意义?其实,这三句话的意思就是:其他一个或两个因素的冗余在可以接受的幅度内,降低另两个或一个因素的代价。本质是折中取舍,如何取舍取决于你的目的。人设计高效的算法是需要很大代价的,但是,高效算法一旦被发明,低廉且容易的大批量技术复制让它的整个成本降低,而且,复制的数量越庞大,整体成本越低,当你在今天使用一个看似简单而且高效的算法时,你可曾想过此前有很多人为此付出了巨大的代价和花费? 
      这三句话的现实意义就是,在考试中,你想提高解题速度,你只能在复习中记忆更多的常识,知识和结论。你想巧妙的解决问题,那么意味着你在考试时需要付出更多时间和脑力用于的思考。所以唯一可取的方法是:复习中记忆掌握,考试中快速计算。
      这三句话的现实意义还有,在记忆时,必如记忆中间结论和单词,冗余永远不是好的记忆方法,因为如果你为了记住A,必须记住相关的B,那么B怎么记忆呢? 由B该如何联想到A呢 ? 你记忆的冗余信息越多,说明你遗忘的几率越大,因为,联系中的任意一环都是你记忆的薄弱部分。此外冗余必然引起信息的不一致性,你还得解决不一致性带来的问题,总之,冗余作为存储本质及其精髓而言,对人和计算机都非常关键!请注意,这里的冗余只是不必要的冗余,如俞敏洪的联想记忆,就是这种非常愚蠢做法的明证。那么,该如何记忆呢?最好的方法莫过于降低冗余,改善存储结构。抽象与具体,归纳与演绎,分析与综合,对比与类推,分类细化与拓沿一般,这是人的思维独到之处,从自个思维模式着手,发现你最擅长的一面是什么?(比如本文作者相对比较擅长分析,抽象,类推三种),从你自身出发,选择适合你的方法。比如:词根+词缀记忆这个方法就是好的方法,首先,它降低了记忆的冗余;其次它采用二维存储结构比一维更便于记忆。
     我还想谈一点我对考试的看法:知识是冗余的常识,复习应该是一个超集合,考试只是这个超集合的子集的幂集。
     对于数据结构和算法,我认为:
     数据结构其实就是人的头脑中的三种逻辑模式(先后关系[线],层次关系[树],交互关系[图])如何用计算机存储模式(顺序存储[冯诺依曼机的特点]和链接存储[间接寻址])来实现,在此过程中需要考虑两个问题:一,这种存储如何和人头脑的思维达到融合,方便人解决问题。二,数据存储的目的和意义在于数据访问,数据访问决定数据存储,因此访问效率和存储效率必须折中取舍。
     至于,算法,其实是计算机解题模式,无非是存取,运算,顺序执行,跳转,迭代和递归的有限步骤。
     我推荐17个算法,请注意,如果你熟悉这17算法的话,在考试中,就可以写出相对较好的算法。考试中的算法的最优解的复杂度是O(logn)级,这些算法可以帮助你写出O(n)或者O(nlogn)的解法。考试时间很关键,一般,你没有过多的时间思考最优解,你给出线性的算法就已经足够了
,失之东隅,收之桑榆。
    算法如下:
    线形2个:   
           1.将两个有序表合并为一个表,这个算法的变种很多,可以是链表,顺序表。涉及集合运算,
              归并排序,字符串处理。
           2.将一个顺序表的元素重新划分,左边的较小,右边较大。涉及快速排序,求字符串的逆串。
   树形9个: (注意:有些可以实现,有些实现不了,可以拿来思考)
           3-5.前序线索化,递归实现,栈模拟递归,非栈式迭代实现。
           6-8.中序线索化,递归实现,栈模拟递归,非栈式迭代实现。
           8-11.后序线索化,递归实现,栈模拟递归,非栈式迭代实现。
   图形6个: (注意:至少会画表格,写出算法执行的逐个步骤)
           12:DFS
           13:BFS
           我强烈推荐大家做一些走迷宫的编程(Maze),DFS和BFS都可以实现,好好比对一下。          
           14.MST:prim,kruskal
           15.short path:Dijkstra ,Floyd
           16.AOV:拓扑排序的DFS,BFS实现
           17.AOE:关键路径
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息