一、算法与问题
算法是解决问题的一系列步骤;
理解问题,设计算法的一般过程:
解决问题的时候可以首先考虑蛮力法,因为蛮力法一般都能解决,只是效率比较低。使用蛮力法解决问题之后可以再考虑使用其他算法思想进行优化。在使用蛮力法的时候如果解决起来比较费力,可以再次思考一下问题,看看能不能找到什么规律,然后,在该规律之上再求解。
蛮力法往往需要从头到尾遍历所有的可能,而且有时候一个问题可能会有好几种遍历策略,有的策略能够得到问题的解,有一些不能导出最终问题的解,所以,使用蛮力法的时候遍历策略的选择往往是很重要的。好的遍历策略甚至能起到跟贪婪,动态规划策略一样的作用,从这个意义上来说贪婪,动态规划,回溯,分支界限也算是一种蛮力法,只不过是聪明的蛮力法。
优化的思路有以下3个方向:
1、蛮力法--->贪婪,动态规划--->回溯,分支界限
2、分治,减治,变治
3、时空权衡
二、蛮力法
蛮力法是一种简单直观的解决问题的办法,常常直接基于问题的描述和所涉及的概念。蛮力法所能解决的问题域也是最广的,但是效率往往不高;
使用蛮力法的算法有:
1、冒泡排序,选择排序
2,、顺序匹配
3、穷举法
三、分治法
分治法设计步骤:
1、将问题实例划分为同一问题的较小的实例,最好拥有同样的规模;
2、求解较小的实例;
3、合并较小问题的解;
分治法算法:
1、归并排序,快速排序
2、折半查找
3、二叉树遍历(前序,中序,后序)
4、大整数乘法和矩阵乘法的分治