算法创新能力随想

很多强好奇心的算法设计学习者在面对现成的精妙算法时总会有一样的疑问:“如此精妙,怎样想出来的?如果给我一个新问题,我能设计出如此精妙的算法来吗?”。这个问题好比如问:“这首歌这么好听,我能作出来吗?”。换句话说就是问:“我有算法设计的创新能力吗?”。要回答这个问题,得先回答两个更优先的问题,第一,如何理解创新;第二,算法设计者的设计能力是一种什么样的能力,有什么内容。

如何理解创新

创新能力属于较高级别的能力层次,按布卢姆的能力层次来看,应该要比综合应用能力更高一级的能力,也就是分析和综合。按我给出的比喻,分析(Analysis)+综合(synthesis) = 再学习 = 创新能力。那么创新能力层比应用能力高出些什么东西来呢?新!其实综合应用能力也会涉及分析和综合的思维操作,但思维操作的内容一般都是旧的已经熟悉的对象,相反创新思维中必有新事物参与思维推理。新事物来自新需求。

布卢姆的能力层次及其比喻

布卢姆:知识(Knowlwdge)、领会 (Comprehension)、运用(Application)、分析(Analysis)、综合(synthesis)和评价 (Evaluation)。

  • 知识(Knowlwdge) = 判断题
  • 领会 (Comprehension) = 选择题
  • 运用(Application) = 应用题 = 模仿
  • 分析(Analysis)+综合(synthesis) = 再学习 = 创新能力
  • 评价 (Evaluation) = 元认知

算法设计者的设计能力触及的内容

如果一个从来没有接触过算法的人,让他创新出使用分治法的算法是比较困难的;但是如果有一些编程基础,创新出比较直观的增量法算法还是比较可能的。这说明算法设计创新需要前提和基础,那么这个前提基础是什么呢?在这里特别要指出算法设计中的两种能力——算法应用与算法创新,因为二者在具体应用中的界限是很模糊的,设计者本身的能力很难量化,算法问题于设计者的难度亦很难量化。算法创新的前提和基础就是算法应用能力,顺而推之,算法应用的前提和基础是算法领会和知识。必须明白的是,前提只是必要条件,不是充分条件,创新过程涉及的新事物始终是未知的,创新的本质具有艺术性。

算法设计的学习需要重发明轮子一遍吗?

我现面对一个问题,对于现成的排序算法,我是直接研读现有的代码,还是自己尝试重发明轮子一遍?显然后者是最好的,但现我没有太多的时间,能否折中一下?再说,重发明轮子一遍的好处在什么地方?请看如下描述:

知识是能力(力量),知识起始于经验假设(直接或间接的),结果于理性验证。当我们阅读算法代码时,是一种被动接受经验的过程;这个过程对产生能力的价值是不如主动创建经验大;其实这二者就像阅读和写作的关系,没有人只写作而不阅读的。问题不在这里,问题的关键是我们为何要阅读,为何要写作。如果你只想掌握更多的事实知识,习得识记,意会和[基本应用]的能力,请不要犹豫地选择阅读并且思考和总结;否则,如果你当下面临创新的需要,需求习得某种分析和综合各种事实知识的能力,请选择细细创新写作。

再回到上面关于算法应用与算法创新的描述,如果想获得算法应用能力,在对算法问题难度不大时有设计能力,只研读现有代码即可。当然研读不应只是表面的识记和理解,应包括深入分析等元层次理解,为以后创新需要作准备。

裸男
Nakeman.cn 2023 Build by Gatsby and Tailwind, Deploy on Netlify.