谈谈分治算法思想

分治算法思想

分治算法其核心思想是“分而治之”,其是将一个大问题分解成多个相同模式的小问题,然后递归的求解各个小问题,再将小问题的解合并成大问题的解。我们一般可以按如下的思路实现:
1、将一个大问题分解成多个相同模式的小问题。
2、递归的求解各个小问题。
3、小问题的解合并成大问题的解。
使用分治算法需要满足如下的条件:
1、一个大问题能够分解成多个相同模式的小问题。
2、这个分解过程存在终止条件,也就是当问题的规模足够小的时候,应该能够直接求解。
3、各个子问题直接不存在相关性,也就是某个子问题的求解过程不能影响其他子问题。
4、各个子问题的解,能够合并成大问题的解,这个合并过程不能过于复杂,否则分治算法就没有意义了。

例子

分治算法思想的应用是非常广泛的,并不仅限于指导编程和算法设计。它经常用在海量数据处理的场景中。
比如,给 10GB 的订单文件按照金额排序这样一个需求,看似是一个简单的排序问题,但是因为数据量大,有 10GB,而我们的机器的内存可能只有4GB 这样子,无法一次性加载到内存,也就无法通过单纯地使用快排、归并等基础算法来解决了。
我们可以先扫描一遍订单,根据订单的金额,将 10GB 的文件划分为几个金额区间。比如订单金额为 1 到 100 元的放到一个小文件,101 到 200 之间的放到另一个文件,以此类推。这样每个小文件都可以单独加载到内存排序,最后将这些有序的小文件合并,就是最终有序的 10GB 订单数据了。

总之,要解决这种数据量大到内存装不下的问题,可以利用分治的思想。将海量的数据集合根据某种方法,划分为几个小的数据集合,每个小的数据集合单独加载到内存来解决,然后再将小数据集合合并成大数据集合。实际上,利用这种分治的处理思路,不仅仅能克服内存的限制,还能利用多线程或者多机处理,加快处理的速度。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aidanzheng

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值