《一类调整算法在信息学竞赛中的应用》学习笔记
教练让学习论文...
找了个好玩的算法来学,\(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]\)整数型线性规划为题,用随机化优化一下(我不是很明白)
可以查找相关论文:
[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\)了(最后贺带花树过去了),感觉还是有不小的收获,毕竟乱搞好写又能拿不少分,在考场上是个真心不错的选择,希望我亲爱的同学们准备的论文内容也很有意思吧