红黑树
最近在看算法导论 (CLRS),又产生了一些学习方面的思考。
起因为 CLRS 13 章讲红黑树,说实话,讲的非常屎,一上来就是硬塞概念,硬塞算法。直接将结论给出,中间不带一点思考过程,甚至解释都十分绕,实在是让人看不下去。
感觉 CLRS 过于强调严谨,这或许是好事,但却极大的牺牲了一本教科书应有的简洁明了。我给它的定位是 Textbook, 而不是 Reference Book,但就目前看来,还是更 Reference 一点。
与此同时,个人认为 CLRS 还缺少的就是直觉上的理解,大概也是因为过于强调严谨,使得一些可以在直觉上较好理解的问题,解释起来非常复杂,阅读起来非常痛苦。
批判完了,我虽然怒喷 CLRS,但我也是在看它来学算法,除了难,整体其实还挺好。
不过至少在红黑树这一章上,CLRS 不如同行 Algorithm 4th Edition(4E)。4E 在讲红黑树之前,先讲了 2-3-4 Tree,这正好就是红黑树的原始论文中提到的演化过程(之一),缺少了这一章直接上手红黑树,总有种跳跃和割裂感。除此之外,4E 中的红黑树也是新的变种 Left Leaning Red Black Tree ,相对来说代码更简洁,思维更直接,整体简单不少。
红黑树之外
上面提到的问题,更加 generalize 一点,在日常的学习中,我觉得也是相通的。现在的很多学习资料(包括但不限于高数教科书,不限国内外,国内尤甚),都是直接给出结论,然后就是一个结论跟着一个结论,中途没有任何铺垫,没有任何思考过程,学习变成了记忆力的比拼。
当然,和朋友讨论这点,他反驳 “学习中记忆就是占大头,思维也不可能一下看书就能看出来,是长期锻炼的结果。”
我不否认这点,我还十分认同。但我想,作者在想出这么个结论前,肯定是想破了脑袋,试验了无数种方法最终才憋了个可行的 approach 来解决问题。那么这个过程中,思维过程我认为比结论更重要。只知道结论,却根本不知道为什么要这么做,我只知道这么做可以,但我忘了之后一定不能复现,那我学的是什么?
其实我自己也有类似的经历,自己想了很久的想法,绕了很多远路才想出的结论,捋直了说出来,却有点变味了,缺少了很多真正想表达的。想要把自己的想法表达出来,确实不是一件容易的事。
说到结论,最近一次数学课来晚了,坐在最后一排,基本没听,同时也基本没听懂。但是我发现,我只要按照书上给的结论,乱套公式,最后就可以解题了,完全不需要知道为什么,实在是可悲,可以说是一种投机,为此难过了一整天,却也没有搞懂的意愿。。。。
大一上后期学的一些东西,真要说起来,完全没搞懂。但我知道只要这样写题就好了,现在大概已经忘了,可我想学的不是写题,是知识,是数学。。。
我的一位老师有个观点很好 “学校一直在鼓励学生创新,但你问学生知道旧吗,大概率是不知道的”。可笑,但一想我自己也是这种人,笑不出来。
说起来,有时候给出了结论,你都证明不了它的正确性,也是可悲啊。
想起来,有句对国内数学教材的批评是这样的 ”国内教材的优点是篇幅短,缺点也是篇幅短“。很多人都不喜欢国外的砖头书,但我却很喜欢。
一些解决方法
目前能想到的解决方法就是找原出处,看作者最开始是怎么想到,也就是在部分英文维基中的 History 板块,因为维基强调要有来源,找出处相对轻松。看看原作者的解释,或许会更有收获。可惜自身水平不高,很多时候读不懂啊。
还有一种方法就是换资料来源,中文,英文,大学课程,网上资料。网络资源这么丰富,可不要在一棵树上吊死了。