每日c/c++题 备战蓝桥杯(洛谷P3382 三分法求极值详解)

洛谷P3382 三分法求极值详解

题目描述

P3382 三分法 要求在给定区间内寻找一个多项式函数的最大值点。题目保证函数在区间内先严格递增后严格递减(单峰函数),适合使用三分法求解。

算法原理

三分法核心思想

对于单峰函数,在区间 [ l , r ] [l, r] [l,r] 内每次选取两个试探点 m i d 1 mid1 mid1 m i d 2 mid2 mid2

  • f ( m i d 1 ) < f ( m i d 2 ) f(mid1) < f(mid2) f(mid1)<f(mid2),说明极值点在 ( m i d 1 , r ] (mid1, r] (mid1,r] 区间
  • f ( m i d 1 ) > f ( m i d 2 ) f(mid1) > f(mid2) f(mid1)>f(mid2),说明极值点在 [ l , m i d 2 ) [l, mid2) [l,mid2) 区间
  • 通过不断缩小搜索区间,最终逼近极值点

代码解析与优化

原始代码分析

用户提供的代码存在几个可优化点:

  1. 变量命名不清晰esp 数组应命名为 coeff 更直观
  2. 精度控制方式:固定比较 mid±0.000001 可能不够灵活
  3. 函数返回值设计fun 函数返回 0/1 的布尔逻辑可优化

优化后代码

#include <bits/stdc++.h>
using namespace std;int N;
double l, r;
double coeff[15] = {0};  // 存储多项式系数// 计算多项式在x处的值
double calculate(double x) {double res = 0.0;double x_pow = 1.0;  // 缓存x的幂次for (int i = 0; i <= N; ++i) {res += coeff[i] * x_pow;x_pow *= x;}return res;
}int main() {cin >> N >> l >> r;for (int i = N; i >= 0; --i) {cin >> coeff[i];  // 系数按降序输入}const double EPS = 1e-7;  // 精度控制while (r - l > EPS) {double mid1 = l + (r - l) / 3;double mid2 = r - (r - l) / 3;if (calculate(mid1) < calculate(mid2)) {l = mid1;} else {r = mid2;}}printf("%.5lf\n", l);return 0;
}

关键优化点说明

  1. 函数计算优化

    • 使用迭代计算代替 pow 函数,避免浮点精度问题
    • 时间复杂度从 O(N^2) 优化到 O(N)
  2. 精度控制改进

    • 引入 EPS 常量统一控制精度
    • 终止条件改为 r - l > EPS,更符合三分法收敛特性
  3. 三分点选取策略

    • 采用经典的三分点选取方式:
      mid1 = l + (r - l)/3
      mid2 = r - (r - l)/3
      
    • 保证每次迭代区间缩小比例恒定

注意事项

  1. 单峰性验证:题目保证函数为单峰函数,实际应用中需先验证
  2. 端点处理:当极值点恰好位于区间端点时,需额外判断
  3. 系数输入顺序:注意题目要求系数按降幂输入(与常规存储方式不同)

复杂度分析

  • 时间复杂度:O(N·log(1/ε)),其中 ε 为精度要求
  • 空间复杂度:O(N),仅需存储多项式系数

扩展思考

  1. 与二分法的区别

    • 二分法要求函数单调,三分法要求单峰
    • 三分法每次迭代减少 2/3 的搜索空间
  2. 应用场景

    • 概率分布中的最大似然估计
    • 经济学中的效用最大化问题
    • 工程优化问题中的参数调优

总结

三分法是解决单峰函数极值问题的有效方法,通过不断缩小搜索区间逼近极值点。本题实现时需特别注意:

  1. 浮点数计算的精度控制
  2. 多项式计算的效率优化
  3. 输入输出的格式要求

掌握三分法的实现原理,可以推广到更高维度的优化问题(如网格搜索法),是算法竞赛和工程实践中常用的数值优化技巧。

附:测试样例
输入:
3 -5 5
1 -8 22 -24 8
输出:
3.00000

该样例对应多项式 f ( x ) = x 3 − 8 x 2 + 22 x − 24 x + 8 f(x) = x^3 -8x^2 +22x -24x +8 f(x)=x38x2+22x24x+8,其极大值点确实在 x=3 处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Windows] 一键实现重复工作自动化zTasker

zTasker&#xff0c;是一款定时&#xff5c;热键&#xff5c;纯粹的自动化任务神器。它支持超过100种任务类型&#xff0c;包括提醒、关机重启、报时、挡屏休息、文件备份、音量调节、静音等。用户可以通过定时、CPU占用、文件夹监控、网速、快捷键等多种条件触发任务。 简单点…

Docker核心笔记

一、概述 1、架构 Docker容器基于镜像运行,容器共享宿主机的内核,不会加载额外内核,通过Namespaces(环境隔离)和Cgroups(资源控制)实现隔离,Cgroups会限容器使用资源并控制优先级和统计数据。隔离后的容器仅包含应用所需的用户态依赖 2、安装 安装先卸载再安装,使用的yum…

2025年电工杯数学建模B题【垃圾运输】原创论文分享

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2025年电工杯数学建模B题【垃圾运输】完整的成品论文。 给大家看一下目录吧&#xff1a; 目录 摘 要&#xff1a; 一、问题重述 二&#xff0e;问题分析 2.1问题一 2.2问题二 2.3问题三 三、模型假设 …

[爬虫知识] IP代理

相关实战案例&#xff1a;[爬虫实战] 代理爬取&#xff1a;小白也能看懂怎么用代理 相关爬虫专栏&#xff1a;JS逆向爬虫实战 爬虫知识点合集 爬虫实战案例 引言&#xff1a;爬虫与IP封锁的攻防战 对网络爬虫而言&#xff0c;遇到的一个较棘手的问题就是封IP&#xff1a;请…

计算机视觉---YOLOv1

YOLOv1深度解析&#xff1a;单阶段目标检测的开山之作 一、YOLOv1概述 提出背景&#xff1a; 2016年由Joseph Redmon等人提出&#xff0c;全称"You Only Look Once"&#xff0c;首次将目标检测视为回归问题&#xff0c;开创单阶段&#xff08;One-Stage&#xff09…

前端学习笔记element-Plus

【element-plus菜单】参数说明&#xff1a; active-text-color"#ffd04b"——激活颜色 background-color"#232323"——背景颜色&#xff08;29,160,176&#xff09; :default-active"$route.path"——配置默认高亮的菜单项 text-color"#f…

【Django DRF】一篇文章总结Django DRF框架

第一章 DRF框架基础 1.1 DRF简介 1.1.1 DRF定义与作用 1. 定义 DRF 即 Django REST framework&#xff0c;它是一个建立在 Django 基础之上的强大且灵活的工具包&#xff0c;用于构建 Web API&#xff08;应用程序编程接口&#xff09;&#x1f60e;。简单来说&#xff0c;…

如何解决 Python 项目安装依赖报错:ERROR: Failed to build installable wheels for some pyproject.toml based project

如何解决 Python 项目安装依赖报错&#xff1a;ERROR: Failed to build installable wheels for some pyproject.toml based projects 在使用 pip 安装 Python 项目的依赖时&#xff0c;遇到类似如下的报错信息&#xff1a; ERROR: Failed to build installable wheels for s…

使用f5-tts训练自己的模型笔记

摘要 服务器都有了&#xff0c;这不得练练丹&#xff0c;有点说不过去啊。所以尝试了从头开始训练一个模型&#xff0c;结果由于推理页面好像有bug&#xff0c;不知道是不是失败了&#xff0c;然后又尝试微调一下模型。本篇文章主要记录了三流调包侠尝试炼丹过程中学习到的一些…

安全可控的AI底座:灯塔大模型应用开发平台全面实现国产信创兼容适配认证

国产信创产品兼容适配认证是为了支持和推动国产信息技术产品和服务的发展而设立的一种质量标准和管理体系。适配认证旨在确保相关产品在安全性、可靠性、兼容性等方面达到一定的标准&#xff0c;以满足政府和关键行业对信息安全和自主可控的需求。 北京中烟创新科技有限公司&a…

初识Vue【1】

1.什么是Vue&#xff1a; Vue (读音 /vjuː/&#xff0c;类似于 **view**) 是一套用于构建用户界面的**渐进式框架**。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或…

Jest入门

快速入门 Jest中文文档 | Jest中文网 1.下载&#xff1a;npm install --save-dev jest 2.创建 sum.js 文件&#xff1a; function sum(a, b) { return a b; } module.exports sum; 3.创建sum.test.js 的文件 const sum require(./sum); test(adds 1 2 to equal 3,…

Spring Boot企业级开发五大核心功能与高级扩展实战

前言 在企业级应用开发中&#xff0c;Spring Boot已成为事实上的Java开发标准。本文将从企业实际需求出发&#xff0c;深入剖析Spring Boot五大必用核心功能&#xff0c;并扩展讲解三项高级开发技能&#xff0c;帮助开发者掌握构建健壮、高效、易维护的企业级应用的必备技术。…

2025电工杯数学建模B题思路数模AI提示词工程

我发布的智能体链接&#xff1a;数模AI扣子是新一代 AI 大模型智能体开发平台。整合了插件、长短期记忆、工作流、卡片等丰富能力&#xff0c;扣子能帮你低门槛、快速搭建个性化或具备商业价值的智能体&#xff0c;并发布到豆包、飞书等各个平台。https://www.coze.cn/search/n…

LabVIEW开发FPGA磁声发射应力检测系统

工业级磁声发射应力检测系统&#xff0c;针对传统设备参数固定、灵活性不足的痛点&#xff0c;采用 Xilinx FPGA 与 LabVIEW 构建核心架构&#xff0c;实现激励信号可调、多维度数据采集与实时分析。系统适用于铁磁性材料应力检测场景&#xff0c;具备高集成度、抗干扰性强、检…

Java IO流学习指南:从小白到入门

Java的IO&#xff08;Input/Output&#xff09;流是处理数据输入和输出的基础。无论是读取文件、写入文件&#xff0c;还是通过网络传输数据&#xff0c;IO流都无处不在。对于刚接触Java的新手&#xff0c;理解IO流可能会有些困惑&#xff0c;但别担心&#xff0c;今天我们将一…

【后端高阶面经:微服务篇】1、微服务架构核心:服务注册与发现之AP vs CP选型全攻略

一、CAP理论在服务注册与发现中的落地实践 1.1 CAP三要素的技术权衡 要素AP模型实现CP模型实现一致性最终一致性&#xff08;Eureka通过异步复制实现&#xff09;强一致性&#xff08;ZooKeeper通过ZAB协议保证&#xff09;可用性服务节点可独立响应&#xff08;支持分区存活…

QNAP NEXTCLOUD 域名访问

我是用docker compose方式安装的&#xff0c;虽然不知道是不是这么个叫法&#xff0c;废话不多说。 背景&#xff1a;威联通container station安装了nextcloud和lucky&#xff0c;lucky进行的域名解析和反代 先在想安装的路径、数据存储路径、数据库路径等新建文件夹。再新建…

高级SQL技巧:窗口函数与复杂查询优化实战

高级SQL技巧&#xff1a;窗口函数与复杂查询优化实战 开篇&#xff1a;数据库开发中的挑战 在现代企业级应用中&#xff0c;数据库不仅是存储数据的核心组件&#xff0c;更是处理复杂业务逻辑的重要工具。然而&#xff0c;随着数据量和并发请求的不断增长&#xff0c;传统的S…

《STL--list的使用及其底层实现》

引言&#xff1a; 上次我们学习了容器vector的使用及其底层实现&#xff0c;今天我们再来学习一个容器list&#xff0c; 这里的list可以参考我们之前实现的单链表&#xff0c;但是这里的list是双向循环带头链表&#xff0c;下面我们就开始list的学习了。 一&#xff1a;list的…