算法图解学习笔记03:分而治之
分而治之概念
所谓“分而治之” 就是把一个复杂的算法问题按一定的“分解”方法分为等价的规模较小的若干部分,然后逐个解决,分别找出各部分的解,把各部分的解组成整个问题的解。
步骤如下:
- 分解(Divide):将问题分解为同一类型的子问题;
- 治理(Conquer):递归地解决子问题;
- 合并(Combine):合并子问题的答案,得出原问题的答案。
分而治之案例
本案例是算法图解上的一个案例。现在你要分割一块土地,从中找出最大的正方形,找出的正方形可以全部分割该块土地
下方是错误的分割方法
所以现在就需要用分治方法递归的处理该问题(为什么?因为分治方法本身就是递归的),而递归首先就要确定基线!最容易处理的情况是,一条边的长度是另一条边的整数倍。
所以,现在的问题就剩下如何将问题分解
具体编程的案例可见下篇博文——求最大公共子序列