三分算法
简述
三分算法是基于分治思想的一种算法,他的适用范围为单峰函数,主要实现是在求出区间中点mid的同时在右半区间再求出一个中点midmid,然后根据大小进行下一步操作。
操作过程
假设我们要在l到r中查找最值,先取整个区间的中点。
double mid=(l+r)/2;
然后我们再取右半部分的中点midmid
double midmid=(mid+r)/2;
然后比较mid和midmid哪个更靠近最值,若mid更靠近最值,则舍弃右区间,若midmid更靠近最值则舍弃左区间。
if(fun(mid)>fun(midmid)) r=midmid; else l=mid;
具体代码
double ssearch(double l,double r){//在区间l到r中查找最大值,返回位置 double mid,midmid; while(l+1e-8<=r){ mid=(l+r)/2; midmid=(mid+r)/2; if(fun(mid)>fun(midmid)) r=midmid; else l=mid; } return l; }
时间复杂度分析
三分和二分类似,同样可以构建一颗递归树,二分把问题分为了两份三分则把问题分成了三份,每一份的处理是O(1),所以我们可以列出递推公式T(n) = T(n/3) + O(1),由主定理可得T(n) = O(log n),同样和二分都是log级别的,但三分的底数是3所以稍劣。
一点一点积累,一点一点蜕变!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!