算法设计 - 概述
如需转载请注明出处:http://blog.csdn.net/qingyixiaoxia
熟知的算法设计思路有五类:分治,回溯,分枝限界,动态规划,贪心。本文作为一个对算法设计的概述,着眼于讨论如下几点:其一,算法界的知识图谱;其二,算法设计思路的引入;其三,枚举决策类算法的解空间树;其四,枚举决策类算法的分类;其五,算法的递归实现和递推实现;其六,如何选择一个算法设计思路;
一 算法界的知识图谱
讨论算法设计思路前,首先我们澄清一下算法相关的知识结构,有三大领域:
这三大领域,互相关联,又相对独立。线/树/图的操作算法,着眼于数据基本操作的性能,有的操作算法也运用了经典的算法设计思路。查找和排序算法,着眼于数据查找和排序的性能,具体的方法和数据结构息息相关,有些方法也同样运用了算法设计思路。而一般的算法设计思路,提供了一些通过运算来求解问题的思路,可以应用于更为广泛的问题。在下面的讨论中,我们focus于典型的几大类算法设计思路。
二 算法设计思路的引入
算法设计,其实是提供了几种通过运算来解决问题的思路,或曰提供了几种通过运算来解决问题的思路模型。我们求解一个问题时,有两类基本方式可以选择。第一类,仔细观察问题特征,并基于其特征,找到一个巧妙的角度来诠释问题,进而得到一个可以通过较少运算来得到答案的思路。第二类,通过暴力运算,来求解得到问题的答案。第一类思路固然很好,但是有的问题没有什么巧妙的思路可以运用,此时唯有通过暴力运算来求解之。
运用算法解决问题,也即通过暴力运算来解决问题,基本思路是不断降低问题的规模,把大问题逐步缩小为小问题,再反过来用较小问题的解求得到较大问题的解。降低问题规模的基本思路有两大类:分割,枚举。