《一類調整演算法在資訊學競賽中的應用》學習筆記
教練讓學習論文...
找了個好玩的演算法來學,\(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\)了(最後賀帶花樹過去了),感覺還是有不小的收穫,畢竟亂搞好寫又能拿不少分,在考場上是個真心不錯的選擇,希望我親愛的同學們準備的論文內容也很有意思吧