分而治之(divide and conquer,D&C)

分而治之并不是一种算法,而是一种解决算法的思想(一种递归的算法)。
分而治之单充的理解起来可能有些困难,下面大概的解释一下:
有一个这样的需求,我有一个长方形,需要分割成均匀的正方形,而且分割成的正方形要尽可能的大。
大家可以想一下如何实现这个问题?(思考十几秒)
下面我们用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)

      快速排序算法的思想便是分而治之,后续单独说明快速排序的算法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值