zoukankan      html  css  js  c++  java
  • 【*篇】The Xuanku Inversion Magic学习笔记

    退役之前写的 然后因为退役就咕咕咕了...
    后来发现数学考试能用的到个鬼就发布出来了QwQ
    主要是方便自己没登录的时候查阅...
    显然子集什么的是没有学会的QwQ
    所以学OI的话不要看本文!!!!!>


    以下是懒得修改和编辑的原文:

    基本引用自vfleaking大大的幻灯片...
    我知道我写的没人看你萌只想要个链接而已~
    本文注释~ 为了不影响阅读就添加一个跳转咯~


    什么是反演:

    假设有两个函数(f)(g)满足

    [f(n)=sum_ka_{n,k}g(k) ]

    已知(g)(f)当然很水啦,而已知(f)(g)的过程就称为反演。
    在一般情况下,直接裸上求反演只能高斯消元解方程爽爽……
    利用一些特别的反演,可以给解题提供思路。
    即,可以用未知量表示已知量,然后解出来。

    反演(Inversion)的过程就像变一场炫酷(Xuanku(?))的魔术(Magic)一样, 所以我们就有了TXIM(The Xuanku Inversion Magic)这种东西 显然是在一本正经的胡说八道←_←


    我们考虑一个简单问题:

    说从前有(n)个人,编号为(1,…,n)
    (n)个人站成一排,编号为(i)的人不能站在第(i)个。
    求方案数。
    (n leqslant 10^5)

    啊 我会容斥! 小学生的容斥就不说了qwq, 我们说一下中学生的容斥.
    我们假如(n)个人都在随便站, 那么情况显然一共有(n!)种;
    如果有至少1个人站对, 我们有(n)种方法选出这个站对的人, 剩下人有((n-1)!)种站法, 一共有(n*(n-1)!)种.
    如果有至少2个人站对, 我们有(inom n2)种选法选出站对的人, 剩下人有((n-2)!)种站法, 一共有(inom n2*(n-2)!)种.
    ...
    如果有至少k个人站对, 我们有(inom nk)种方法选出站对的人, 剩下人有((n-k)!)种站法, 一共有(inom nk*(n-k)!)种.

    根据容斥, 令(F(k))表示要求至少(k)个人站对的情况总数, 即(F(k)=inom nk*(n-k)!), 我们有

    [ans=F(0)-F(1)+F(2)-F(3)+...+(-1)^n*F(n)=sum_{k=0}^n(-1)^kF(k)=sum_{k=0}^n(-1)^kinom ni(n-k)! ]

    这样就搞定了~ 那么这个容斥系数(pm1)是怎么来的呢?
    我们发现, 至少(m)个人站对的话, 一定有(0,1,2,3...m-1)个人站对了, 那我们在之前的过程中重复统计了多少次呢?
    我们有(inom mk)次统计至少(k)个人站对的情况, 所以一共多统计了

    [sum_{k=0}^{m-1}(-1)^kinom mk ]

    这么多次, 我们只需要减回去就行了~ 那这玩意怎么推啊?
    我们可以知道有这么个东西: (牛顿)二项式定理:

    [(x+y)^k=sum_{i=0}^ninom nix^iy^{n-i} ]

    所以

    [sum_{k=0}^{m-1}(-1)^kinom mk=sum_{k=0}^m(-1)^kinom mk-(-1)^minom mm=(1+(-1))^m-(-1)^m=(-1)^m ]

    即对于每个(m), (F(m))被多统计了(-(-1)^m)次, 减掉就行了~

    是不是很简单? 主要就是利用了

    [sum_{k=0}^n(-1)^kinom nk=0 ]

    这个性质, 不过嘛, 有个小例外, 就是当(n=0)时, 值应该为1. 所以我们要改一改:

    [sum_{k=0}^n(-1)^kinom nk=[n=0] ]

    这个问题我们就这么解决了. 先别急着撒花, 我们从另一个角度思考一下这个问题.
    (f(x))表示(x)个人随便站的方案数, (g(x))表示(x)个人都站错的方案数. 显然

    [f(n)=sum_{k=0}^ng(k) ]

    我们如果知道了(g)的表达式, 就可以推出(f)了.
    可是, 我们现在知道的明明是(f), 我们要求的红红才是(g).
    那能不能想办法用(f)来表示(g)呢? 我们不妨大胆的猜测是可以的.

    有一句看上去是废话的话:

    [g(n)=sum_{m=0}^n[n-m=0]inom nmg(m) ]

    然后我们发现有个([n-m=0]), 那就把刚才非常炫酷的性质

    [sum_{k=0}^n(-1)^kinom nk=[n=0] ]

    代进去好了~

    [=sum_{m=0}^nsum_{k=0}^{n-m}(-1)^kinom {n-m}kinom nmg(m) ]

    然后(inom {n-m}kinom nm)表示了从(n)中选两个长度分别为(m)(k)的子集, 所以和(inom nkinom {n-k}m)等价, 那我们调整(jiao)一下柿纸里可爱的求和符号~

    [=sum_{k=0}(-1)^kinom nksum_{m=0}^{n-k}inom{n-k}mg(m) ]

    好的我们看到最后的小朋友(sum_{m=0}^{n-k}inom{n-k}mg(m))有那么一点眼熟~ 你好啊, (f)君~

    [g(n)=sum_{k=0}(-1)^kinom nkf(n-k) ]

    而且很显然, (f(n-k))在我们的假设下就是((n-k)!), 所以和我们上面计算的结果是一个样的~

    然后我们把上面的柿子换一下下标, 让它在数学的角度看更好看一点...从我的角度并看不出它好看在哪qwq
    这样我们就推出了大名鼎鼎的二项式反演!!

    [f(n)=sum_{k=0}^ninom nkg(k) \ g(n)=sum_{k=0}^n(-1)^{n-k}inom nkf(k) ]


    我们考虑另一个小问题:

    求长度为(n)且仅包含小写英文字母且循环节长度恰为(n)的字符串的个数。
    循环节……就是最短的复制若干遍后拼起来跟原串相等的字符串。
    (nleqslant10^9)

    我们设(f(x))为长度为(x)的字符串的总数, (g(x))为长度为(x)而且周期为(x)的字符串(其实就是没有长度小于(x)的循环节啦~)的总数. 那么很显然

    [f(n)=sum_{d|n}g(d) ]

    woc这不是莫比乌斯反演么= = 水过了下一个..
    我们假设忘记了莫比乌斯反演. 现在我们只知道我们需要一个反演.
    我们假设有个函数(mu), 有如下的性质.

    [sum_{d|n}mu(d)=[n=1] ]

    你为什么那么熟练啊!
    然后我们按照套路找到一句废话并将上面的结论代入

    [g(n)=sum_{m|n}[frac nm=1]g(m)=sum_{m|n}sum_{d|frac nm}mu(d)g(m) ]

    套路来了, 因为(d|frac nm), 所以(md|n), 所以(m|frac nd)! 我们还是调整(jiao)一下柿纸里的求和符号~

    [g(n)=sum_{d|n}mu(d)sum_{m|frac nd}g(m) ]

    哟, 这不是(f)冒出来了么~

    [g(n)=sum_{d|n}mu(d)f(frac nd) ]

    我们冥冥之中感觉这个柿纸里的(mu)是传说中的莫比乌斯函数~

    然后就完了. 这其实就是莫比乌斯反演.
    或许还可以换一下下标

    [f(n)=sum_{d|n}g(d) \ g(n)=sum_{d|n}mu(frac nd)f(d) ]

    另外狄利克雷卷积角度的解释由于和本文无关但是我就是想提一下所以扔到了里~

    莫比乌斯反演


    注:

    1. 本文的(inom nm)均表示组合数, 即(C_n^m), 就系表达式为(C_n^m=frac {n!}{m!(n-m)!})的那个.
    2. ([x])((x)为表达式)表示当(x)成立时为1, 否则为0.
    3. 另外狄利克雷卷积形式的理解就是:

    [f(n)=sum_{d|n}g(d) =>f=g*1 \ f*mu=(g*1)*mu=g*(1*mu)=g*epsilon=g \ g=f*mu => g(n)=sum_{d|n}f(d)mu(frac nd) ]

  • 相关阅读:
    Java实现 洛谷 P1049 装箱问题
    (Java实现) 洛谷 P1781 宇宙总统
    (Java实现) 洛谷 P1319 压缩技术
    (Java实现) 蓝桥杯 国赛 重复模式
    qt编写一个只能运行单个实例的程序,不用Windows API
    Chaos Software Google Sync v10.1.1.0 和Syncovery Pro
    C++中new和delete的背后( call edx 调用虚表内的第二个函数(析构函数))
    C++中实现回调机制的几种方式(一共三种方法,另加三种)
    如何将Icon转成Bitmap(对ICON的内部格式讲的比较清楚)
    深入解析控制器运行原理
  • 原文地址:https://www.cnblogs.com/enzymii/p/8845911.html
Copyright © 2011-2022 走看看