《淺談保序迴歸問題》 - 學習筆記

特殊情況下可能可以使用貪心或 DP 維護分段函數解決,這裏不再展開。

4 一般問題的算法

整體二分也不用介紹了。

4.2 新問題的構造

\(L_p\) 基礎上加入另一個限制,得到 \(S=\{a,b\}(a<b)\) 問題:滿足原問題所有限制的同時,還滿足 \(a\le f_i\le b\) ,最小化迴歸代價。

4.3 \(p=1\) 的情況

\(p=1\) 之所以特殊,是因爲一個點集 \(U\)\(L_p\) 均值(在不考慮最小的情況下)可能是一個區間。但是另外一個性質是存在一個最優解滿足所有 \(f\) 都在 \(\{y_i\}\) 中,並且移動一些 \(f\) 時帶來的額外代價是簡單的一次函數。

然後是一個引理:在 \(L_1\) 問題中,如果

  1. 任意 \(y_i\) 不在區間 \((a,b)\) 中,且
  2. 存在一個最優解序列 \(z\) 滿足 \(z_i\) 均不在 \((a,b)\) 中(好像很顯然),且
  3. \(z^S\)\(S\) 問題的一組最優解

那麼原問題一定存在一組最優解 \(z\) ,使得 \(z\)\(S\) 取整能得到 \(z^S\)

我會感性理解(((

然後就可以整體二分所有 \(z\) 的取值。二分到 \(y_l,y_r\) 時,計算 \(S=\{y_{mid},y_{mid+1}\}\) 問題的最優解,以此確定現在這些 \(z\) 要被劃分進 \(y_{[l,mid]}\) 還是 \(y_{[mid+1,r]}\)

4.4 \(1<p<\infty\) 的情況

引理 4.2 :可以證明任意集合 \(U\)\(L_p\) 均值唯一,且代價函數在 \(<L_p\) 時遞減, \(>L_p\) 時遞增。

取一個極小的區間,然後就可以套用 \(p=1\) 的證明方法。不是很想看具體證明過程。

5 特殊偏序結構上的優化

5.1 樹上問題

直接套用整體二分方法,然後跑樹形 DP ,即可得到 \(O(n\log n)\) 做法,看起來顯然比維護分段函數好得多。

仙人掌也可以這麼做。

5.2 多維偏序

定義: \(d\) 維偏序,就是點在 \(d\) 維空間裏,有 \((a_1,a_2,\cdots,a_d)\le (b_1,b_2,\cdots,c_d)\) 當且僅當 \(\forall 1\le i\le d,a_i\le b_i\)

這裏其實是偏序關係恰好爲多維偏序,比如像下面這題:

顯然在整體二分的任意時刻,每行剩下的點都是一個區間,並且這一次也只會切成兩個區間,所以隨便 DP 即可。

更高維的情況可能也不是很好做吧。

6 \(L_{\infty}\) 問題的算法與拓展

6.1 簡單的二分法

無腦二分答案,得到每個變量的一個取值範圍,然後在 DAG 上無腦 DP 即可。

6.2 問題的拓展

出題人一拍腦袋,讓你在滿足所有限制的情況下對每個前綴的 \(\max\) 求最小值,即對於 \(k\) ,令 \(w_i=0,i>k\) ,然後求最小值。但是現在增加了條件, \(v_i\le v_j\) 當且僅當 \(i\le j\)

此時就不能二分了,我們來找一個神奇性質。

此時顯然有答案 \(\ge \max\limits_{i,j} \{mean\_err(v_i,v_j)\}\) ,然後構造這麼一組解。

對於 \(v_k\) ,選擇 \(mean\_err(v_i,v_j)\) 最大的一組 \(v_i,v_j(v_i\le v_k\le v_j)\) ,令 \(f_k=mean(v_i,v_j)\) (如果都是 0 那就直接選 \(y_k\) ?)。然後分三步證明這樣構造的正確性。

如果有另一組 \(v_{i'},v_{j'}\)\(mean\_err\) 與這組相等,那麼可以證明它們的 \(mean\) 也相等。否則如果 \(mean(v_{i'},v_{j'})\) 更大,即交點在右邊,那麼可以發現一組更大的 \(mean\_err\)

然後證明 \(err(v_k,mean(v_i,v_j))\) 不超過 \(mean\_err(v_i,v_j)\) :如果超過了,那麼選擇 \((v_i,v_k)\)\((v_k,v_j)\) 得到的 \(mean\_err\) 會更大。

最後證明這樣構造滿足偏序關係。考慮偏序關係 \(v_a\le v_b\) ,設 \(C_a,D_a\) 分別表示 \(v_e\le v_a\)\(err\) 函數的左半支的射線集合,和 \(v_e\ge v_a\)\(err\) 函數的右半支的射線集合, \(C_b,D_b\) 同理。那麼 \(f_a\) 取的值就是 \(C_a,D_a\) 的所有交點中 \(y\) 座標最大的那個點的 \(x\) 座標。考慮從 \(a\) 推到 \(b\) ,會使得 \(C\) 中加入一些射線, \(D\) 中刪除一些射線。分別考慮 \(C,D\) 組成的下凸殼,給 \(C\) 加一條射線的時候最大 \(y\) 座標不降,那麼 \(x\) 座標也不降;給 \(D\) 刪一條射線同理。

構造完成。於是證明了答案可以取到下界。

回到例題,那就可以設 \(pre(v_i)=\max\{mean\_error(v_{j},v_i)\mid j\le i)\}\) ,然後答案就是前綴 \(\max\) 。無腦做已經得到 \(O(n^2)\) 的複雜度了。維護之前所有函數的左半支的凸殼,然後求這個函數的右半支與凸殼的交點,即可做到 \(O(n\log n)\)

注意如果 DAG 的形式並沒有 \(v_i\le v_j\Leftrightarrow i\le j\) 這麼好看,那還是要 \(O(n^2)\) 的複雜度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章