WC2017 Day3
WC2017 Day3
近似算法
0x00 提纲
- 为什么需要近似算法
- 近似算法简介
- 总结
0x01 为什么需要近似算法?
- 这一部分都在胡扯
算法的特点
- 复杂度(时间,空间)
- 正确性(方法正确性,程序正确性)
- 简单性(程序结构简单,便于调试)
如何评价时间复杂度?
- 对于给定问题,执行的基本运算次数
- 基本运算选择(比较,加减乘除,置指针)
- W(n) 最坏复杂度(Worst)
- A(n) 平均复杂度(Average)
我们的需求?
- 保证复杂度的前提下使算法尽量简单
基于时间的最优性
- 最坏情况下最优
- 平均情况下最优
算法最优?
- 算法复杂度上界与问题复杂度下界相等
如何求问题复杂度下界?
- 问题的输入输出规模(平凡下界)
- 数学推导
如何求算法复杂度上界?
- 瞎搞一个算法,直接计算基本运算次数
- 显然你瞎搞出来的任何一个正确的算法都是一个上界
P,NP
- P:时间复杂度与输入规模多项式相关,存在多项式时间算法
- NP:不存在多项式时间算法(指数,阶乘)
判定问题
- 答案只有是和否
- 01背包的判定问题?
- 搜索问题,组合优化问题和对应的判定问题
P类与NP类问题
- P类:多项式时间内可解的判定问题
- NP类:多项式时间内可验证的判定问题
多项式时间转换
- 两个问题的答案可以在多项式时间内相互转化
0X02 为什么需要近似算法?
- 有一些问题我们不知道有没有多项式时间算法
- 我们需要近似算法来找到一个较优解
- 较优解和最优解的比值r
- 如果r为常数,称为常数近似比算法
- 光对着PPT读是不是不太合适
近似算法分类
- 完全可近似:可以无限趋紧最优解(背包问题)
- 可近似:存在常数近似比算法(最小顶点覆盖,多级调度)
- 不可近似:找不到常数近似比算法(TSP问题)
最小顶点覆盖问题
- MVC算法 r=2
多机调度问题
- 神TM多机调度,就是k划分问题
- 把一个集合划分成k个子集,使这k个子集的元素和中最大值最小
- G-MPS:贪心,按输入的顺序分配元素,把当前元素分配给当前最小的集合
- r?$ 2-\frac{1}{k} $
- DG-MPS:在G-MPS的基础上把元素从大到小排序
- r?$ \frac{3}{2}-\frac{1}{2k} $
TSP
- 最近邻法NN:每次找一个最近的没走过的点
- r?$ \frac{1}{2}\left( \lceil log_2{n} \rceil +1 \right) $
- 这不好使,随着城市规模变大越来越不精确
- 有没有常数近似比算法?
- 在满足三角不等式的情况下,确实存在常数近似比算法
- 一般的TSP问题不存在常数近似比算法
总结
- 并非所有问题都能用近似算法解决
信息学竞赛中的整数和多项式
- 毕克大爷啊orz
- orz和郑州的讲课差不多
0x00 加法,乘法和乘方
一堆集合,有属于关系,做多n个元素,计数
做过的题
JSOI 子集选取
- $ 2^{nk} $
- 打表题
有什么用?
- 发现集合中的每个元素独立
- 最后的答案一定是$ x^n $的形式
求斐波那契数列的第n项
- 矩乘
- 多项式取模
- FFT优化多项式取模
- 考虑原根,对于1或9结尾的质数p,找一个数使$ x^2 $ = 5 (mod p)
- 认为x就是$ \sqrt{5} $,代进通项公式
- 也可以递归
- $ f_{2n-1}=f_{n}2+f_{n-1}2 $
- $ f_{2n}=\left(2f_{n-1}+f_{n}\right)f_{n} $
亿兆京垓(Radixphi)
- 直接贪心?会有精度问题。
- $ p^n $ 有两项, $ \sqrt{5} $ 和整数项,这两项的系数分别是斐波那契数列,分数不好搞,把整数项系数乘二以后都是整数
- 最终的目标是使选出集合中的$ \sqrt{5} $系数和为0,整数项系数和为2n
- 显然选n个第0项是合法的,但是不能选n个
- 选n个第0项?这和普通的斐波那契拆分一样。
- 那么从大往小贪心也是可以的
- 但是有负数?怎么办?
- 不妨把整个斐波那契数列往左移47位,即令n=n+n*f[47],然后从大往小贪心
- 这样贪心涉及的整个数列就都是正的
- 最后的答案再-47
- 稳!
卷积?
- 直接暴力
- 插值,可以快速幂
- FFT优化插值
求$ \sum_{i=0}{n}ik $
- 差分拆成组合数
- 高斯消元
- 插值
生成树计数
- Matrix-Tree定理
- 基尔霍夫矩阵
生成树计数改:边分红蓝两种,要求统计恰好含有k条红边的生成树个数
- 设红边为x,蓝边为1
- 还想刚才那么搞,最后$ x^k $就是要求的生成树个数
- 多项式运算不好做,插值
生成树计数改二:边分红黄蓝绿四种,要求红色不少于黄色,蓝色不少于绿色
-红边$ {x^2}y \(,黄边y,蓝边\) x{y^2}$,绿边x
0x01 生成函数
- 断线
0x02 Burnside引理 Polya定理
- 这公式太烦了我实在不能在一页ppt的时间里敲出来
总结
- orz 晚上试机,尝试在linux下码了个对拍,打了个起床困难综合征,居然Day0都有一道提答
- 系统是Ubuntu 14.04 LTS
- 没有IDE啊,我怎么遭得住
- 临时学习命令行