多段線性函式

2021-07-24 12:29:10 字數 1306 閱讀 9390

我們容易證明,fmin是乙個非嚴格單峰函式。

對於乙個xi,隨著y的增大,它的貢獻先是乙個減量,再是乙個為0的常量,最後是乙個增量。隨著y的增大,fmin的增量應該是增量和減減量和。因為每乙個都是由增量變成減量,因此fmin的增量越來越大,所以fmin單峰。因為平板的存在,fmin只能算是非嚴格單峰函式。

因此我們考慮三分出極值,再二分出取值範圍。

三分在有平板的情況下好像是錯的?例如在極點右端造一大段平板,那麼如果兩個三分點都卡在這段平板上,把左端調整會使得我們錯過極點。

但是這題三分沒有錯,為什麼?

如果出現了平板,此時fmin的增量就是0。這題fmin的增量是單調的,增量為0說明是一條切線,這個時候平板處一定是極值。

#include

#include

#define fo(i,a,b) for(i=a;i<=b;i++)

#define fd(i,a,b) for(i=a;i>=b;i--)

using

namespace

std;

typedef

long

long ll;

const

int maxn=100000+10;

int l[maxn],r[maxn];

ll ans;

int i,j,k,l,r,mid,mid1,mid2,t,n,m,mi,mx,ansl,ansr,id;

int read()

while (ch>='0'&&ch<='9')

return x*f;

}ll f(int x)

return t;

}int main()

else

if (r-l==2)

mid1=l+(r-l+1)/3;mid2=l+(r-l+1)/3*2;

if (f(mid1)else l=mid1;

}id=l;

ans=f(id);

l=mi;r=id;

while (l2;

if (f(mid)>ans) l=mid+1;else r=mid;

}ansl=l;

l=id;r=mx;

while (l1)/2;

if (f(mid)>ans) r=mid-1;else l=mid;

}ansr=l;

printf("%d %d\n",ansl,ansr);

}

jzoj4882 多段線性函式

雖然題目很難看懂,但還是很良心的,因為給了我們乙個啟發 峰值是一段區間.把x的取值範圍想象為 框 fmin y 這個函式就是求y到每個框的最小距離之和.不難發現fmin y 是乙個不嚴格的單峰函式,即峰值不止乙個點.因為答案一定是在某個框內或不在框內,對於第一種情況,在答案 l,r 之間時,左右是平...

多特徵線性回歸

一,單一特徵線性回歸二,多特徵線性回歸 當有很多因素來決定房價的時候,如圖 我們就需要更多的未知數和係數來表示結果,在這之前需要普及一些表示式的含義,如圖 n表示影響因素 特徵向量 的個數,m表示元組個數,上標 i 表示第i個元組,我們可以用矩陣來表示,下標j表示第j個因素 特徵向量 同單一特徵線性...

多線性的實現

線性的建立 pthread create函式 函式的作用 建立執行緒 表頭檔案 include 函式原型 int pthread create pthread t restrict tidp,const pthread attr t restrict attr,void start rtn void...