三分 (求凹/凸函数最值

求凹函数的极小值

int tri_search(int l,int r){
	// 求凹函数的极小值
	int f1,f2;
	while(l < r) {
	    int lp = l + (r - l) / 3;
	    int rp = r - (r - l) / 3;
	    f1 = check(lp),f2 = check(rp);
	    if(f1 <= f2) 
			r = rp - 1;
	    else 
			l = lp + 1;
	}
	//查找的是极小值
	return min(f1,f2);
	//查找的是极小值对应的下标
	return f1<f2?l:r;
} 


求凸函数的极大值

int tri_search(int l,int r){
	// 求凸函数的极大值
    int f1,f2;
	while(l < r) {
	    int lp = l + (r - l) / 3;
	    int rp = r - (r - l) / 3;
	    f1 = check(lp),f2 = check(rp);
	    if(f1 >= f2) 
			l = lp + 1;
	    else
			r = rp - 1;
	}
	//查找的是极大值
	return max(f1,f2);
	//查找的是极大值对应的下标
	return f1>f2?l:r;
} 
posted on 2025-06-07 19:24  下头小美  阅读(10)  评论(0)    收藏  举报