首页 > 其他分享 >4.12 三分法学习笔记

4.12 三分法学习笔记

时间:2023-04-12 10:24:08浏览次数:56  
标签:三分法 4.12 rmid db 笔记 单调 lmid 最值

三分的思路和二分有一点像。正好这两天数学在学函数的单调性,所以感觉还不错。但是三分法出题似乎有一定的局限性,所以应用并不广泛,但是还是需要学习一下。


P3382 【模板】三分法 一个洛谷三分的板子。三分求单峰函数极值。

三分适用的情况:有唯一的最大值,满足最大值左侧严格单调递增,右侧严格单调递减(或左减右增)。强调严格单调,这样在确定最值是才能判断最值的位置,否则三分法不能缩小左右边界。

 此处以该题为例,即该单峰函数存在最大值,最大值左侧严格单调递增,最大值右侧严格单调递减。

不妨将当前所找的区间 [l, r] 用 lmid 与 rmid 划分为三个区间,lmid < rmid。 此时 f(lmid) > f(rmid) 会有两种情况:1.lmid 与 rmid 均在最值右侧;2.lmid 在最值左侧,rmid 在最值右侧。 会发现无论是哪种情况,rmid 都在最值的右侧,那么我们就可以将所寻找的区间缩小,即使 r = rmid。同理,当 lmid > rmid 时使 l = lmid。 其他没什么需要特别注意的。鉴于本题涉及到浮点数,所以关注一下判断两个浮点数相同时,相减,若差小于一个很小的数即可(精度一般 1e-6 或 1e-7 就行)。
#include<bits/stdc++.h>
#define db double
using namespace std;
const db eps = 1e-7;
int n;
db a[15];
db l, r, midl, midr;
db f(db x)
{
    db s = 0;
    for(int i = n; i >= 0; i -- ) s = s * x + a[i];
    return s; 
}
int main()
{
    scanf("%d%lf%lf", &n, &l, &r);
    for(int i = n; i >= 0; i -- ) scanf("%lf", &a[i]);
    while(r - l > eps)
    {
        midl = l + (r - l) / 3.0;
        midr = r - (r - l) / 3.0;
        if(f(midl) > f(midr)) r = midr;
        else l = midl;
    }
    printf("%.5lf", l);
    return 0;
}

 

标签:三分法,4.12,rmid,db,笔记,单调,lmid,最值
From: https://www.cnblogs.com/Moyyer-my/p/17308879.html

相关文章

  • 11-键盘录入笔记
    一,键盘录入涉及到的方法如下:​ next()、nextLine()、nextInt()、nextDouble()。1)next()、nextLine():可以接受任意数据,但是都会返回一个字符串。比如:键盘录入abc,那么会把abc看做字符串返回。​ 键盘录入123,那么会把123看做字符串返回。代码示例:Scannersc=newScanner(System.in);......
  • 语雀笔记备份导出
    参考:https://www.cnblogs.com/ssslinppp/p/17020303.htmlhttps://github.com/yuque/yuque-exporterhttps://zhuanlan.zhihu.com/p/582287220https://www.yuque.com/duzh929/blog/ocffqghttps://www.yuque.com/hijiaobu/datalife/onf6sy#BKajf现在需要超级管理员,若是......
  • C++ Traits的笔记
    traits意思为特性,特点在C++中用于提取类型信息#include<type_traits>type_traits库中有std::is_same可以判断两个类型是否相同先看一下使用模板提取类型信息,就是多做一层封装在使用模板的过程中假设函数中有必要声明一个变量,要和迭代器所指向的对象类型相同template<class......
  • Cadence应用笔记:修改PCB层叠
    说明软件设计PCB时默认是设置为两层板,如果要添加层叠,可以打开Crosssection选项打开后选择add新层即可,添加后默认是dielectricPP层,需要修改为Plane平面层(或者conductor走线层,两者并无本质区别)其他的一些参数为板厚之类设置,可以用来做阻抗计算,但实际还是以打板用的材质为准......
  • 【论文阅读笔记】Learning to Prompt for Continual Learning
    Create_time:April27,20225:21PMEdited_by:HuangYujunOrg:GoogleResearch,NortheasternUniversityLearningtoPromptforContinualLearning[38]LearningtoPromptforContinualLearning.pdf问题:最终输入transformerencoder的序列长度是怎么组成的,原始......
  • 【论文阅读笔记】Distiling Causal Effect of Data in Class-Incremental Learning
    Author:HanwangZhang,XintingHuCreate_time:April24,202211:01AMEdited_by:HuangYujunPublisher:CVPR2021Org:NanyangTechnologicalUniversityDistilingCausalEffectofDatainClass-IncrementalLearning1.Contribution这是一篇从因果角度思考持续......
  • 【论文阅读笔记】iCaRL: Incremental Classifier and Representation Learning
    Author:AlexanderKolesnikovKey_words:nearest-mean-of-exemplarrule,prioritizedexamplerselection,representationlearningCreate_time:September11,20213:06PMEdited_by:HuangYujunPublisher:CVPR2017Score/5:⭐️⭐️Status:FinishediCaRL:Incre......
  • ros-python学习样例笔记
    1.通信基本原理介绍待写2.三种通信方式的程序样例(python版)2.1topic通信方式(非自定义和自定义)2.1.1创建工作空间和topic功能包在ubuntu中打开命令行,输入下面的命令创建并初始化工作空间,一定要回到XXX_ws的目录下初始化工作空间#创建工作空间文件夹my_ros(一般命名......
  • 学习笔记396—自定义Docker镜像推送到Docker Hub实战
    自定义Docker镜像推送到DockerHub实战云原生探索的必经之路—容器化,而容器化目前最主流的技术莫过于Docker了,因为之前也大量的输出过Docker相关的技术博客,如果感兴趣的话可以直接访问专栏:​​《探索云原生》​​,按需学习哦。这篇文章还是从Docker入手,从0开始讲述下如何将自己的D......
  • #yyds干货盘点 前端小知识点扫盲笔记记录2
    前言大家好我是歌谣今天继续进行前端知识的一些总结想加入前端巅峰交流群私信我innerHTML和innerText的使用<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge">......