2025西安交大集训Day1:二分,三分,哈希,高精度,位运算,模拟退火

news/2025/3/22 10:50:27/文章来源:https://www.cnblogs.com/FrankWKD/p/18777888

2025西安交大集训Day1:二分,三分,哈希,高精度,位运算,模拟退火

二分

详见2025dsfz集训Day2:二分与三分,三分在当前文章内已经重构过。

三分

三分算法详细解释

三分算法(Ternary Search)是一种用于在单峰函数(即函数在某一点左侧单调递增,右侧单调递减,或者相反)上寻找极值(最大值或最小值)的算法。它的基本思想是通过不断缩小搜索范围来逼近极值点。

算法步骤:

  1. 确定搜索范围:首先确定一个区间 \([left, right]\),确保极值点在这个区间内。
  2. 计算中间点:将区间分为三部分,计算两个中间点 \(mid1\)\(mid2\)
  • \(mid1 = left + (right - left) / 3\)
  • \(mid2 = right - (right - left) / 3\)
  1. 比较函数值:比较 \(f(mid1)\)\(f(mid2)\) 的大小:
  • 如果 \(f(mid1) < f(mid2)\),则极值点在 \([left, mid2]\) 区间内,更新 \(right = mid2\)
  • 如果 \(f(mid1) > f(mid2)\),则极值点在 \([mid1, right]\) 区间内,更新 \(left = mid1\)
  • 如果 \(f(mid1) == f(mid2)\),则极值点在 \([mid1, mid2]\) 区间内,更新 \(left = mid1\)\(right = mid2\)
  1. 重复步骤2和3:直到区间 \([left, right]\) 足够小,或者达到预定的精度要求。
  2. 返回结果:返回 \((left + right) / 2\) 作为极值点的近似值。

举例说明:

假设我们有一个凹函数 \(f(x) = (x - 3)^2\),我们希望在区间 \([0, 6]\) 上找到最小值。

  1. 初始区间 \([left, right] = [0, 6]\)
  2. 计算 \(mid1 = 0 + (6 - 0) / 3 = 2\)\(mid2 = 6 - (6 - 0) / 3 = 4\)
  3. 计算 \(f(mid1) = (2 - 3)^2 = 1\)\(f(mid2) = (4 - 3)^2 = 1\)
  4. 由于 \(f(mid1) == f(mid2)\),更新 \(left = 2\)\(right = 4\)
  5. 重复步骤2和3,直到区间足够小。

最终,我们会发现最小值出现在 \(x = 3\)

凹函数求最小值的模板代码

#include <iostream>
#include <cmath>
#include <iomanip>using namespace std;// 定义凹函数 f(x) = (x - 3)^2
double f(double x) {return (x - 3) * (x - 3);
}// 三分算法求解凹函数最小值
double ternary_search(double left, double right, double eps) {while (right - left > eps) {double mid1 = left + (right - left) / 3;double mid2 = right - (right - left) / 3;if (f(mid1) < f(mid2)) {right = mid2;} else {left = mid1;}}return (left + right) / 2;
}int main() {double left = 0.0;double right = 6.0;double eps = 1e-6; // 精度要求double result = ternary_search(left, right, eps);cout << "最小值出现在 x = " << fixed << setprecision(6) << result << endl;cout << "最小值为 f(x) = " << fixed << setprecision(6) << f(result) << endl;return 0;
}

代码解释:

  1. 函数 \(f(x)\):定义了我们要最小化的凹函数 \(f(x) = (x - 3)^2\)
  2. \(ternary_search\) 函数:实现了三分算法,通过不断缩小搜索范围来逼近最小值点。
  3. \(main\) 函数:设置初始搜索区间 \([0, 6]\) 和精度要求 \(eps = 1e-6\),调用 \(ternary_search\) 函数并输出结果。

输出结果:

最小值出现在 x = 3.000000
最小值为 f(x) = 0.000000

这个结果与我们的预期一致,最小值出现在 \(x = 3\),最小值为 \(0\)

哈希

详见我的字符串哈希学习笔记。

位运算

没啥好说的。

模拟退火

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

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

相关文章

Ubuntu安装GPU驱动+CUDA+cuDNN的安装方法

一台有GPU的虚拟机如果没有安装CUDA的驱动,是需要我们手动去进行安装的,介绍Ubuntu操作系统的安装教程。 1. 下载安装文件 NVIDIA CUDA Toolkit Archive 点击上面链接,进入CUDA Toolkit Archive,下载需要的CUDA工具包,本文章以CUDA Toolkit 12.3.2版本举例(可能需要代理加…

[多项式学习笔记] 拉格朗日插值

[多项式学习笔记] 拉格朗日插值[多项式学习笔记] 拉格朗日插值 多项式插值 给定 \(x\) 坐标两两不同的 \(n + 1\) 个点,能够唯一确定一个 \(n\) 次多项式。从给定点求出多项式的过程称为插值。 具体而言,给定 \(n + 1\) 个点 \((x_0, y_0), (x_1, y_1), \cdots, (x_n, y_n)\)…

flutter:bottomNavigationBar+PageView切换页面,使页面可以滑动切换

一,代码: tabbar: import package:flutter/material.dart; import ../tabpages/MyHomePage.dart; import ../tabpages/ProfilePage.dart;class MyTabBar extends StatefulWidget {const MyTabBar({super.key});@overrideState<MyTabBar> createState() => _MyTabBar…

flutter:用底部导航栏切换页面

一,代码: tabbar页面: import package:flutter/material.dart; import ../tabpages/MyHomePage.dart; import ../tabpages/ProfilePage.dart;class MyTabBar extends StatefulWidget {const MyTabBar({super.key});@overrideState<MyTabBar> createState() => _MyTa…

ASE13N45-ASEMI照明驱动专用ASE13N45

ASE13N45-ASEMI照明驱动专用ASE13N45编辑:LL ASE13N45-ASEMI照明驱动专用ASE13N45 型号:ASE13N45 品牌:ASEMI 封装:TO-220F 最大漏源电流:13A 漏源击穿电压:450V 批号:最新 RDS(ON)Max:0.45Ω 引脚数量:3 沟道类型:N沟道MOS管 封装尺寸:如图 特性:MOS管、N沟道M…

CORIDIC算法学习记录

目录问题问题分析CORDIC算法原理逼近方法及步骤逼近过程中的符号确定根据角度计算正切值举个例子逼近\(\theta=50^{\degree}\)并求其正切值 CORDIC算法叫坐标旋转数字计算法,由J.Volder在1959年提出,可以快速且简单的计算角度的数值。 问题已知\(y,x\),如何快速计算角度\(\t…

郑州商转公直还办理流程-2025年3月

先叠个甲,因为时间、地点、银行及每个人的情况可能都不一样,最终流程和结果可能也不一样,建议根据自己情况提前咨询,以下为我个人真实经历,仅供参考。 时间线:1.2025.3.10周一,去贷款行办理《同意提前结清商业贷款函》、《同意提前结清商业贷款函》、余额证明,12号周三…

设计一种将方向盘的旋转角度转换为USB信号的装置,用于汽车驾驶模拟

量角器是一种专门的设备,用于高精度测量旋转角度,并通过USB将这些测量结果传输到主机。它集成了一个精确的编码器,能够以1度的精度测量角度。树莓派Pico通过可编程I/O (Programmable I/O)高速读取编码器信号,而TinyUSB库则用于与主机共享数据。该量角器的开发主要是为了解决…

郑州商转公直还办理流程

时间线:1.2025.3.10周一,去贷款行办理《同意提前结清商业贷款函》、《同意提前结清商业贷款函》、余额证明,12号周三电话我已出好,可以去公积金中心办商转公了;2.2025.3.17周一,去公积金中心办理商转公直还,周四下午收到已放款短信,周五早上接到贷款行电话提醒去办提前…

构建一个2.4GHz无线网络分析仪,可兼作远程(LoRa)收发器

快速预览 呈现DualCast !我最新的(也是最先进的)项目。它是一种紧凑型无线设备,除了能够通过LoRa技术发送915MHz AES-128加密的远程命令外,还能够分析2.4GHz Wi-Fi网络上的实时流量。(默认设置下最高可达一公里!)翻转180以激活Wi-Fi模式。此外,它还配备了许多传感器,如用于…

Vue3 关闭vueDevTools工具

1、文件 vite.config.ts 2、注释