算法思想
常用的算法思想有:
- 分治算法
- 动态规划算法
- 贪心算法
- 回溯算法
- 分支限界算法
分治算法
分治算法的思想是,将一个大问题,拆解成多个小问题。各小问题间彼此独立。
举一个经典场景的例子,求一亿个数中出现次数前10的数。
直接求解的方式是比较困难的:
遍历一亿个数,记录每个数出现的次数,然后排序求前10.
这种解法占用的内存是及其大的。
分治思想解法
把一亿个数 分成10000组,求各个组的出现次数的前十 就比较容易了
然后把10000个组 通过两两合并的方式,最终得到出现次数的前十
:
关键在于分组时,相同的数不可以存在于多个组中。 也就是保证各小问题彼此之间是独立的。
总结:
分治算法的前提是,
- 该大问题,可以拆解成多个独立的小问题。(独立是指此小问题的解不会对其他问题产生影响)
- 大问题的解,就存在于各小问题的解之中。或者由各小问题的解组成。
错误示范:
草原上有1000只羊,20只狼,羊的繁殖速度是2倍,狼的繁殖速度是3倍,狼每年吃掉10只羊,问3年后,分别有多少狼和羊?
这个问题就不可以拆解成 分别计算羊和狼。因为狼的计算过程会造成羊的减少。