1. 程式人生 > 其它 >《一類調整演算法在資訊學競賽中的應用》學習筆記

《一類調整演算法在資訊學競賽中的應用》學習筆記

\[《一類調整演算法在資訊學競賽中的應用》學習筆記 \]

教練讓學習論文...

找了個好玩的演算法來學,\(dls\)調整法

用途

用於處理一些合法解中找最優解的問題

可以從任意一個合法解中進行微調得到最優解

基本流程

記錄\(S\)為所有可能的狀態集合,\(x\in S,\)定義\(F(x)\)\(x\)的權值

\(T\subset S\)為合法狀態的集合中,求出\(x\in T,F(x)\)的最大值

比較常見的,每一個狀態都能通過較小的變化得到另一個狀態,成為鄰域,記為\(N(x)\)

\(1.y\in N(x),F(y)>F(x) \ ,x=y\)

\(y\in N(x),All\ F(y)<=F(x),x=(rand()\in N(x))\)

最終可以得到一個區域性最優解(全域性較優解)

具體使用

\(Sit_1:\)圖論匹配問題

目前一般圖最大匹配的穩定演算法是帶花樹\(O(n^w)/O(n^3)\)求得(我沒有學過,本文暫時不涉及)

考慮使用調整法解決問題

我們有圖\(G=(V,E),\)我們維護一個邊集子集\(S\subset E,\)表示當前匹配的邊,我們現在已經有一些點已經匹配了,選擇未匹配的點,我們隨機挑選出一個\(v,\)如果\(v\)存在未匹配相鄰點,直接匹配即可,否則隨機斷邊

程式碼實現簡單,隨機資料下比較優秀

期望複雜度\(O(n^{\frac{n}{2}+4}),\)證明略(反正你也不知道出題人會不會卡你)

閒的沒事寫了一發,發現\(Luoguo,UOJ\)

都把隨機調整卡了...

程式碼\(UOJ:97pts,luoguo:78pts\)

https://www.luogu.com.cn/record/list?pid=P6113&user=250036

不想卡了,直接賀。。。

\(Sit_2:\)隱式匹配問題

\(CF562E\)

題目大意\(:\)

給定\(n,x_i(i\in[1,2^n])\)構造兩個長度為\(2^n\)的排列\(p_i,q_i(i\in[1,2^n])\),滿足\(p_i\ xor \ q_i=x_i,\)或輸出無解

我的第一眼思路,是對於每個\(x_i\)找若干對能異或出\(x_i\)的數對,然後連線,然後類似網路流建圖跑匹配

首先判斷無解較為顯然

\(x_1\ xor\ x_2....x_n=p_i\ xor\ q_i=0\)

考慮調整演算法

首先我們有\(0\sim 2^n-1,\)\(x_0\sim x_{2^n-1}\)匹配,使得異或各不相同

還是最大匹配演算法,每次找一個沒有匹配的\(x_n\)匹配,如果未出現此異或就匹配

否則就\(rand()\)一個\(x_n\)異或,並把原來異或和相同的斷開即可(不過\(CF\ hack\)不掉挺神奇的)

\(JOI2020\)製作糰子

https://www.luogu.com.cn/problem/P7218

大家都切了吧,但是我咕咕咕了(現在補上了)

這是個提答

每次隨機未被匹配的點,然後判斷是否存在個竹籤在不和其他竹籤衝突,如存在則直接插入竹籤,否則\(50\%\)去掉衝突竹籤

拿到的分數和你剩下的時間還有電腦的執行速度成正比...

好想又好寫...

\(Sit_3:\)

\(NP\)問題(話說這種題放在\(FJOI2022\)肯定能被出題人“解決”)

\(No.1\)染色問題

將所有點用\(k\)種顏色染色,使得任意邊連線兩點顏色不同

首先隨機染色,然後找一個點如果能換顏色之後使得同色邊減少的最多,就在這些減少最多的點隨機選擇一個換顏色

直到得到答案

四元環可以卡掉,因為我們保證一直要不劣,存在方案使得先劣後優,其實可以調整若干輪之後再次隨機染色(人類智慧的進步,爬山\(->\)退火)

四元環不加多次隨機被完美\(hack\)掉(以後出資料多出這種資料,萬一真有人隨機一次呢)

\(No.2\)有向圖哈密爾頓鏈

給定有向圖\(G=(V,E),\)找出一條鏈恰好經過每個點一次

維護一個儘可能大的邊集使得每個點的入度至多為\(1\)並且不構成圈,每個點的出度也不能大於\(1\)

在不構成環的基礎上,隨機加邊,如果直接合法就加,否則,把不合法的邊斷掉就好了

判斷成圈的話可以使用\(LCT,\)我覺得可按秩合併撤銷並查集也行

也能被卡(以後出資料多出這種資料,卡人無比快樂)

因為我們左圖至少斷兩條邊,會使得更劣,不符合隨機調整規則,就會被卡

\(No.3\ NP\)問題的近似解

可以轉化為\(x_i\in [0,1]\)整數型線性規劃為題,用隨機化優化一下(我不是很明白)

https://www.cnblogs.com/Eternal-Battle/p/15856834.html

可以查詢相關論文:

[1] Nikhil Bansal, On a generalization of iterated and randomized rounding. In Proceedings of the
51stAnnual ACM SIGACT Symposium on Theory of Computing, pages 1125–1135, 2019.

基本優化

\(Sit_1:\)

一個變數被若干次調整回到原狀態,可以先固定這個變數,調整其他變數,若干輪之後再設為不固定

\(Sit_2:\)

使用類似退火思想,先變劣再變優的接受較劣解

後言

感覺這個論文挺好玩就學了,儘管寫了一個任意圖最大匹配被\(hack\)了(最後賀帶花樹過去了),感覺還是有不小的收穫,畢竟亂搞好寫又能拿不少分,在考場上是個真心不錯的選擇,希望我親愛的同學們準備的論文內容也很有意思吧