三分算法模板
三分算法模板
二分可以在y = kx + b上找答案。(单调递减 , 单调递增)
而三分可以在y = ax^2 + bx + c上找答案。(单峰函数)
我们令:
m1 = l+r >> 1 , m2 = m1 + r >>1;
然后会有三种情况。
当m1 > m2 , 极值在l ~ m1
当m1 <= m2,极值在m2 ~ r.
then
三分模板:
void tri_search()
{
int l=0 , r = k,m1(0),m2(0);
while(l<=r)
{
m1 = l+r >> 1 , m2 = m1 + r >>1;
if(calc(m1) > calc(m2))
r = m2-1;
else l = m1+1;
ans = max(ans , max(calc(m1) , calc(m2)));
}
}
tips:其实就是m1和m2那边小那边砍
注意每次ans都要和m1和m2取max。
评论
其他文章