分而治之并不是一种算法,而是一种解决算法的思想(一种递归的算法)。
分而治之单充的理解起来可能有些困难,下面大概的解释一下:
有一个这样的需求,我有一个长方形,需要分割成均匀的正方形,而且分割成的正方形要尽可能的大。
大家可以想一下如何实现这个问题?(思考十几秒)
下面我们用D&C的策略来实现一下,上面说到D&C是递归的。那么,首先需要递归的两个步骤:
a)找出基线条件(尽可能简单的条件)
b)不断的将问题分解,直到达到基线条件
那么我们现在可以讨论上面的长方形问题了,例如长方形的长为640,宽为400
不断的切割长方形,直到长方形的长为宽的倍数,第一次未640-400,形成新的长方形(400,240),第二次继续切割形成(240,160),第三次切割(160,80),所以分割成的最大正方形边长为80.
代码如下:
#长方形分解成等量正方形(尽可能大的正方形)
#x为长方形的长,y为长方形的宽
def divide(x,y):
if x % y == 0:
return y
else:
if (x-y) > y:
return divide((x-y),y)
else:
return divide(y,(x-y))
m = divide(640,400)
print(m)
快速排序算法的思想便是分而治之,后续单独说明快速排序的算法。