4知其所以然.pdfVIP

  • 3
  • 0
  • 约6.54千字
  • 约 5页
  • 2017-06-06 发布于河南
  • 举报
4知其所以然

知其所以然(以算法学习为例) 其实下文的绝大部分内容对所有学习都是同理的。只不过最近在正儿巴经地学算法,而后者 又不是好啃的骨头,所以平时思考总结得就自然要比学其它东西要多一些。 问题:目前几乎所有的算法书的讲解方式都是欧几里德式的、瀑布式的、自上而下的、每一 个推导步骤都是精准制导直接面向目标的。由因到果,定义、引理、定理、证明一样不少, 井井有条一丝不乱毫无赘肉。而实际上,这完全把人类大脑创造发明的步骤给反过来了。看 起来是阳关大道,实际上车马不通。 而对读者来说,这就等于直接告诉你答案做法了,然后让你去验证这个答案做法是可行 成立的。而关于答案做法到底是怎么来的,从问题到答案之间经历了怎样的思维过程。却 鲜有书能够很好的阐释。就我有限的阅(算法)书经验,除了波利亚的《怎样解题》还算合 格之外(也并非最理想),其它的(包括有名的《算法导论》、《如何解题:现代启发式方法》、 《Algorithms》、《编程珠玑》,甚至TAOCP——公平地说由于高老大对算法领域历史了解得非 常通透,所以许多地方能够从原始脉络来讲述一个问题,譬如令人印象深刻的从竞赛树到堆 的讲解就寥寥一页纸道出了堆这个数据结构的本质来,而像刚才列的几本有名的书却都没有 做到),在思维的讲述上都算不上合格(当然不是说这些书没有价值,作为知识性的参考书 籍,它们将知识整理出系统结构,极大的便利了知识的掌握,就像《什么是数学》所做的工 作一样),为什么我这么说呢,因为我发现每每需要寻找对一个算法的解释的时候,翻开这 些书,总是直接就看到关于算法逻辑的描述,却看不到整个算法的诞生过程背后的思想。 我们要的不是相对论,而是诞生相对论的那个大脑。我们要的不是金蛋,而是下金蛋的那只 鸡。 Update(2008-7-24): 收到不少同学的批评,想来这个开头对一些著作的语气过重了,实际上, 注意,我完全不否认这些著作的价值,我自己也在通过阅读它们来学习算法,并且有很多收 获。这篇文章更多的只是建议除了阅读这些著作之外还需要做的功课。此外,对于这类知识 讲述(欧几里德)方式的批判西方(尤其是在数学领域)早就有了,早在欧拉和庞加莱的时 候,他们俩就极其强调思维的传授,欧拉认为如果不能传授思维,那数学教学是没意义的。 而庞加莱本人则更是对数学思维有极大的兴趣和研究(我前阵子在讨论组上还转载了一篇庞 加莱的著名演讲,就是说这个的,参见这里)。我只是在说目前的算法书没有做到思维讲述 的层面,因此建议阅读这些书之余应该寻找算法的原始出处,应该寻根究底,多做一些功课, 知道算法到底是怎么诞生的,并且我说明了为什么应该知其所以然,有哪些好处(见下文), 我还给了几个例子譬如红黑树作者讲红黑树的,g9 讲后缀树的,以及Knuth 讲heap 的。唉, 其实挺正统的观点,授人以渔,不管是东方西方都有类似的古老谚语。而我只是从认知科学 的角度加了点解释,windstorm 称之为“解释文”。而已。可惜被开头的语气搞砸了,算了, 既发了也就不改了。 为什么会这样,其实是有原因的。 我们在思考一个问题的过程中有两种思维形式: •联想:这种思维某种程度上可以说是“混乱”的(虽然从一个更根本的层面上说是有规则 的),所谓混乱是指很多时候并不确定联想到的做法最终是否可行,这些联想也许只是基于 题目中的某个词语、语法结构、问题的某个切片、一些零星局部的信息。这个过程是试探性 的。最后也许有很大一部分被证明是不可行的。很多时候我们解决问题用的都是这种思维, 简言之就是首先枚举你关于这个问题能够想到的所有你学过的知识,然后一一往上套看看能 否解决手头的问题。这种思维方式受限于人脑联想能力本身的局限性。我在《跟波利亚学解 题》中就提到了几个例子。联想本身需要记忆提取的线索,所以受到记忆提取线索的制约, 如果线索不足,那怎么也联想不起来。而提取线索的建立又取决于当初保存记忆的时候的加 工方法(《找寻逝去的自我》里面有阐述),同时,面对一个问题,你能够从中抽取出来的联 想线索又取决于你对问题的认识层度/抽象深度,表浅的线索很可能是无关的,导致无效的 联想试错(《Psychology of Problem Solving》里面有阐述)。总之,联想这个过程充满了错误 的可能。 •演绎 归纳:演绎归纳是另一种思维形式。它们远比联想有根据。其中演绎是严格的,必 然的。归纳也是有一定根据的。在面对一个问题的时候,我们有意无意的对问题中的各个条 件进行着演绎;譬如福尔摩斯著名的“狗叫”推理——狗+生人=吠叫 昨晚狗没有叫 = 那个人是熟人。就是一个典型的对问

文档评论(0)

1亿VIP精品文档

相关文档