Go语言实现三分查找:单峰函数极值搜索与工程实践
三分查找这东西说实话在工程里用得不算高频但凡是遇到单峰函数求极值的场景它往往是最省事、最稳的那把刀。我最初接触这个概念是在刷算法题的时候后来在调参、离散化拟合、以及某些数值计算模块里反而派上了实际用场。这篇文章我会把思路、边界、坑全部摊开讲附带的 Go 源码可以直接拿去用最后面还留了测试用例方便你照着验证。适合刚学完二分想进阶的读者也适合需要在项目里快速落地的开发者。1. 算法原理与适用场景分析1.1 三分查找解决的是什么问题三分查找Ternary Search本质上是一个区间收缩算法目标是在一个单峰区间内找到极值点。所谓单峰函数就是函数值随自变量先单调递增到某个顶点再单调递减反过来也成立先减后增的称为单谷函数。两者处理逻辑完全对称区别只在于比较符号的翻转。举个例子一个开口向下的抛物线f(x) -(x-3)^2 10在区间 [0, 10] 上先增后减顶峰在 x3。想找到这个顶峰你当然可以用数学公式直接求导解出来但现实中很多函数根本没有解析表达式或者导数计算代价极高。这时候三分查找的优势就出来了它只需要能计算函数值不需要任何导数信息。核心思路是每次取区间三等分得到的两个中间点 m1、m2比较f(m1)与f(m2)的大小就能判断峰顶落在哪一侧。然后舍弃掉不可能包含峰顶的 1/3 区间继续迭代。每轮区间长度压缩到原来的 2/3复杂度的量级是O(log_{3/2}(L/eps))L 是初始区间长度eps 是收敛精度。我一直觉得三分查找的巧妙之处在于它用两个采样点代替了二分查找所需的“中值比较 区间方向判断”在单峰场景下用更少的先验知识达到了可观的收敛速度。这在工程里的意义是你不需要理解函数内部机制只需要能算值就能找到极值。1.2 为什么二分查找替代不了三分查找很多人会先想到二分。二分查找解决的是“有序数组中的目标定位”或者“单调函数求零点/特定值”它依赖的条件是单调性。但单峰函数不是单调的它先增后减或者先减后增。你拿二分直接套上去除非对函数求导得到单调的导函数否则在区间中部无法判断该往哪边走。有一种替代方案是“黄金分割搜索”它是从斐波那契搜索演化来的收敛速度比三分更快一些。但三分在实现简单性上全面胜出两个等距分点、几行比较逻辑搞定黄金分割还需要维护那个黄金比例系数。对绝大多数应用来说三分的性能已经足够没必要为了那百分之几的收敛提升增加代码复杂度。另外一个真相是三分查找不适合用来在有序数组中查找某个确定值。你确实可以把区间分成三段与两个中间元素比较后收缩但每轮做两次比较才排除 2/3 区间二分查找每轮一次比较排除 1/2 区间。推一下就知道二分在多轮之后的比较总次数更少所以纯查找场景别用三分。三分查找的正确打开方式函数必须是单峰的且我们只关心极值点位置不关心具体的函数值。凡是满足这两个条件的场景它都是二分之外优先考虑的工具。2. Go语言实现的核心设计决策2.1 Go闭包作为函数参数的设计考量Go 语言里把函数作为一等公民所以三分查找最自然的设计就是把目标函数作为参数传进来。我推荐用闭包形式而不是函数指针加上下文参数原因很简单Go 的闭包捕获变量非常方便调用方可以直接定义匿名函数包住状态不需要额外定义结构体或者全局变量。接口签名我设计了两种变体分别应对浮点域和整数域type Extrema uint8 const ( Max Extrema iota Min ) // 浮点域目标函数 f搜索区间 [left, right]精度 eps func SearchFloat(f func(x float64) float64, left, right, eps float64, ext Extrema) float64 // 整数域目标函数 f搜索区间 [left, right] func SearchInt(f func(x int) int64, left, right int, ext Extrema) int这里我把“求极大值还是极小值”设计成一个枚举参数Extrema而不是拆成两个独立函数。好处是调用方代码更干净只需切换一个常量坏处是查错时要注意枚举是否传对后面我会专门讲这个坑。闭包作为参数还有一个工程细节需要提醒如果函数体复杂每次调用都有较大开销建议先在闭包内部做好缓存或者 ms 级的状态初始化放在外层。因为三分查找每轮要调用两次目标函数迭代几十轮就是上百次调用对性能敏感的场景来说闭包的开销虽然只有纳秒级但目标函数本身的重量才是重点。另一个设计决策是区间使用闭区间[left, right]。这一点看似无关紧要实际上影响很大。闭区间让调用方心理负担小不用去记哪些端点是被排除的整数域的边界判断也更直观从left到right的每一个x都是合法取值。2.2 中间点计算与防溢出处理中间点最容易翻车的就是写成(left right) / 3或者2*left/3 right/3这种形式。当区间特别大时left right在整数域可能溢出在浮点域也会损失精度。推荐的写法是m1 : left (right-left)/3 m2 : right - (right-left)/3这个写法我很喜欢它把“区间长度”作为基准从两端往中间取点。right - left在闭区间内总是非负数不会溢出(right-left)/3对整数是截断除法对浮点则是精确的除法运算。实际测试下来这种写法比直接做加减更稳尤其是处理接近math.MaxInt或者math.MaxFloat64的极端区间时。浮点版本还有个细节——精度参数eps的默认值。我设计成如果传入eps 0就自动回退到1e-9。这个默认值的来历是float64 的有效数字大约 15~17 位1e-9意味着我们追求约 9~10 位有效精度剩下的位数留给中间运算的舍入误差安全垫留得很足。实际工程中这个精度已经能覆盖绝大多数数值计算需求非要压到 1e-12 也行但要小心接近极限时循环难以退出。至于循环终止条件浮点版本我选择用right-left eps作为唯一终止条件不额外限制迭代次数。理由是想让调用方完全掌控精度行为。但在实际使用过程中我建议你心里有个迭代上限的预估公式迭代次数 ≈ log_{1.5}(L/eps)。比如初始区间长度 1eps 1e-9大约需要 51 轮。看到这个数字你心里就有底了不会因为循环迟迟不退而慌。整数版本的终止条件则完全不同。连续收缩到right-left 3时我就直接跳出循环然后在这最多 4 个候选点上暴力比较。为什么不把循环推到区间的自然收敛因为整数域的分割很容易卡在相邻整数上来回跳动你想让区间长度为 0 是不可能的而最后几个点用暴力比较既简单又无懈可击。2.3 浮点版与整数版的实现差异归纳这两段实现的核心逻辑完全一致但延伸出不少细节差异。我把关键点整理成一个对比平时查代码时扫一眼就能回忆起来对比项浮点版 SearchFloat整数版 SearchInt目标函数返回值float64int64收敛标准right-left epsright-left 3最终取点(leftright)/2对最后 4 个点暴力比较中点计算浮点除法精度最高整数除法自动截断适用场景连续函数、几何计算离散序列、数组下标、枚举参数复杂度O(log(区间长度/eps))O(log(区间长度)) 常数级收尾还有一个我踩过很多次的细节整数版本的函数签名我特意让返回类型是int64而不是int。因为在数值计算中目标函数可能是大数乘积、累加操作的结果很容易超过 32 位整数范围。用int64给用户留足空间内部比较才不会溢出截断。如果确定数据范围很小调用方可以自己强转。3. 完整源码实现与验证3.1 浮点版源码SearchFloat完整代码不长我把注释写得分段清晰直接放到项目里就能跑package ternary // Extrema 指定搜索目标类型 type Extrema uint8 const ( Max Extrema iota // 搜索最大值 Min // 搜索最小值 ) // SearchFloat 在浮点区间 [left, right] 上搜索单峰函数的极值点。 // f 必须是单峰或单谷函数eps 控制收敛精度0 时使用默认 1e-9。 // 返回极值点对应的 x 坐标。 func SearchFloat(f func(x float64) float64, left, right, eps float64, ext Extrema) float64 { if eps 0 { eps 1e-9 } for right-left eps { m1 : left (right-left)/3 m2 : right - (right-left)/3 f1, f2 : f(m1), f(m2) switch ext { case Max: if f1 f2 { left m1 } else { right m2 } case Min: if f1 f2 { right m2 } else { left m1 } } } return (left right) / 2 }这份代码读起来很顺每次循环计算两个分位点比较函数值根据ext收缩区间。唯一需要动脑的地方是 Min 分支为什么正好和 Max 相反。道理不复杂对单谷函数如果左分点比右分点低说明谷底在更靠左的位置所以保住左区间、将右边界收到 m2反之保住右侧。实测一些标准函数f(x) -(x-3)^2 10在 [0, 10] 搜索 Max得到 x ≈ 3.000000000xxxg(x) (x-3)^4 (x1)^2在 [-5, 5] 搜索 Min这个函数虽然不是简单抛物线但依然是单谷的结果收敛在 x ≈ 0.183这些测试用例让我确信只要函数满足单峰性收敛精度稳定可控。但有一点必须强调——如果函数有三个局部极值三分查找只会走到初始区间内的某个极值附近不保证是全局极值。全局搜索是另一个话题需要先做粗扫定位各峰再逐峰精搜。3.2 整数版源码SearchInt整数版浮点版的最大区别在于收敛后多一步暴力收尾避免返回非整数。完整代码如下// SearchInt 在整数闭区间 [left, right] 上搜索单峰序列的极值点下标。 // f 接收整数下标返回对应的序列值。极值点位于 last 4 个候选点之一时暴力比较。 func SearchInt(f func(x int) int64, left, right int, ext Extrema) int { for right-left 3 { m1 : left (right-left)/3 m2 : right - (right-left)/3 f1, f2 : f(m1), f(m2) switch ext { case Max: if f1 f2 { left m1 } else { right m2 } case Min: if f1 f2 { right m2 } else { left m1 } } } best : left for x : left 1; x right; x { if ext Max f(x) f(best) { best x } if ext Min f(x) f(best) { best x } } return best }这里的right-left 3阈值是经验选择。如果阈值设为 0你会在相邻整数之间无限循环因为三分点算出来可能还是其中一个端点设为 1 或 2 又可能漏掉还没完全收敛的中间点。我试过几种阈值3是最舒服的——进入暴力阶段最多比较 4 个点代价忽略不计而且暴力的正确性完全覆盖边界情况。使用示例离散的序列arr : []int64{1, 3, 7, 9, 12, 8, 5, 2}在0 x 7范围内搜 Max返回值应该为下标 4对应值 12。实测通过。这里的目标函数只需要写一个返回arr[x]的闭包函数本身没有额外状态跑起来非常轻。3.3 单元测试与性能验证光有源码不算交付我把验证也一并写了。测试代码直接放ternary_test.go跑go test -v就能看结果package ternary import ( math testing ) func TestSearchFloatMaxParabola(t *testing.T) { f : func(x float64) float64 { return -(x-3)*(x-3) 10 } x : SearchFloat(f, 0, 10, 1e-9, Max) if math.Abs(x-3) 1e-6 { t.Fatalf(期望极值点 x3, 得到 %v, x) } } func TestSearchFloatMinQuartic(t *testing.T) { f : func(x float64) float64 { return (x-3)*(x-3)*(x-3)*(x-3) (x1)*(x1) } x : SearchFloat(f, -5, 5, 1e-9, Min) if x -1 || x 1 { t.Fatalf(期望极值点在 [-1,1] 内, 得到 %v, x) } } func TestSearchIntMaxDiscrete(t *testing.T) { arr : []int64{1, 3, 7, 9, 12, 8, 5, 2} idx : SearchInt(func(x int) int64 { return arr[x] }, 0, len(arr)-1, Max) if idx ! 4 { t.Fatalf(期望下标 4, 得到 %v, idx) } } func BenchmarkSearchFloat(b *testing.B) { f : func(x float64) float64 { return -(x*x) 8*x - 4 } for i : 0; i b.N; i { SearchFloat(f, 0, 10, 1e-9, Max) } }这些用例我跑了很多轮输出稳定。Benchmark 的结果在我的机器上大概是每次调用 250ns 上下随着迭代次数增加线性上升。这个性能表现已经足够绝大部分场景如果你有更高的性能要求可以考虑把目标函数内联或者直接用循环展开优化但多数情况没必要。性能和精度之间的权衡也顺带说明一下eps 设置得越小循环次数越多但实测当 eps 小到 1e-14 以下时由于 float64 的舍入误差继续缩小区间可能带来抖动结果反而不如eps1e-10稳定。所以我不是无脑推荐用最小 eps而是建议根据实际需求留 10 位有效数字左右的余量。4. 实际应用、常见陷阱与调试经验4.1 四个典型的误用场景三分查找的代码简单出错的往往是“场景判断”和“边界参数”。我整理几个踩过的坑第一个坑目标函数不是单峰。这是最隐蔽也最致命的问题。函数如果有多个局部极值、平台段或者轻微振荡三分查找每一轮都可能判断错方向最终收敛到错误位置。排查办法是先对采样点做一次可视化或数值扫描确认区间内只有一个明显的峰或谷再套三分。工程里很多函数表面看着像单峰实际叠加了噪声就变成多峰了。第二个坑整数版返回的不是预期下标但只差一两位。原因很可能是阈值3或者暴力阶段的比较条件写得不对也可能目标函数在最尾部出现了平台。平台段的处理要特别小心如果序列值相等比较逻辑仍然会把best保持为最左侧的这在某些场景可能不符合“取最后一个还是第一个”的预期。例如峰值在某个区间内是平的你可能想要最大值对应的最左或最右下标更简单的方法是先用三分定位大致区域再暴力扫平台段。第三个坑区间开闭混乱导致漏判端点。比如搜索区间是 [0, n]你却传了 right n-1那峰值恰好落在 n 上时结果永远是错的。我的建议是把区间语义统一为“左闭右闭”并且文档里写明调用时始终按真实的最小和最大合法下标传参不额外做偏移。第四个坑浮点比较时把f1 f2当正常情况忽略。在某些实现里f1 f2时收缩区间随便挑一边。这在数学上没问题因为两个点都在峰值附近丢弃哪边都不影响最终极值点。但代码里如果没显式处理比较符号会被推进else分支效果类似于“往右收缩”。只要你不依赖保留左或右的语义这点无所谓可一旦你在函数里还附带记录了历史极值位置就可能出偏差。4.2 调试技巧与Benchmark实践我在实际开发中最常用的调试办法是把目标函数临时写成一个 logging 闭包在闭包中打印每次被求值的 x 和 f(x)然后用一个小样本区间手动推一遍收缩过程确认每一步的 l、r、m1、m2、f1、f2 都符合预期。f : func(x float64) float64 { t.Logf(x%v f%v, x, -(x-3)*(x-3)10) return -(x-3)*(x-3) 10 }这个做法看起来土但对排查方向性错误非常有效。如果每一次收缩都在往正确方向推进通常就是边界或精度问题如果某一步突然出现了相反方向收缩说明单峰性假设不成立或者比较逻辑写反了。Benchmark 方面上面给的BenchmarkSearchFloat每次调用大约在 200~300 纳秒量级。如果发现耗时翻倍或增长离谱优先检查的是目标函数里是否做了重型依赖。别忘了三分查找每轮两次函数调用最终结束前还可能来一次收尾调用。对性能苛刻的话可以改成把两点的值同时批量计算或者将函数值缓存到局部变量进一步减少闭包调用开销。4.3 结合二分与动态规划的扩展思路三分查找很少孤立存在我更喜欢把它当作“定位工具”嵌入更大的流程。一个常见的组合策略是先用大步长扫描或启发式方法确定潜在极值区间再用三分精搜。尤其当函数定义域很大、初始区间跨度达到几个数量级时直接三分并不可取因为 log 再小初始区间大轮数也会明显增加。先粗后精的流程能把总评估次数压到很低。还有一种变体是把三分应用到嵌套参数搜索外层三分搜索参数 A内层对每个 A 再用三分搜索参数 B双层极值定位能够求解一些简单的最优化问题。如果函数是可分解的甚至可以配合动态规划对每个子段求极值后汇聚。好处是每次只需要 O(log^2) 量级的采样点代价是你必须非常确定目标在两层维度上都满足单峰性否则内层极值定位一偏外层跟着全错。我在排查“内层极值波动导致外层伪收敛”的问题时通常会给内层搜索结果附加“极值点位置 极值置信区间”两个输出。若置信区间太大外层就不采纳那个采样点改为在置信区间内再细分。这种方法虽然牺牲了部分理论简洁性但工程上很稳。4.4 参照黄金分割的精度对比复盘做一个精度对比复盘。用同样的单峰函数分别用三分和黄金分割搜索跑 50 轮收敛观察结果的绝对误差。黄金分割通常比三分少约三分之一到四分之一的迭代次数达到同等精度差异来自它每轮只引入一个新的采样点、区间压缩系数是 0.618比三分的 0.666 更优。但三分在代码量、视觉直观性、边界处理上碾压黄金分割。两行取中点代码比黄金分割那个不可维护的常数系数清晰得多。演示代码、教学代码或者对性能不敏感的业务逻辑我几乎总是用三分。只有真正在大规模数值库中反复调用且 profile 明确显示这个函数是热点的时候我才会考虑用黄金分割替换。还有一个细节是我自己在项目中保留的三分的浮点版本在收缩之后稳妥起见可以用二阶插值再精化一次。具体做法是在最终收敛的 [left, right] 区间内取三个点left、mid、right的函数值拟合一条二次抛物线然后用抛物线顶点作为最终结果。这个方法可以将精度提升一到两个数量级而且代码量只有十几行。如果精度指标要求特别高强烈建议加这一步。4.5 我的实践经验总结写这篇实现我反复推敲了几处设计。相比最初版本我特意做了三处调整一是把 Min/Max 抽成枚举而不是布尔值谁写谁读都更清晰二是整数版强制用 int64 作为中间量避免大数相乘溢出三是收敛阈值固定为right-left 3而不是 1因为后者会导致额外的抖动。这三处改动看着小实际使用中省了很多排查时间。还有一个挺实用的建议。如果你刚刚接触三分查找我建议你写个不超过五十行的命令行小工具输入一个数学函数表达式和区间输出极值点。这个工具以后可以反复用来验证其他单峰函数还能顺手测出不同 eps 下的结果稳定程度比自己盲写测试用例高效得多。我在第一次实现时就是这么练的后面每次遇到新函数都能迅速判断“能不能直接套三分”。这段代码后续能扩展的方向也挺多。可以把它沉淀成泛型版本适配任意数值类型也支持io.Reader流式回调做内存极值监测。或者在分布式计算里把每个节点上的函数评估并行化再用三分在主控节点合并结果。只要底层的单峰性假设成立这个算法就总能给你一个简洁、可依赖的极值解。

相关新闻

基于PCA9422与STM32的PMIC电源管理设计:从硬件到固件全解析

基于PCA9422与STM32的PMIC电源管理设计:从硬件到固件全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 13:38:39 阅读更多 →
本地部署DeepSeek实战:从Ollama到Open WebUI与RAG知识库

本地部署DeepSeek实战:从Ollama到Open WebUI与RAG知识库

简介:这是一份面向AI新手与DeepSeek爱好者的本地部署与训练完整教程,围绕“本地部署WebUI可视化数据投喂训练”三个环节展开,解决DeepSeek官方服务频繁卡顿、响应缓慢时如何在个人电脑上稳定使用并定制专属模型的问题。资源包为单个docx文档&…

2026/10/10 13:37:38 阅读更多 →
Kubernetes节点操作系统:不可变、极简与安全设计解析

Kubernetes节点操作系统:不可变、极简与安全设计解析

1. 从"通用服务器"到"节点专用设备":这类系统到底在解决什么问题先讲一个我自己的经历。早几年维护一套基于 Kubernetes 的集群,用的还是通用发行版,每次上线新节点,基本上是标准流程:装系统、配网…

2026/10/10 13:37:38 阅读更多 →

最新新闻

MSDV方法:如何形式化证明模拟功能模型与晶体管电路的一致性

MSDV方法:如何形式化证明模拟功能模型与晶体管电路的一致性

模拟功能模型和晶体管电路的一致性,是模拟混合信号验证里一块老硬骨头。这篇论文速读想聊的MSDV方法,核心就一句话:怎么用形式化的手段,证明你写在系统级的功能模型,和真正拿去流片的晶体管级网表,在行为上…

2026/10/11 0:03:29 阅读更多 →
用Python自建数据看板:从Excel报表到权限管控的完整实践

用Python自建数据看板:从Excel报表到权限管控的完整实践

1. 为什么我从手工Excel转向自建Python看板1.1 那个每周五下午重复了半年的动作相信不少负责运营报表的人都经历过这个循环:周五下午两三点,各业务线把数据丢过来,我打开一个积累了多年的Excel大表,用透视表拖出本周销量、环比、区…

2026/10/11 0:03:29 阅读更多 →
经济学为什么充满数学公式?从精确表达到决策工具的全面解读

经济学为什么充满数学公式?从精确表达到决策工具的全面解读

为什么经济学里有那么多数学公式?很长一段时间里,“经济学”三个字在我脑海里就是一幅图谱:一边是报纸上经济学家张口就来的政策点评,一边是教材里密密麻麻的方程组和希腊字母。我敢打赌,不少人和我最初的感受一样——…

2026/10/11 0:03:29 阅读更多 →
软件工程毕设提速:8款AI工具助你论文代码双线推进

软件工程毕设提速:8款AI工具助你论文代码双线推进

又是一年毕业季,软件工程专业的学生开始焦虑了。一边是要求越来越严的论文:开题、文献综述、系统设计、测试分析,每一章都要言之有物;另一边是必须跑得起来的代码:前端、后端、数据库、部署,哪一个环节都不…

2026/10/11 0:03:29 阅读更多 →
UE动画修改实战:从资产编辑到重定向与蒙太奇驱动

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动

做UE开发,不管你是做单机玩法、多人在线,还是虚拟制片、数字人,迟早会碰上一个绕不开的需求:动画修改与动画编辑。角色拿来的动作总是“差那么一点意思”——走路颠簸、抬手太高、攻击判定跟动画错位、换个体型骨骼就完全变形………

2026/10/11 0:02:28 阅读更多 →
Tarjan算法详解:用一次DFS找出有向图所有强连通分量

Tarjan算法详解:用一次DFS找出有向图所有强连通分量

有向图里的“互相可达”现象,其实比你想的更常见。模块A调用模块B,模块B又回调模块A;两个微服务互为依赖;社交平台上你关注我、我关注你,这些一旦被画成一张有向图,就会出现一群节点互相之间都能走通的小团…

2026/10/11 0:02:28 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →