学习笔记——分治策略

本文介绍了分治算法的基本思想,包括其伪代码表示,并探讨了如何通过代数变换和预处理减少计算量。快速排序和选择问题作为典型应用被提及,特别是选择最大、最小、第k大等操作。此外,文章还阐述了二分查找及其适用条件,强调了解决方案的单调性要求。最后,讨论了递归策略在解决问题中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法思想

一般的分治算法Divide-and-Conquer的伪码如下:
  Divide-and-Conquer(P)

  1. if |P|≤c then S(P)   //问题规模小于c,停止递归
  2. divide P into P1,P2, … ,Pk
  3. for i=1 to k do
  4.   yi←Divide-and-Conquer(Pi)    //递归求解每个子问题
  5. return Merge(y1,y2, … ,yk)    //把子问题的解进行综合

改进分治算法的途径

  1. 通过代数变换减少子问题的个数(较难实现)
  2. 利用预处理减少递归内部的计算量

典型应用

  1. 快速排序算法
  2. 选择问题
    • 选最大/最小
    • 选第二大
    • 选第k大
    • 选中位数
  3. n-1次多项式在全体2n次方根上的求值

补充

二分答案的使用要求:

  1. 答案在一个固定的区间内
  2. 难以通过搜索来找到符合要求的值, 但给定一个值你可以很快的判断它是不是符合要求
  3. 可行解对于区间要符合单调性, 因为有序才能二分嘛
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值