zoukankan      html  css  js  c++  java
  • 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} ceil +1 ight) $
    • 这不好使,随着城市规模变大越来越不精确
    • 有没有常数近似比算法?
    • 在满足三角不等式的情况下,确实存在常数近似比算法
    • 一般的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} ight)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啊,我怎么遭得住
    • 临时学习命令行
    许愿弥生改二
  • 相关阅读:
    DeepL 人工智能翻译降临 deepl.com
    Node.js ESM(ECMAScript Modules)
    解决Ubuntu 20.04 LTS无法输入中文的问题
    实现pdnsd
    颜色
    Ubuntu 20.04 LTS
    JSX 空的根元素
    如何理解TypeScript接口​​中的语法[key: string]以及[key: number]
    React-Router-DOM
    video转canvas, 并截图
  • 原文地址:https://www.cnblogs.com/LoveYayoi/p/6745468.html
Copyright © 2011-2022 走看看