分治算法

本文详细介绍了分治算法的原理和步骤,强调了分治策略中子问题的独立性和合并结果的开销考量。同时,列举了分治在查找(如二分查找)、排序(如快速排序)和经典问题(如汉诺塔)中的应用,并通过实例展示了二分查找和排序的代码实现,验证了分治算法的有效性。
摘要由CSDN通过智能技术生成

分治问题学习笔记

一.分治策略的思想

​ 分治–分而治之,将某问题,分为n个子问题,对n个子问题逐个击破,再对子问题处理结果进行合并,得到最终问题的解。

二.步骤

:将问题分成合适个数的子问题(根据问题的规模来考虑子问题的个数,既要考虑到并行计算的 能力,也要考虑结果合并处理的开销);

:将小规模的子问题逐个击破(这一步可以采用 多线程并行计算提高运算速度);

:将解决后的子问题进行合并,得到最终问题的解。

三.注意问题

​ 1.分成子问题的数量,需要考虑子问题结果合并的开销;

​ 2.分成的子问题是否独立,子问题之间不包含公共的子子问题,不可以不同的子问题间强联系;

​ 3.原问题是否可以分解,以及分解的合适范围。

四.分治算法应用

​ 1.查找 :二分查找,求最值,大整数乘法等;

​ 2.排序 :合并排序,快速排序等;

​ 3.经典问题 :最接近点对问题,循环赛日程表,汉诺塔问题。

五.应用举例

​ 1.二分排序:

​ 对于给定的List序列,对其从小到大进行排序,得到升序序列

​ 代码实现:

#-*- coding:utf-8 -*-
#Merge函数功能是将子问题进行合并
def Merge(L, R):
    i = j = 0
    list = []
    while(i < len(L) and j < len(R)):
        if L[i] <= R[j]:
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值