退役之前写的 然后因为退役就咕咕咕了...
后来发现数学考试能用的到个鬼就发布出来了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个人站对, 我们有\(\binom n2\)种选法选出站对的人, 剩下人有\((n-2)!\)种站法, 一共有\(\binom n2*(n-2)!\)种.
...
如果有至少k个人站对, 我们有\(\binom nk\)种方法选出站对的人, 剩下人有\((n-k)!\)种站法, 一共有\(\binom nk*(n-k)!\)种.

根据容斥, 令\(F(k)\)表示要求至少有\(k\)个人站对的情况总数, 即\(F(k)=\binom 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)^k\binom ni(n-k)!
\]
这样就搞定了~ 那么这个容斥系数\(\pm1\)是怎么来的呢?
我们发现, 至少\(m\)个人站对的话, 一定有\(0,1,2,3...m-1\)个人站对了, 那我们在之前的过程中重复统计了多少次呢?
我们有\(\binom mk\)次统计至少\(k\)个人站对的情况, 所以一共多统计了
\[
\sum_{k=0}^{m-1}(-1)^k\binom mk
\]
这么多次, 我们只需要减回去就行了~ 那这玩意怎么推啊?
我们可以知道有这么个东西: (牛顿)二项式定理:
\[
(x+y)^k=\sum_{i=0}^n\binom nix^iy^{n-i}
\]
所以
\[\sum_{k=0}^{m-1}(-1)^k\binom mk=\sum_{k=0}^m(-1)^k\binom mk-(-1)^m\binom mm=(1+(-1))^m-(-1)^m=(-1)^m\]
即对于每个\(m\), \(F(m)\)被多统计了\(-(-1)^m\)次, 减掉就行了~

是不是很简单? 主要就是利用了
\[
\sum_{k=0}^n(-1)^k\binom nk=0
\]
这个性质, 不过嘛, 有个小例外, 就是当\(n=0\)时, 值应该为1. 所以我们要改一改:
\[
\sum_{k=0}^n(-1)^k\binom 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]\binom nmg(m)
\]
然后我们发现有个\([n-m=0]\), 那就把刚才非常炫酷的性质
\[
\sum_{k=0}^n(-1)^k\binom nk=[n=0]
\]
代进去好了~
\[
=\sum_{m=0}^n\sum_{k=0}^{n-m}(-1)^k\binom {n-m}k\binom nmg(m)
\]
然后\(\binom {n-m}k\binom nm\)表示了从\(n\)中选两个长度分别为\(m\)和\(k\)的子集, 所以和\(\binom nk\binom {n-k}m\)等价, 那我们调整(jiao)一下柿纸里可爱的求和符号~
\[
=\sum_{k=0}(-1)^k\binom nk\sum_{m=0}^{n-k}\binom{n-k}mg(m)
\]
好的我们看到最后的小朋友\(\sum_{m=0}^{n-k}\binom{n-k}mg(m)\)有那么一点眼熟~ 你好啊, \(f\)君~
\[
g(n)=\sum_{k=0}(-1)^k\binom nkf(n-k)
\]
而且很显然, \(f(n-k)\)在我们的假设下就是\((n-k)!\), 所以和我们上面计算的结果是一个样的~

然后我们把上面的柿子换一下下标, 让它在数学的角度看更好看一点...从我的角度并看不出它好看在哪qwq
这样我们就推出了大名鼎鼎的二项式反演!!
\[
f(n)=\sum_{k=0}^n\binom nkg(k) \\
g(n)=\sum_{k=0}^n(-1)^{n-k}\binom nkf(k)
\]


我们考虑另一个小问题:

求长度为\(n\)且仅包含小写英文字母且循环节长度恰为\(n\)的字符串的个数。
循环节……就是最短的复制若干遍后拼起来跟原串相等的字符串。
\(n\leqslant10^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. 本文的\(\binom 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)
    \]

【学术篇】The Xuanku Inversion Magic学习笔记的更多相关文章

  1. 第三篇 功能实现(3) (Android学习笔记)

    第三篇 功能实现(3) ●发一个广播和启动一个隐式的Intent非常像,那么它们之间有什么区别呢? Implicit Intents (sent via startActivity( )) and B ...

  2. 第三篇 功能实现(2) (Android学习笔记)

    第三篇 功能实现(2) ●Activity的四种启动模式 Activity的启动模式有四种,分别是standard.singleTop.singleTask和singleInstance. 在Andr ...

  3. 第三篇 功能实现(1) (Android学习笔记)

    第三篇 功能实现(1) 第8章 Android应用程序组成 ●Android的一些中.底层基础知识 ※ Android Framework 启动过程 Android手机系统本质上是一个基于Linux的 ...

  4. 我的第一篇博客:requestAnimationFrame学习笔记

    通常,我们在浏览器中写动画会用到哪些技术呢? flash 可以实现一些非常复杂的动画,但随着HTML5的成熟,个人感觉flash终究会成为明日黄花. css3 当前大部分现代浏览器已经对css3支持的 ...

  5. Git-第五篇廖雪峰Git教程学习笔记(4)分支

    1.一开始,只有一个主分支(master),HEAD指向Master,而Master指向主分支.现在我们创建dev分支. lfy@lfy-PC MINGW64 /c/fyliu/lfyTemp/git ...

  6. Git-第四篇廖雪峰Git教程学习笔记(3)远程仓库,克隆远端库

    1.本次连接的是gitHub仓库. 1>创建SSH Key. ssh-keygen -t rsa -C "youremail@example.com" lfy@lfy-PC ...

  7. Git-第三篇廖雪峰Git教程学习笔记(2)回退修改,恢复文件

    1.工作区 C:\fyliu\lfyTemp\gitLocalRepository\yangjie 2.版本库 我们使用git init命令创建的.git就是我们的版本库.Git的版本库里存了很多东西 ...

  8. Git-第二篇廖雪峰Git教程学习笔记(1)基本命令,版本回退

    1.安装Git-2.16.2-64-bit.exe后,设置用户名,用户邮箱 #--global参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地 ...

  9. 这篇SpringBoot整合JSON的学习笔记,建议收藏起来,写的太细了

    前言 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛. 采用完全独立于编程语言的文本格式来存储和表示数据. 简洁和清晰 ...

随机推荐

  1. 模仿JQuery封装ajax功能

    需求分析 因为有时候想提高性能,只需要一个ajax函数,不想引入较大的jq文件,尝试过axios,可是get方法不支持多层嵌套的json,post方式后台接收方式似乎要变..也许是我不太会用吧..其实 ...

  2. Mac 安装cnpm

    1.先安装node   node的下载地址:http://nodejs.cn/download/   这个没什么好说的,安装完成后测试一下,在终端输入:node -v   这时候就可以看到安装的nod ...

  3. HTML中的img标签属性

    <img>标签 标签用于插入图片.它是单独使用的,没有闭合标签. <img src="https://fakeimg.pl/350x200/ff0000,128/000,2 ...

  4. java 三元运算符

    /* 一元运算符:只需要一个数据就可以进行操作的运算符 如:取反! 自增++ 自减 -- 二元运算符:需要两个数据才可以进行操作的运算符 如:加法+ 赋值= 三元运算符: 需要三个数据才可以进行操作的 ...

  5. 表结构转excel

    SELECTCOLUMN_NAME 列名,COLUMN_TYPE 数据类型,DATA_TYPE 字段类型,CHARACTER_MAXIMUM_LENGTH 长度,IS_NULLABLE 是否为空,CO ...

  6. Jmeter 将正则表达式提取的参数传给全局(跨线程组使用变量)

    一.使用正则表达式提取sessionId 1.在测试计划(跨线程组使用变量)--> 线程组(登录)--> 添加HTTP请求(登录接口) (1)创建测试计划: 勾选独立运行每个线程组(例如在 ...

  7. UVa 699 The Falling Leaves (树水题)

    Each year, fall in the North Central region is accompanied by the brilliant colors of the leaves on ...

  8. delphi文件类型

    1.DPR: Delphi Project文件,包含了Pascal代码.应用系统的工程文件2.PAS: Pascal文件,Pascal单元的源代码,可以是与窗体有关的单元或是独立的单元.3.DFM:D ...

  9. js打印窗口内容并当窗口内容较长时自动分页

    项目环境Angular: 方法1.window.print() HTML页面上的代码: <div id="tenementBillTable" class="dia ...

  10. vue之slot用法

    slot元素作为组件模板之中的内容分发插槽.这个元素自身将被替换. 有 name 特性的 slot 称为具名 slot. 有 slot 特性的内容将分发到名字相匹配的具名 slot. 一.单个组件 如 ...