7月23日训练总结
1.分形但其实还是递归的思想,递归的用途很多,无论是搜索还是其他的方面,不断调用自身讲一个大问题转化为一个小问题,最后小到可以求解的程度,就是递归。
2.前坠和与差分,一个数组的差分的前缀的差分就是他自己,同样的差分的前缀和也是他自己,前缀和与差分比较适用于静态查询,而线段树更注重于修改,而很多静态查询借助差分与前缀和能够有效的降低时间复杂度。
3.二分法
之前二分会,但是通过这次的学习,明白了二分的四种基本套路:
整数域上的二分:
while(l<r) {
mid=(l+r+1)>>2;
if(Panduan(mid)<=Tiaojian) l=mid;//mid符合条件,则比mid大的可能符合条件
else r=mid-1;//mid>tiaojian 则比mid 小的可能符合条件;
}
while(l<r) {
mid=(l+r)>>2;
if(Panduan(mid)>=Tiaojian) r=mid; //因为mid符合条件,且比mid小的暂时都符合条件;
else l=mid+1;//Panduan[mid]<Tiaojian,因为mid不符合条件,且大于mid 的可能符合条件;
}
实数域上的二分:
const double 1e-(K+2)比题目要求精度多两位
while((l+eps)<r){
double mid=(l+r)/2;
if(Panduan(mid)<=tiaojian) l=mid; //或参考上文,寻找合适条件;
else r=mid;
int n;//设置循环次数
for(int i=0;i<n;i++)
{
double mid=(l+r)/2;
if(Panduan(mid)<=tiaojian) l=mid; //或参考上文,寻找合适条件;
else r=mid;
}
4.排序算法
除了比较排序之外,还接触桶排序,与基数排序,排序的方式不应该仅限于sort,部分题目自己手写的排序的可能起到更好的作用。
5.中位数
比较经典的问题:货仓选址,均分纸牌,环形均分纸牌。可以转化为中位数。