当前位置:嗨网首页>书籍在线阅读

06-算法学习瓶颈

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

1.5 算法学习瓶颈

很多人感叹:算法为什么这么难!

一个原因是,算法本身具有一定的复杂性,还有一个原因:讲得不到位!

算法的教与学有两个困难。

(1)我们学习了那些经典的算法,在惊叹它们奇妙的同时,难免疑虑重重:这些算法是怎么被想到的?这可能是最费解的地方。高手讲,学算法要学它的来龙去脉,包括种种证明。但这对菜鸟来说,这简直比登天还难,很可能花费很多时间也无法搞清楚。对大多数人来说,这条路是行不通的,那怎么办呢?下功夫去记忆书上的算法?记住这些算法的效率?这样做看似学会了,其实两手空空,遇到一个新问题,仍然无从下手。可这偏偏又是极重要的,无论做研究还是实际工作,一个计算机专业人士最重要的能力就是解决问题——解决那些不断从实际应用中冒出来的新问题。

(2)算法作为一门学问,有两条几乎平行的线索。一个是 数据结构 (数据对象):数、矩阵、集合、串、排列、图、表达式、分布等。另一个是 算法策略 :贪心、分治、动态规划、线性规划、搜索等。这两条线索是相互独立的:同一个数据对象(如图)上有不同的问题(如单源最短路径和多源最短路径),就可以用到不同的算法策略(例如贪婪和动态规划);而完全不同的数据对象上的问题(如排序和整数乘法),也许就会用到相同的算法策略(如分治)。

两条线索交织在一起,该如何表述?我们早已习惯在一章中完全讲排序,而在另一章中完全讲图论算法。还没有哪一本算法书很好地解决这两个困难,传统的算法书大多注重内容的收录,但却忽视思维过程的展示,因此我们学习了经典的算法,却费解于算法设计的过程。

本书从问题出发,根据实际问题分析、设计合适的算法策略,然后在数据结构上操作实现,巧妙地将数据结构和算法策略拧成了一条线。通过大量实例,充分展现算法设计的思维过程,让读者充分体会求解问题的思路,如何分析?使用什么算法策略?采用什么数据结构?算法的复杂性如何?是否有优化的可能?

这里,我们培养的是让读者怀着一颗好奇心去思考问题、解决问题。更重要的是——体会学习的乐趣,发现算法的美!