zoukankan      html  css  js  c++  java
  • WC2017 Day2

    WC2017 Day2

    基于物理的信息学竞赛知识

    0x00 用处?

    • 模拟这个世界
    • 物理引擎
    • 工程学
    • OI!

    0x01 Overview

    1. 基础物理模拟
    2. Signed Distance Function(如何处理物理边界)
    3. State of the arts

    0x02 高中数学/物理

    • 导数
    • 牛顿三定律
    • 胡克定律(弹簧)
    • 万有引力定律

    1.你有一个装置,能在高度h处射出初速度为v的子弹,问子弹在初速度方向运动距离

    • 高中物理题,解显而易见
    • 如果考虑空气阻力?空气阻力正比于速度的平方?三次方?

    很难找到解析解,只能一帧一帧模拟,取数值解

    //主循环基本结构
    t=0,dt=0.001; //dt越小模拟越精确,但是耗时越长
    while(t<T){
        velocity+=dtforce/mass; //v+=dtf/m
        position+=dt*velocity;
        t+=dt;
    }
    

    2.两个球被理想弹簧连接,给出弹簧的k和l,球的初始位置与初始速度,求一段时间后两个球的位置

    同样可以使用模拟的方法解决

    //考虑这种主循环
    t=0,dt=0.001;
    while(t<T){
        velocity2=velocity+dtforce/mass;
        position+=dtvelocity;
        velocity=velocity2;
        t+=dt;
    }
    
    • 同时更新速度和位置,但都用更新前的速度和位置去更新
    • 这种方法被称为前向欧拉法,这种方法在数值上不稳定,不满足能量守恒
    • 考虑一个简单太阳系模型,只有地球和太阳,前向欧拉法会导致地球不断远离太阳
    • 具体原因可以用特征值和特征向量解释,特征值大于1,特征向量在多次模拟后就爆炸了。在此按下不表

    后向欧拉法呢?

    • 同时更新速度和位置,但都用更新后的速度和位置去更新
    • 看上去好像也不守恒,会把地球向太阳推一点
    • 特征值都小于1,特征向量多次模拟后会收敛成0,起码收敛了
    • 这和有空气阻力的时候很像啊?
    • 这给我们一些启示,似乎可以尝试在前向欧拉法里加一些空气阻力来使系统稳定

    都不精确,怎么办?

    • 根本原因是机械能不守恒
    • 有时Eular-Crom会好使,就是我在第一个主循环里写的那个
    • RK2算法
    • 想法很显然,我们取dt一半处的速度更新位置
    • 比较精确

    3.模拟一堆球被弹簧连接?

    • 和两个球的情况类似
    • 被称为弹簧——质点系统

    4.模拟一块布?

    • 把布剖分成三角形网格

    5.模拟一个果冻?

    • 四面体剖分,我们期望最后网格中都是三角形

    dt与稳定性与精度

    • 显然dt越小,稳定性和精度越好
    • 稳定未必精确:后向欧拉无条件稳定
    • 精确未必稳定:同理,RK2精确但没有后向欧拉稳定
    • 关系很复杂

    0x03 Signed Distance Field/Function(SDF 有符号距离场)

    三维生物小明站在(x,y,z),在每个点(ia,jb,k*c)上有一个直径r(r<a,b,c)的气球

    小明随便乱扔飞镖,求打中气球的概率,精确到1%

    • 精度要求很低,考虑随机一些方向,如何快速判断能否击中气球?

    SDF

    • 给定一个点集S
    • 一个点x到S的距离定义为x到S中所有点距离的最小值
    • 如果这个S将平面划分为两部分,定义S内部的点到S距离为负,外部的点到S距离为正
    • 此即为SDF
    • 单位圆的SDF?$ sqrt{x2+y2}-1 $
    • 矩形的SDF?请有兴趣的读者自行证明。
    • 如何形成两个图形的并的SDF?两个图形SDF取个min?
    • 好像不太行,虽然图形的并外面是对的,但是里面不对。不过符号都是对的。
    • 如何形成两个图形的交的SDF?两个图形SDF取个max?
    • 好像也不太行,这次图形的交里面都是对的,但是外面不对了。

    SDB

    • 定义Signed Distance Bound(SDB)
    • SDB与SDF同号
    • 要求|SDB|<=|SDF|
    • 其实SDB就是SDF的lower_bound
    • SDB可以直接用min和max取并和交
    • 这里的min和max都是绝对值以后!

    SDB减法

    • $ A-B=Acup complement{B} $
    • 如何取补集?直接符号取反

    用一个正方形的SDF构造很多正方形的SDF?

    • 1.这些正方形中心都在x轴上,边与坐标轴平行且位似

    • 定义 a Cmod b = $ a-b*left lfloor frac{a}{b}+0.5 ight floor $

    • SDF'(x,y)=SDF(x Cmod a,y)

    • 2.这些正方形绕一个点旋转对称

    • 把极角Cmod一下

    • 这个叫Space Folding

    • 解决方法实质是把所有点映射到一个正方形上

    SDF有什么用?

    • Collision Detection(防穿发补丁?)
    • 把这个碰撞粒子推出碰撞物体 ,关键在于方向和距离。
    • 方向?SDF的法向量,中心差分,前向欧拉搞一搞
    • 距离?-SDF

    射出一个子弹,问什么时候会撞到SDF表示的边界?

    • 这类问题被称作Ray Marching
    • 每次至少可以前进SDF(当前位置)距离
    • 设置一个eps
    • 复杂度是O(可过),可以卡但一般没人卡
    • 括弧,SDB也可以Ray Marching,一般是用SDB做,因为SDF不好求

    回到气球的问题

    • 对气球搞SDF,配合Space Folding
    • 然后Ray Marching

    三维生物小红站在(x,y,z)手持一个皮球

    提供一个函数d(x,y,z),返回点(x,y,z)距离边界的距离

    有Q个询问,给出初速度和方向

    保证边界曲率不会很大,每时每刻运行方向与边界夹角不小于10°,忽略引力,球与边界完美弹性碰撞,输出3次碰撞后的运行方向

    分析问题

    1. Collision Detection?把SDF缩小球的半径,这样球就等价于点了。
    2. 如何求碰撞平面的法向量?中心差分。
    3. 如何求反弹后的速度?原速度向量对法向量反射
    4. 为什么最多反弹三次?为什么曲率不大?为什么夹角不能太小?为了减小误差。

    终极问题

    给出一些星体,模拟它们的运动

    • 全裸:$ O(Tn^2) $
    • Barnes-Hut Tree Code
    • 把较远的一些点合并成一个质点

    0x04 前沿应用

    如何模拟水

    • 表现成一堆粒子/场
    • 有很多方法Eulerian V.S. Lagrangian
    • 两个特点:质量守恒(粒子化)和不可压缩性(压强场)

    如何模拟刚体

    • 碰撞处理

    可并行算法与分布式编程

    杜教啊orz

    杜教好像没怎么准备好

    0x00 OI中的常见并行算法

    • Bitset(详见2014年沈洋论文)

    • 排序网络(详见2016年金策论文)

    • 通过所有的01序列测试可以判断一个网络是否是排序网络

    • 在许多排序相关问题中只要考虑01序列就可解决

    0x01 分布式编程

    什么是分布式编程?

    • 你有n台计算机(n一般为100)
    • 你要使用这n台计算机共同完成一些任务
    • 计算机节点之间可以互相通信,但是通信的代价比较高昂,需要将许多信息放在一起传输
    • 可以使用库在本机搭起一个分布式环境

    分解一个$ 10^18 $那么大的数的质因数?

    分段检验

    素数筛?

    思想类似

    卷积?

    FFT每一步本来就是并行的

    排序?

    1. 随机选一小部分,排序
    2. 剩下的大部分按照小部分排序结果分到各个节点上,分别排序并合并

    $ 10^9 $个数,有一个数出现的次数了超过一半,找出那个数?

    每个节点处理$ 10^7 $个数,维护一个出现次数最多的计数器

    $ 3.5*10^8 $ 个数,求最小的只出现过一次的数?

    (留给有兴趣的读者自行思考

    • 哈希以后再发
    • 排序
    • 都行

    RMQ?

    • ST表每一层可以并行
    • 建线段树也可以并行
    • 询问怎么办?
    • 实质上每个询问需要查询$ log_2{n} $个值
    • 线段树上的值哈希打乱丢到M个节点里

    逆序对?

    • 划分成$ sqrt{M} $段,两两求逆序对
    • 能不能把$ nlog_2{n} $的做法除个M?
    • 2k次二分出归并过程中长为k的两段中的第l大数
    • 注意所有2k次二分可以并行进行

    字符串匹配?

    • 哈希可搞
    • KMP不太可搞

    后缀数组?

    也能并行,但需要传输的信息太多,要$ nlog_2{n} $

    求回文子串个数?

    • Manacher不太可搞
    • 分k块Manacher+inom{k}{2}个节点枚举端点位置+拓展KMP求LCP
    • 这里几乎掉线
    • 其实可以做到$ frac{N}{M} $,没听懂不表

    动态规划?

    • 只考虑N*N的二维动规
    • 状态值只和左上有关
    • 按对角线计算可以并行
    • 具体实现时可以按列进行,每算完$ frac{N}{M} $个传给右边一列
    • 石子归并?
    • 每个步长并行计算

    图论算法?

    一般只适用稠密图且点数较少

    极大独立集?

    Luby算法

    图的染色?

    Luby算法

    0x02 后记

    • 妈呀后面根本听不懂
    • 掉线不能重连
    • 也许我可以给我的学弟们讲这个。。。他们可能会用到。。
    • 据说WC会有一道分布式算法题,害怕,然而我串行算法都不会写,不要说并行了
    许愿弥生改二
  • 相关阅读:
    angularjs里对JS的lowercase和uppercase的完善
    UVA
    UVA
    MySQL 8.0X的安装与卸载命令
    回文树(模板+例题)
    UESTC
    UVALive
    BZOJ
    ACM-ICPC 2018 南京赛区网络预赛 I Skr (马拉车+hash去重)或(回文树)
    ACM-ICPC 2018 南京赛区网络预赛 E AC Challenge(状压dp)
  • 原文地址:https://www.cnblogs.com/LoveYayoi/p/6745461.html
Copyright © 2011-2022 走看看