LWLAymh的备忘录

混乱节拍拼凑出血肉喧嚷

概统导论

习惯的更改

这一部分主要是和组合相关,文化课中的组合内容有一些很奇怪的形式,比如竞赛中为了避免巨量的字母符号所带来的丑陋形式,会将\(C_{ n }^k\)写作\(\binom{ n }{ k }\),而文化课中不允许此类更改,再者文化课中将\(C_{ n }^k a^{ n - k } b^k\)称作二项式的第\(k + 1\)项(从第\(1\)项开始编号),此等同样是一个需要改正的习惯.

从线性角度审视

首先我们有\(E ( aX + b ) = aE ( X ) + b , D ( aX + b ) = a^2 D ( X )\).

我们都知道期望满足线性可加,也就是\(E ( X_1 + X_2 ) = E ( X_1 ) + E ( X_2 )\),这很好理解,因为期望从一开始定义就是所有情况下的答案的加和,因此根据我们的加法交换律和结合律就可以导出上面的式子.

我们还知道期望的乘法在相互独立的条件下是可以直接乘的,也就是若\(X_1\)\(X_2\)相互独立,\(E ( X_1 X_2 ) = E ( X_1 ) E ( X_2 )\),同样是拆期望那个式子,使用乘法分配律得到.

而方差在相互独立的条件下同样是线性可加的,也就是只要\(X_1\)\(X_2\)相互独立,\(D ( X_1 + X_2 ) = D ( X_1 ) + D ( X_2 )\).从形式上证明是好证明的,我们考虑:

\[ \begin{aligned} D ( X_1 + X_2 ) & = E ( ( X_1 + X_2 )^2 ) - E^2 ( X_1 + X_2 ) \\ & = E ( X_1^2 ) + E ( 2 X_1 X_2 ) + E ( X_2^2 ) - E^2 ( X_1 + X_2 ) \\ & = E ( X_1^2 ) + 2 E ( X_1 ) E ( X_2 ) + E ( X_2^2 ) - ( E ( X_1 ) + E ( X_2 ) )^2 \\ & = E ( X_1^2 ) - E^2 ( X_1 ) + E ( X_2^2 ) - E^2 ( X_2 ) \\ & = D ( X_1 ) + D ( X_2 ) \end{aligned} \]

或者你也可以卷积然后求导啊!

如何从感性上理解这一点呢?很遗憾,笔者暂时没有想出从感性上理解的方式.从感觉上来讲,笔者比较相信这和独立变量以及正交性有关,查询相关资料得到了协方差的概念,也就是当两个变量独立的时候协方差为\(0\),不然\(D ( X_1 + X_2 )\)要再加上两倍的协方差.笔者的能力也就到此了.

对于数据统计部分,我们会发现它在做的其实都是一个套路:将数据放在均值的两侧,也就是减去均值,这样新的值的均值为\(0\),并且缩放权值,使得方差恰好为\(1\).这个做法在正态分布那里就已经展示了它的强大.这是下面概统的极重要的思想,似乎被称作”标准化”.如果我们痴迷于这个思想,就会发现概统的一切复杂的公式的目的只有两个:让误差均值为\(0\)的前提下,使得方差最小.

分布列

两点分布

直接写的话也就是\(P ( X ) = \begin{cases}p & X = 1 \\ 1 - p & X = 0 \\ 0 & other\end{cases}\),事实上这么写可能不太严谨,因为两点分布的\(X = 1\)\(X = 0\)两个事件互为对立,但笔者仍然选择这种形式来写,因为看着舒服.

考虑概率生成函数,自然是\(G ( x ) = ( 1 - p ) + px\).由此式子轻松推得\(E ( x ) = G ' ( 1 ) = p , D ( x ) = E ( x^2 ) - E^2 ( x ) = G ' ' ( 1 ) + G ' ( 1 ) - ( G ' ( 1 ) )^2 = p - p^2 = p ( 1 - p )\).

这里非要炫技用一下概率生成函数是因为笔者快忘了这玩意怎么用了,这个东西在下面几乎不会再用到了.

二项式分布

所谓\(n\)重伯努利试验,也就是\(n\)次两点分布的累计,满足\(P ( X = k ) = C_{ n }^k ( 1 - p )^{ n - k } p^k\),我们关注两个事情,也就是二项式分布的\(E ( X ) = np , D ( X ) = np ( 1 - p )\),也就是将两点分布的均值与方差给拆开单独累加了.

超几何分布

所谓不放回取球,考虑目前有\(N\)个数字,有\(M\)个是\(1\),剩下\(N - M\)个是\(0\),取出\(n\)次,取出了\(m\)\(1\)的概率.简单组合一下得到此概率为\(\frac{ C_{ M }^m C_{ N - M }^{ n - m } }{ C_{ N }^n } \\\),注意这里必须保证\(n \leq N\).

由范德蒙德卷积得知,\(\sum_{ m } C_{ M }^m C_{ N - M }^{ n - m } = C_{ N }^n\),因此该分布列所有情况之和为\(1\).

考虑其均值,从感性上讲必定是\(\frac{ nM }{ N }\).

从理性上讲,首先可以吸收恒等式+范德蒙德卷积,其次可以概率生成函数.

结合来讲,考虑每一个事件:它必然形如\(01101\)之类的,表示每一次取出时拿到的球.不难发现对于事件的全集,我们交换前两个球,仍然唯一对应到了事件的全集.也就是说取出的顺序并不重要,第一次取得到\(1\)的概率,和第二次取得到\(1\)的概率完全相等,这必然意味着两次的期望相等.

方差是\(n \frac{ N ( N - M ) ( N - n ) }{ N^2 ( N - 1 ) }\),不太想管这个东西了.

正态分布

前面的分布大都是离散的,而正态分布是连续函数,因此我们写\(f ( x ) = \frac{ e^{ - \frac{ ( x - \mu )^2 }{ 2 \sigma^2 } } }{ \sigma \sqrt{ 2 \pi } } \\\),是不是看着非常震撼!其中的方差是\(\sigma^2\),期望是\(\mu\).本着闲着没事干的原则,我们来彻底冷静一下剖析整个正态分布函数:

众所周知,标准正态分布满足\(\sigma = 1 , \mu = 0\),此时的函数也就是\(f ( x ) = \frac{ e^{ - \frac{ x^2 }{ 2 } } }{ \sqrt{ 2 \pi } }\).一个好奇是,你凭啥说所有情况下的概率之和为\(1\),事实上这其实是因为\(g ( x ) = e^{ - x^2 }\)的积分是\(\sqrt{ \pi }\),不会求这个积分.

观察\(g ( x ) = e^{ - x^2 }\)这个函数,你会发现它其实是想要模拟一个钟形曲线,也就是中间部分要更高,两边要更低.如果只是这样,我们完全可以用函数\(e^{ - | x | }\)模拟,但这样的曲线并不圆滑,中间有个小突起,这是因为绝对值本身的分段函数性质,因此直接把上面那个东西换成平方得到一个更圆滑的曲线,如果想要这个曲线横向放缩,则对横坐标使用变换,这就是\(\sigma\)的由来,将\(x \rightarrow \sigma x\),也就是在\(x\)那里除去一个\(\sigma\).而对这个曲线进行横向移动,也就是将\(x \rightarrow x - \mu\).

这也就引出所谓的\(3 \sigma\)原则了,同样是积分.

成对数据的统计

样本相关系数

对于若干数据\(( x_i , y_i )\),我们先进行标准化,也就是减去均值后再除以方差,这样做使得\(x , y\)分别的均值为\(0\),方差为\(1\).下面默认已经标准化过了.

不妨构造\(n\)维向量\(\vec{ x } = ( x_1 , x_2 , \cdots , x_n ) , \vec{ y } = ( y_1 , y_2 , \cdots , y_n )\),考虑它们的点乘\(\vec{ x } \cdot \vec{ y }\),不难发现由于方差为\(1\),因此\(| \vec{ x } | = | \vec{ y } | = \sqrt{ n }\),因此它们的点乘为\(n \cos \theta\),设\(r = \frac{ \vec{ x } \cdot \vec{ y } }{ n } = \cos \theta\).

如果\(\exists k\),\(\forall i , y_i = kx_i\),此时必有\(| r | = 1\),因此我们断言(为啥呢?其实是不太理解的啊)当\(| r |\)越靠近\(1\)的时候,\(x , y\)之间的线性关系越强.

最小二乘法

我们在上面的角度审视中提出了一个观点:在满足均值为\(0\)的前提下,使得方差最小.由此我们审视所谓的一元线性回归方程:\(Y = bx + a + e , E ( e ) = 0 , D ( e ) = \sigma^2\).

现在我们要做的就是,已知若干组数据\(( x_i , y_i )\),去构造一组\(a , b\)满足上面的条件.不妨令\(e_i = y_i - ( bx_i + a )\),若\(\sum e_i = 0\),必有\(a = \bar{ y } - b \bar{ x }\),带入解得当\(\sigma\)最小的时候,\(b = \frac{ \sum_{ i } ( x_i - \bar{ x } ) ( y_i - \bar{ y } ) }{ \sum_{ i } ( x_i - \bar{ x } )^2 } \\\).

提出质疑:为啥这里不需要对数据进行标准化呢?

因为标准化没有用,我们的目的是找到那个\(b\)使得\(\sigma\)最小,标准化说到底只是为了保证\(\sigma = 1\)的工具,没有必要在这里标准化.

独立性检验

使用卡方分布,懒得去学细节了.

独立性检验其实是依赖于这么一件事实:那就是如果两个事件独立,我们得知\(P ( AB ) = P ( A ) P ( B )\),那么我们反推,如果我们在现实中的估计中,发现\(P ( AB )\)\(P ( A ) P ( B )\)差的太大,那么我们就认定其没有独立性.

接下来不妨设在测试过程中估算出:\(P ( 00 ) = \frac{ a }{ n } , P ( 01 ) = \frac{ b }{ n } , P ( 10 ) = \frac{ c }{ n } , P ( 11 ) = \frac{ d }{ n }\).那么\(P ( A = 0 ) P ( B = 0 ) = \frac{ ( a + b ) ( a + c ) }{ n^2 }\).我们计算它与\(P ( 00 )\)的差,平方后除以\(P ( A = 0 ) P ( B = 0 )\)然后做四遍求和化简,得到\(\chi^2 = \frac{ n ( ad - bc )^2 }{ ( a + b ) ( a + c ) ( c + d ) ( b + d ) }\).

这有什么用呢?通过牛逼数学家的计算,我们可以认为如果独立性成立,那么\(P ( \chi^2 \geq x_\alpha ) = \alpha\).或者给出我们经验上的准则:

选取一个较小的\(\alpha\),并得知其对应的\(x_\alpha\),如果\(\chi^2 \geq x_\alpha\),推断独立性不成立,犯错的概率是\(\alpha\).反之断言其独立性成立,犯错的概率不可知,肯定\(\alpha\)越大犯错的概率越小.

函数导论

常用对数表

  1. \(\ln 2 = 0 . 693\).

  2. \(\ln 3 = 1 . 099\).

  3. \(\ln 5 = 1 . 609\).

  4. \(\ln 0 . 1 = - 2 . 303\).

  5. \(\ln 0 . 5 = - 0 . 693\).

常用指数表

  1. \(e = 2 . 718\).

  2. \(e^2 = 7 . 389\).

  3. \(e^3 = 20 . 086\).

  4. \(e^5 = 148 . 413\).

  5. \(e^{ 0 . 1 } = 1 . 105\).

  6. \(e^{ 0 . 5 } = 1 . 649\).

  7. \(e^\pi = 23 . 147\).

基本函数的图像及性质

\(f(x)=xe^x\)

图像

极值与极限

\(f ' ( x ) = ( x + 1 ) e^x\),\(x = - 1\)的时候,取最小值\(- \frac{ 1 }{ e }\).

另外\(\lim_{ x \rightarrow - \infty } f ( x ) = 0 \\\).


\(f(x)=x\ln x\)

图像

极值与极限

\(f ' ( x ) = 1 + \ln x , x = \frac{ 1 }{ e }\)的时候,有最小值\(- \frac{ 1 }{ e }\).

另外\(\lim_{ x \rightarrow 0^{ + } } f ( x ) = 0 \\\).


\(f(x)=\frac{e^x}{x}\)

图像

极值与极限

\(f ' ( x ) = \frac{ e^x ( x - 1 ) }{ x^2 } , x = 1\)的时候,有极小值\(e\).

另外\(\lim_{ x \rightarrow - \infty } f ( x ) = 0 \\\).


\(f(x)=\frac{\ln x}{x}\)

图像

极值与极限

\(f ' ( x ) = \frac{ 1 - \ln x }{ x^2 } , x = e\)的时候,有极大值\(\frac{ 1 }{ e }\).

另外\(\lim_{ x \rightarrow + \infty } f ( x ) = 0 \\\).


\(f(x)=x-\ln x\)

图像

极值与极限

\(f ' ( x ) = 1 - \frac{ 1 }{ x } , x = 1\)的时候,有最小值\(1\).


\(f(x)=\frac{x}{e^x}\)

图像

极值与极限

\(f ' ( x ) = \frac{ 1 - x }{ e^x } , x = 1\)的时候,有最大值\(\frac{ 1 }{ e }\).

另外\(\lim_{ x \rightarrow + \infty } f ( x ) = 0 \\\).

预处理函数

分离对数

Example

\(f ( x ) = ( 2 + x + ax^2 ) \ln ( x + 1 ) - 2 x\),已知\(x = 0\)是极大值点,求\(a\).

考虑分离对数后操作多项式,我们显然可找到\(0 < t < 1 , 2 + t + at^2 > 0 , 2 - t + at^2 > 0\),下面只考虑\(x \in [ - t , t ]\).此时\(f ( x ) = ( 2 + x + ax^2 ) ( \ln ( x + 1 ) - \frac{ 2 x }{ 2 + x + ax^2 } )\).

考虑令\(g ( x ) = \ln ( x + 1 ) - \frac{ 2 x }{ 2 + x + ax^2 }\),由于\(f ( 0 ) = 0\),只需证明\(g ( x ) \leq 0 , x \in [ - t , t ]\)即可.

而:

\[ \begin{aligned} g ' ( x ) & = \frac{ 1 }{ x + 1 } - \frac{ 4 - 2 ax^2 }{ ( 2 + x + ax^2 )^2 } \\ & = \frac{ x^2 ( a^2 x^2 + 4 ax + 6 a + 1 ) }{ ( x + 1 ) ( 2 + x + ax^2 ) } \\ \text{ sign } ( g ' ( x ) ) & = \text{ sign } ( a^2 x^2 + 4 ax + 6 a + 1 ) \end{aligned} \]

\(a^2 0^2 + 4 a 0 + 6 a + 1 = 0\),\(a = - \frac{ 1 }{ 6 }\).验证一下.

消去指数

Example

\(f ( x ) = e^x - \ln ( x + 1 ) + ax^3 - x^2 - 1\),若\(\forall x \in ( - 1 , 1 ) , f ( x ) \geq 0\),求\(a\).

\(f ( 0 ) = 0\),于是上面的条件等价于\(0\)\(( - 1 , 1 )\)的最小值点.

考虑\(f ' ( x ) = e^x - \frac{ 1 }{ x + 1 } + 3 ax^2 - 2 x\),则\(f ' ( 0 ) = 0\)恒成立.

讨论\(g ( x ) = 1 + e^{ - x } ( 3 ax^2 - 2 x - \frac{ 1 }{ x + 1 } )\)的正负,看\(g ' ( x ) = \frac{ x ( - 3 ax^3 + 2 x^2 + ( 9 a + 2 ) x + 6 a - 1 ) }{ ( x + 1 )^2 e^x }\).

接下来的讨论是简单的.

消元法

变化条件

Example

已知\(x + 2 y = 1\),求\(x^2 + y^2\)的最小值.

直接令\(x = 1 - 2 y\),带入即可.

变化所求

Example

已知\(x^2 + y^3 = 2\),求\(x + y\)的最小值.

这个的话不妨设其最小值为\(C\),有\(x + y \geq C\),移项得到\(y \geq C - x\),两边三次方然后带入.

换元法

普通参数方程

Example

已知\(x^2 + y^2 - xy = 1\),求\(x + y\)的最小值.

这个的话大概是这样,我们找到一个\(t\),使得\(x = f ( t ) , y = g ( t )\),然后换元.

比如这个题,你就可以凑成\(( x - \frac{ y }{ 2 } )^2 + ( \frac{ \sqrt{ 3 } }{ 2 } y )^2 = 1\),然后做三角换元.

齐次化构造

Example1(对数平均不等式)

求证\(\sqrt{ ab } < \frac{ a - b }{ \ln a - \ln b } < \frac{ a + b }{ 2 }\).

两边证明方式类似,这里只证明右半边,下面的证明的每一步均为充要的,因而可以倒退.

\[ \begin{aligned} \frac{ a - b }{ \ln a - \ln b } & < \frac{ a + b }{ 2 } \\ \frac{ a - b }{ a + b } & < \frac{ \ln \frac{ a }{ b } }{ 2 } \\ \frac{ \frac{ a }{ b } - 1 }{ \frac{ a }{ b } + 1 } & < \frac{ \ln \frac{ a }{ b } }{ 2 } \end{aligned} \]

换元,令\(t = \frac{ a }{ b }\),然后下面大力求导.

Example2

已知函数\(f ( x ) = 3 \ln x - ax\),若\(x_1 < x_2\)\(f ( x )\)的两个零点,求证\(f ' ( \frac{ x_1 + 3 x_2 }{ 4 } ) < 0\).

我们来分析已知,我们目前知道的是:

\[ \begin{cases} 3 \ln x_1 = ax_1 \\ 3 \ln x_2 = ax_2 \end{cases} \]

我们想要知道的是:\(\frac{ 12 }{ x_1 + 3 x_2 } < a\).

这就是整个题全部的部分,和前面的函数其实一点关系都没太有.那么这个东西怎么搞呢?我们先把\(a\)给换掉,事实上我们根据前面的方程有\(a = \frac{ 3 \ln \frac{ x_2 }{ x_1 } }{ x_2 - x_1 }\).

于是我们只需要证明:\(\frac{ x_1 + 3 x_2 }{ 4 } > \frac{ x_2 - x_1 }{ \ln \frac{ x_2 }{ x_1 } }\),这是一个很显然的齐次化形式.

Example3

已知函数\(f ( x ) = \ln x - ax\),其有两个零点\(x_1 \ne x_2\),求证\(x_1 x_2 > e^2\).

同样分析已知,我们得到的是:

\[ \begin{cases} \ln x_1 = ax_1 \\ \ln x_2 = ax_2 \end{cases} \]

通过简单线代知识我们知道,如果我们想把这两个条件同时用上,我们最好先相加再相减,这样这一步推下来就是充要的:

\[ \begin{cases} \ln x_2 - \ln x_1 = a ( x_2 - x_1 ) \\ \ln x_2 + \ln x_1 = a ( x_2 + x_1 ) \end{cases} \]

这里先把所求变形一下,我们把它改成\(\ln x_1 + \ln x_2 > 2\).

发现了什么?这个东西等价于\(a ( x_2 + x_1 ) > 2\),至此,我们用上了第二个式子,并且将其蕴含到了答案中.

接下来用第一个式子代换\(a\)即可.

Example4

已知\(f ( x ) = x^2 + axe^x - ae^{ 2 x }\)有三个不同的零点\(x_1 < x_2 < x_3\),求\(a\)的范围,并求证\(( 1 - \frac{ x_1 }{ e^{ x_1 } } )^2 ( 1 - \frac{ x_2 }{ e^{ x_2 } } ) ( 1 - \frac{ x_3 }{ e^{ x_3 } } ) = 1\).

考虑两边同时除以\(e^{ 2 x }\),这样得到\(g ( x ) = ( \frac{ x }{ e^x } )^2 + a \frac{ x }{ e^x } - a\),令\(t = \frac{ x }{ e^x }\)得到\(g ( t ) = t^2 + at - a = 0\).

考察\(g ( t ) = 0\)的两根\(t_1 < t_2\),根据韦达定理,首先需要满足\(\Delta = a^2 + 4 a > 0 \Rightarrow a > 0\),然后\(t_1 + t_2 = - a , t_1 t_2 = - a\).

接下来考察函数\(\frac{ x }{ e^x }\),这个函数图像我们很熟悉,如果想要最后有三个零点,又因为\(t_1 , t_2\)中必有一负,因此\(t_2 \in ( 0 , \frac{ 1 }{ e } )\).由此立得\(0 < a < \frac{ 1 }{ e ( e - 1 ) }\).

接下来考虑后面那个东西,其实就是简单韦达定理,随便做做.

同构化构造

Example1

\(x > 0\)时,\(ax ( e^{ ax } + 1 ) \geq 2 ( x^2 + 1 ) \ln x\)恒成立,求\(a\)取值范围.

一般这种题先判\(a\)的正负,注意到\(x > 1\)的时候右边恒大于\(0\),因此\(a > 0\).

观察这个式子,发现形式似乎很相似,更进一步地,我们把常数\(2\)放进\(\ln\),自然有:\(ax ( e^{ ax } + 1 ) \geq ( x^2 + 1 ) \ln x^2\).

考虑令\(t_1 = ax , t_2 = \ln x^2\),则:

\[ t_1 ( e^{ t_1 } + 1 ) \geq t_2 ( e^{ t_2 } + 1 ) \]

接下来分析函数\(f ( x ) = x ( e^x + 1 )\)的单调性,就可以得到\(a \geq \frac{ 2 }{ e }\).

不等式相关

基本不等式相关

方程角度的审视

我们曾经下过这么一个论断:即对于有一个方程限制的双变量,求另一个式子的最值,我们是可以有一套机械化方法探路的.具体而言,这个方法基于大部分情况下,我们只需要两个二元方程就可以得到确定的(唯一或者唯二或者常数个)原本的两个变量的值.

于是我们设一个常数来表示其中一个方程,另一个方程自然是题目给出的限制条件,我们只需要把所求转化为对于这个常数的限制就好了.

如果我们再去仔细揣摩这个过程,我们会发现一些更有趣的事情:即只要我们能做到”降次”这件事,我们似乎一定存在方程的解.这可能类似于所谓的齐次化构造\(\frac{ m }{ n } = k\).

那这意味着什么呢?在绝大多数情况下我们拿到的方程都是非齐次的方程,这给了我们机会去降次.

我们给出一个例题:

Example

已知\(n , m > 0 , 2 m + n = nm\),求\(n + m + \sqrt{ n^2 + m^2 }\)的最小值.

这个题有一个方式是观察到\(n , m , \sqrt{ n^2 + m^2 }\)是直角三角形的三条边然后使用三角换元.但我们接下来会给出一个更加厉害的做法:

我们想要知道它的最小值,就是想要证明下面这个不等式并且证明等号成立:

$$ \[\begin{aligned} n + m + \sqrt{ n^2 + m^2 } & \geq k \\ \Leftarrow \sqrt{ n^2 + m^2 } & \geq k - n - m \\ \end{aligned}\]

$$

如果\(n + m \geq k\),那么不等式显然成立,下面只需要证明\(n + m < k\)的情况:

\[ \begin{aligned} \sqrt{ n^2 + m^2 } & \geq k - n - m \\ \Leftarrow n^2 + m^2 & \geq ( k - ( n + m ) )^2 \\ \Leftarrow k^2 + ( n + m )^2 - 2 k ( n + m ) & \leq n^2 + m^2 \\ \Leftarrow k^2 + 2 nm - 2 k ( n + m ) & \leq 0 \\ \Leftarrow k^2 + n ( 2 - 2 k ) + m ( 4 - 2 k ) & \leq 0 \\ \Leftarrow k^2 & \leq n ( 2 k - 2 ) + m ( 2 k - 4 ) \end{aligned} \]

变形方程得到\(\frac{ 2 }{ n } + \frac{ 1 }{ m } = 1\),使用这个式子来降次:

$$ \[\begin{aligned} n ( 2 k - 2 ) + m ( 2 k - 4 ) & = 6 k - 8 + \frac{ n }{ m } ( 2 k - 2 ) + \frac{ m }{ n } ( 4 k - 8 ) \\ \end{aligned}\]

$$

要严谨一点的话我们需要证明\(4 k - 8 \geq 0\),\(k \geq 2\).这非常简单,因为\(k \geq n + m > 3\).

这就足够了么?不需要证明存在一个\(w = \frac{ n }{ m }\)使得带入到原方程中有解么?这个其实是显然易证的.

那么:

\[ n ( 2 k - 2 ) + m ( 2 k - 4 ) \geq 6 k - 8 + 2 \sqrt{ 8 ( k - 1 ) ( k - 2 ) } \]

这个等号可以取到,也就是说,只要满足:

\[ k^2 \leq 6 k - 8 + 2 \sqrt{ 8 ( k - 1 ) ( k - 2 ) } \]

那么这个\(k\)就是一个下界,特别地,如果满足:

\[ k^2 = 6 k - 8 + 2 \sqrt{ 8 ( k - 1 ) ( k - 2 ) } \]

那么这个\(k\)就是一个下确界,也就是我们想要求的最小值.

事情还没有解决(即使这个时候你已经能猜到\(k = 10\)是一个解了),接下来我们必须求出一个\(k\).

\[ \begin{aligned} k^2 & = 6 k - 8 + 2 \sqrt{ 8 ( k - 1 ) ( k - 2 ) } \\ k^2 - 6 k + 8 & = 2 \sqrt{ 8 ( k - 1 ) ( k - 2 ) } \\ ( k - 4 ) ( k - 2 ) & = 2 \sqrt{ 8 ( k - 1 ) ( k - 2 ) } \\ \sqrt{ k - 2 } & = \frac{ 2 \sqrt{ 8 ( k - 1 ) } }{ k - 4 } \end{aligned} \]

我们看上去走投无路了对么?其实不然,你发现这个式子两边的次是不等的,我们可以使用它降次!换言之,把这个\(\sqrt{ k - 2 }\)带入到上面去!

$$ \[\begin{aligned} ( k - 4 ) ( k - 2 ) & = 2 \sqrt{ 8 ( k - 1 ) } \frac{ 2 \sqrt{ 8 ( k - 1 ) } }{ k - 4 } \\ ( k - 4 ) ( k - 2 ) & = \frac{ 32 ( k - 1 ) }{ k - 4 } \\ \end{aligned}\]

$$

我想你这个时候又会发现我们走投无路了,但稍微思考一下就会发现,这个方程一定没有常数项(或者说\(k = 0\)是这个方程的一个解).

这样得到了一个二次方程,我们自然可以解出\(k = 10\).

泰勒展开

抽象函数的泰勒展开
$$ \[\begin{aligned} f ( x ) & = \sum_{ k \geq 0 } \frac{ f^{ ( k ) } ( x_0 ) }{ k ! } ( x - x_0 )^k \\ f ( x ) & = \sum_{ k \geq 0 } \frac{ f^{ ( k ) } ( 0 ) }{ k ! } x^k \\ \end{aligned}\]

$$

常用泰勒展开公式
  1. \(\frac{ 1 }{ 1 - x } = \sum_{ k \geq 0 } x^k = 1 + x + x^2 + \cdots \\\).

  2. \(e^x = \sum_{ k \geq 0 } \frac{ x^k }{ k ! } = 1 + x + \frac{ 1 }{ 2 ! } x^2 + \cdots \\\).

  3. \(\ln ( 1 + x ) = \sum_{ k \geq 1 } ( - 1 )^{ k - 1 } \frac{ x^k }{ k } = x - \frac{ 1 }{ 2 } x^2 + \frac{ 1 }{ 3 } x^3 + \cdots \\\).

极值点偏移

Example1

已知函数\(f ( x ) = \ln x - ax\),其有两个零点\(x_1 \ne x_2\),求证\(x_1 x_2 > e^2\).

极值点偏移的形式,应该是形如\(g ( x ) = a\)有两个解\(x_1 , x_2\),然后使得\(x_1 + x_2\)满足一定条件.因此我们先变形条件:

\[ \begin{cases} \frac{ \ln x_1 }{ x_1 } = a \\ \frac{ \ln x_2 }{ x_2 } = a \end{cases} \]

也就是目前我们构造出了函数\(g ( x ) = \frac{ \ln x }{ x }\),观察\(g ( x )\)图像立得\(x_1 + x_2 > 2 e\).

我们发现,\(x_1 x_2 \leq \frac{ ( x_1 + x_2 )^2 }{ 4 }\),这个形式看上去非常正确!但是问题在于,我们好像不太能去变形不等式了,怎么办呢?

考虑对着我们要证明的东西去搞,极值点偏移可以解决相加性问题,因此我们变形所求为\(\ln x_1 + \ln x_2 < 2\),然后令\(t_1 = \ln x_1 , t_2 = \ln x_2\),带入立有:

\[ \begin{cases} \frac{ t_1 }{ e^{ t_1 } } = a \\ \frac{ t_2 }{ e^{ t_2 } } = a \end{cases} \]

\(g ( x ) = \frac{ x }{ e^x }\)恰好也是满足\(x_1 + x_2 > 2\)的这么一个函数!于是我们就解决了问题.

Example2

\(f ( x ) = x ( 1 - \ln x )\),\(b \ln a - a \ln b = a - b\),求证\(2 < \frac{ 1 }{ a } + \frac{ 1 }{ b } < e\).

首先变形条件得到\(b ( 1 + \ln a ) = a ( 1 + \ln b )\),得到\(f ( \frac{ 1 }{ a } ) = f ( \frac{ 1 }{ b } )\),左半部分就是经典极值点偏移.

那么右半部分怎么做呢?我们来考虑:

\(f ' ( x ) = - \ln x\),其在\(( 0 , 1 ) \uparrow , ( 1 , + \infty ) \downarrow\),考察极值点偏移,我们想要证明\(\frac{ 1 }{ b } < e - \frac{ 1 }{ a }\),我们就想办法把\(\frac{ 1 }{ b }\)\(e - \frac{ 1 }{ a }\)扔到同一个区间里,而它们确实同在\(( 1 , + \infty )\)这个区间内.

比较有启发性的是,你发现\(\frac{ 1 }{ b } , e - \frac{ 1 }{ a }\)\(\frac{ 1 }{ a } , e - \frac{ 1 }{ b }\)这两对必有一对在同一个区间内部.

现在我们就可以套路化了:

\[ \begin{aligned} \frac{ 1 }{ b } & < e - \frac{ 1 }{ a } \\ f ( \frac{ 1 }{ a } ) & = f ( \frac{ 1 }{ b } ) > f ( e - \frac{ 1 }{ a } ) \end{aligned} \]

对着上面那个函数证明即可.

Example3

\(f ( x ) = e^{ x - 1 } - ax\)\(( 0 , 2 )\)有两个零点\(x_1 , x_2\),求证\(x_1 x_2 > \frac{ 1 }{ a }\).

首先要证明\(a\)的范围啊,我们不加证明地给出:\(a \in ( 1 , \frac{ e }{ 2 } )\),并且\(( - \infty , 1 + \ln a ) \downarrow , ( 1 + \ln a , + \infty ) \uparrow\).

这个其实差不多啊,简单来说就是首先列方程:

\[ \begin{cases} ax_1 = e^{ x_1 - 1 } \\ ax_2 = e^{ x_2 - 1 } \end{cases} \]

我们知道,一般双变量的问题加法会比较好做(原理是加法便于看单调区间),因此现在我们有两条路可走:要么变化所求,两边取\(\ln\),要么变化已知.

我们发现如果变化所求,我们还得对已知两边取\(\ln\),这也太麻烦了,不如直接变化已知.具体地,我们把已知的式子相乘就可以得到\(x_1 x_2\)\(x_1 + x_2\)之间的关系,带下来就可以了.然后观察单调区间做极值点偏移.最后的式子应该形如\(0 < f ( 2 + \ln a - x_2 )\),也就是\(0 < ae^{ 1 - x_2 } - a ( 2 + \ln a - x_2 )\).

但是这样有一个问题,我们把\(f\)带进去,你会发现最后我们的式子同时带有\(a , x_2\),这个就难做了,咋办呢?考虑拿\(ax_2 = e^{ x_2 - 1 }\)操作一下把\(a\)消掉就好了.

切割线放缩

基本的切割线不等式
  1. \(e^x \geq x + 1\).

  2. \(\frac{ x - 1 }{ x } \leq \ln x \leq x - 1\).

乍一看非常平凡,事实上有一些不平凡的推论:

  1. \(\ln ( n + 1 ) < \sum_{ k = 1 }^n \frac{ 1 }{ k }\).

考虑\(\ln ( \frac{ n + 1 }{ n } ) < \frac{ 1 }{ n }\),左右两边分别求和得到上面的式子.

  1. \(\ln n > \sum_{ k = 2 }^n \frac{ 1 }{ k } , n > 1\).

这个怎么证明呢?考虑左右取负,也就是需要证明\(\ln \frac{ 1 }{ n } < - \sum_{ k = 2 }^n \frac{ 1 }{ k }\).

考虑\(\ln ( \frac{ n - 1 }{ n } ) \leq - \frac{ 1 }{ n }\),两边求和得到上式.

  1. \(\sum_{ k = 1 }^n ( \frac{ k }{ n } )^n < \frac{ e }{ e - 1 }\).

考虑\(n \ln ( \frac{ k }{ n } ) \leq k - n\),也就有\(( \frac{ k }{ n } )^n \leq e^{ k - n }\),两边求和得到上式.

一般的切割线放缩
Example1

\(f ( x ) = x \ln x\),若\(f ( x ) = b\)有两个实数根\(x_1 , x_2 ( x_1 < x_2 )\),求证:\(be + 1 < x_2 - x_1 < \frac{ e^{ - 3 } + 2 + 3 b }{ 2 }\).

注意到\(f ( x )\)下凸,考虑求出两条切线,那么这两条切线与\(y = b\)的交点之差要大于等于\(x_2 - x_1\),两条割线交点之差要小于等于\(x_2 - x_1\).

先求好求的割线,一般而言,我们考虑边界情况,也就是\(b \rightarrow - \frac{ 1 }{ e }\)的情况,为了让这种情况有解,我们的割线必过\(( \frac{ 1 }{ e } , - \frac{ 1 }{ e } )\).

考虑直接选取\(( 0 , 0 )\)\(( 1 , 0 )\)作为另外两个点,这两条割线就是\(x = - y\)\(x = ( e - 1 ) y + 1\).做差立得上面的式子.

那么后半边怎么证明呢?我们考虑一个想法是:这题既然出出来了,它必然不可能是虚的.因此我们要找的切点不可能过于离谱.

另外一个事实是,我们考虑如果我们找到了一条切线,那么由于不等式的右边是定值,我们肯定想要让令一条切线稍微平均一下,使得\(( x_2 - x_1 )_{ \max }\)尽可能地小对吧!

我们不妨设我们要找的两个切点,一个横坐标是\(u\),另一个是\(v\),其中\(v < \frac{ 1 }{ e } < u\),那么两条切线分别是:

\[ \begin{cases} x = \frac{ y - f ( u ) }{ f ' ( u ) } + u \\ x = \frac{ y - f ( v ) }{ f ' ( v ) } + v \end{cases} \]

那么,现在我们要做的就是找到一组\(( u , v )\),使得:

\[ \frac{ b - f ( u ) }{ f ' ( u ) } + u - \frac{ b - f ( v ) }{ f ' ( v ) } - v = \frac{ e^{ - 3 } + 2 + 3 b }{ 2 } \]

感觉很难搞啊,我们不妨让\(u = 1\),自然有:

\[ \frac{ ( f ' ( v ) - 1 ) b + f ( v ) - vf ' ( v ) }{ f ' ( v ) } = \frac{ e^{ - 3 } + 3 b }{ 2 } \]

然后我们凑系数,上面的式子,我们大胆猜测:

\[ \begin{cases} \frac{ f ' ( v ) - 1 }{ f ' ( v ) } = \frac{ 3 }{ 2 } \\ \frac{ f ( v ) - vf ' ( v ) }{ f ' ( v ) } = \frac{ e^{ - 3 } }{ 2 } \end{cases} \]

考虑让\(f ' ( v ) = - 2\),则\(v = e^{ - 3 }\),带入发现正好适配.

凹凸性反转

Example1

求证:\(\forall x \in ( 0 , + \infty ) , \ln x + 1 > \frac{ 1 }{ e^{ x + 1 } } - \frac{ 2 }{ e^2 x }\).

这个式子看上去就很震撼,那么我们该怎么处理呢?

我们知道常数项在导数中是好处理的,而且我们通过强大的注意力,发现右边那个式子如果乘以\(x\),他就是一个凸函数了,而左边也是有凹凸性的.

因此我们变形为\(x \ln x + x > \frac{ x }{ e^{ x + 1 } } - \frac{ 2 }{ e^2 }\),然后证明左边的最小值\(\geq\)右边的最大值.

比较大小

接下来以一个题为例,介绍一下几种估算/严谨的比较大小方式.

Example1

已知\(a = 0 . 1 e^{ 0 . 1 } , b = \frac{ 1 }{ 9 } , c = - \ln 0 . 9\),求比较\(a , b , c\)的大小关系.

二阶导数

我们上面声明过了二次导数可以判断极值类型,我们用这个方式来计算\(a\)\(c\)的大小关系.

构造函数\(f ( x ) = xe^x + \ln ( 1 - x )\),则\(f ( 0 . 1 ) > 0 \Rightarrow a > c\).

考察\(f ( 0 ) = 0\),\(f ' ( 0 ) = 0\),\(f ' ' ( 0 ) = 4 > 0\),则\(f ( 0 ) = 0\)是一个极小值点,并在接下来有着增大的趋势.因此我们可以估算\(f ( 0 . 1 ) > 0\).

估算定积分

考察\(a\)\(b\)的大小关系,不妨设\(f ( x ) = ( 1 - x ) e^{ 1 - x } - \frac{ 1 }{ 10 x }\),则\(f ( 0 . 9 ) < 0 \Rightarrow b > a\).

注意到\(f ( 1 ) = - \frac{ 1 }{ 10 }\),\(f ' ( 1 ) = - \frac{ 9 }{ 10 }\),考虑估算一下积分,那么\(f ( 0 . 9 ) \approx f ( 1 ) - f ' ( 1 ) 0 . 1 = - \frac{ 1 }{ 100 } < 0\).

你可能会觉得这个\(- \frac{ 1 }{ 100 }\),是不是不太能那么肯定地估算啊.但是实际上,我们考察\(f ' ( x ) = ( x - 2 ) e^{ 1 - x } + \frac{ 1 }{ 10 x^2 }\),这个东西在\([ 0 . 9 , 1 ]\)上直觉上平均值是大于\(- \frac{ 9 }{ 10 }\)的,这样就有道理多了(真的么).

泰勒展开

上面提过了,这里略过.

正经做法

接下来开抄标答.

\(f_a ( x ) = xe^x , f_b ( x ) = \frac{ x }{ 1 - x } , f_c ( x ) = - \ln ( 1 - x )\).

这样当\(x = 0 . 1\)的时候所有的数字都被正确表示了.

比较\(a , b\):

考虑它们都有乘除项,考虑使用对数把乘除改为加减,立有:

\[ \begin{aligned} y & = \ln ( a ) - \ln ( b ) = x + \ln ( 1 - x ) \\ y ' & = 1 - \frac{ 1 }{ 1 - x } = \frac{ - x }{ 1 - x } \end{aligned} \]

注意到\(x = 0\)的时候\(y = 0\),又注意到其在\(( 0 , 0 . 1 )\)上单减,这样立有\(a < b\).

比较\(a , c\):

$$ \[\begin{aligned} y & = a - c = xe^x + \ln ( 1 - x ) \\ y ' & = ( x + 1 ) e^x - \frac{ 1 }{ 1 - x } = \frac{ ( 1 + x ) ( 1 - x ) e^x - 1 }{ 1 - x } \\ \end{aligned}\]

$$

注意到\(x = 0\)的时候\(y = 0\),又注意到其在\(( 0 , 0 . 1 )\)上单增,这样立有\(a > c\).

经验教训:在构造函数的时候,你一定要找一些简单一点的函数来构造,最好不要带有系数.

数列导论

递归式的求解

特征根法

一个常系数的\(k\)阶线性递推关系形如:

\[ \begin{aligned} a_n & = P_n + \sum_{ i = 1 }^k c_i a_{ n - i } , n \geq k \\ a_0 & = C_0 , a_1 = C_1 , . . . , a_{ k - 1 } = C_{ k - 1 } \end{aligned} \]

\(P = 0\)时,称作齐次线性递推.

特征方程

我们称方程\(r^k = \sum_{ i = 1 }^k c_i r^{ k - i }\)是该递推关系的特征方程,方程的解叫做该递推关系的特征根.

二阶线性齐次递推

若其特征方程有两个不同的根\(r_1\)\(r_2\),那么存在两个常数\(\alpha_1\)\(\alpha_2\),满足\(a_n = \alpha_1 r_1^n + \alpha_2 r_2^n\).

若其特征方程有两个相同的根\(r\),那么存在两个常数\(\alpha_1\)\(\alpha_2\),满足\(a_n = \alpha_1 r^n + \alpha_2 nr^n\).

先考虑前者的证明,首先考虑对于\(n = 0\)或者\(n = 1\)的情况,我们考虑求出一组\(\alpha_1\)\(\alpha_2\)来满足:

\[ \begin{aligned} C_0 & = \alpha_1 + \alpha_2 \\ C_1 & = \alpha_1 r_1 + \alpha_2 r_2 \end{aligned} \]

\(r_1 \ne r_2\),可以解得:

\[ \begin{aligned} \alpha_1 & = \cfrac{ C_1 - C_0 r_2 }{ r_1 - r_2 } \\ \alpha_2 & = C_0 - \alpha_1 \end{aligned} \]

接下来考虑数学归纳:

\[ \begin{aligned} a_n & = c_1 a_{ n - 1 } + c_2 a_{ n - 2 } \\ & = c_1 ( \alpha_1 r_1^{ n - 1 } + \alpha_2 r_2^{ n - 1 } ) + c_2 ( \alpha_1 r_1^{ n - 2 } + \alpha_2 r_2^{ n - 2 } ) \\ & = \alpha_1 ( c_1 r_1^{ n - 1 } + c_2 r_1^{ n - 2 } ) + \alpha_2 ( c_1 r_2^{ n - 1 } + c_2 r_2^{ n - 2 } ) \\ & = \alpha_1 r_1^n + \alpha_2 r_2^n \end{aligned} \]

接下来考虑后者,首先我们有\(\Delta = c_1^2 + 4 c_2 = 0\),考虑初始条件:

$$ \[\begin{aligned} C_0 & = \alpha_1 \\ C_1 & = \alpha_1 r + \alpha_2 r \\ \end{aligned}\]

$$

接下来我们考虑数学归纳:

\[ \begin{aligned} a_n & = c_1 a_{ n - 1 } + c_2 a_{ n - 2 } \\ & = c_1 ( \alpha_1 r^{ n - 1 } + \alpha_2 nr^{ n - 1 } - \alpha_2 r^{ n - 1 } ) + c_2 ( \alpha_1 r^{ n - 2 } + \alpha_2 nr^{ n - 2 } - 2 \alpha_2 r^{ n - 2 } ) \\ & = a_n - c_1 \alpha_2 r^{ n - 1 } - 2 c_2 \alpha_2 r^{ n - 2 } \end{aligned} \]

我们接下来只需证明\(c_1 r + 2 c_2 = 0\)即可.根据方程,不难发现\(r = \cfrac{ c_1 }{ 2 }\),根据\(\Delta = 0\),自然得证.

更一般的情况

在上面做\(k = 2\)的时候,我们已经发现了这个问题的棘手.甚至动用了求根公式.那有没有什么办法能让这个方法拓展到更高维呢?我们引入线性代数.

重定义向

由于《线性代数》一书的作者与笔者使用字母习惯略有差异,为了防止出错,下面一律使用原书的使用习惯,可能会与前面的定义不尽相同.

给定\(a_0 , . . . , a_n\),其中\(a_0 \ne 0\),对于所有的\(k \in \mathbb{ N }\),若有下列式子成立:

\[ a_0 y_{ k + n } + a_1 y_{ k + n - 1 } + \cdots + a_n y_k = z_k \]

则称为一个\(n\)阶线性差分方程(或递归关系).为了简化,通常取\(a_0 = 1\).若\(\{ z_k \}\)是零序列,则称其是一个齐次线性方程.

引入矩阵

我们注意到,对于齐次差分方程而言,如果不给定\(y_0 , \cdots y_{ n - 1 }\),只是构造一组满足条件的\(y\)的话,自然的想法是令\(y_k = r^k\).其中\(r\)是辅助方程\(a_0 r^{ n } + a_1 r^{ n - 1 } + \cdots + a_n = 0\)的一个根.

注意到如果我们将上面的内容看作是\(T : \{ y_k \} \mapsto \{ z_k \}\)这样一个映射,这显然是一个线性变换.这意味着齐次方程\(a_0 y_{ k + n } + a_1 y_{ k + n - 1 } + \cdots + a_n y_k = 0\)的解集就是\(T\)的核,设为\(H\),不难发现只要给定\(y_0 , \cdots y_{ n - 1 }\),这个解就唯一确定,将它们看作自由变量,这意味着\(\dim H = n\).

还没完,注意到我们解方程可以解出\(n\)个根,如果这\(n\)个根互不相同,这意味着它们必然线性无关.这样的话我们就可以轻松求得所有的解集,就算给定了\(y_0 , \cdots y_{ n - 1 }\),我们也可以用解集的基通过线性组合拟合出来答案.

至于如果这\(n\)个根有重根的话怎么办,我们发现这可能拟合失败.根据上面的经验,我们发现我们需要找到另外几组线性无关的\(\mathbb{ R }^k\)的向量来拟合.

最后,如果对于非齐次线性递推的答案,可能就需要猜根了.总之需要猜出总共\(n\)个线性无关的根,然后拟合初值.我们如此做:对于一个出现了\(m\)次的根\(r\),我们注意到\(r^k , kr^k , \cdots , k^{ m - 1 } r^k\)都是满足条件的解,且他们线性无关.这个结论是怎么得到的呢?

首先,我们注意到如果初始条件成立,我们只要错位相减就可以做数学归纳,也就是说我们需要证明初始条件成立,下面以\(kr^k\)作为例子,即证明:

\[ a_0 nr^n + a_1 ( n - 1 ) r^{ n - 1 } + \cdots + a_1 r = 0 \]

是满足条件的.

用一下简单的生成函数技巧,如果有两个\(r\)作为根,必然意味着原方程形如\(( y - r )^2 P\),其中\(P\)是一个关于\(y\)的多项式.

我们把它写开:\(( y^2 - 2 ry + r^2 ) P = 0\),然后我们用\(kr^k\)去代替\(r^k\),不难发现代替后右边还是个多项式,而左边变成了\(0\),这意味着这个根一定可行.

对于更高次的问题,只需要用二项式定理解决一下就行.

不过!我们可以用导数解决这个问题:我们对原方程两边求导.

$$ \[\begin{aligned} a_0 r^{ n + k } + a_1 r^{ n + k - 1 } + \cdots + a_1 r^k & = 0 \\ a_0 ( n + k ) r^{ n + k - 1 } + a_1 ( n + k - 1 ) r^{ n + k - 2 } + \cdots + a_1 kr^{ k - 1 } & = 0 \\ a_0 ( n + k ) r^{ n + k } + a_1 ( n + k - 1 ) r^{ n + k - 1 } + \cdots + a_1 kr^{ k } & = 0 \\ \end{aligned}\]

$$

这样我们就可以数学归纳解决.

另外,我们注意一个问题:\(( ( y - r )^2 P ) ' = ( y - r ) ( ( y - r ) P ) ' + ( y - r ) ' ( y - r ) P = ( y - r ) [ ( y - r ) ' P + ( ( y - r ) P ) ' ]\),\(r\)一定是这个方程的一个根,高次是同理的.

再进一步

我们注意到齐次差分方程一定能写成\(\vec{ x }_k = A \vec{ x }_{ k - 1 }\)的形式.如果我们取\(A\)的特征向量的线性组合作为\(\vec{ x }_0\),不难发现一定是满足条件的.

更进一步,如果我们定义元素和为\(1\)的向量为概率向量,由概率向量组成的矩阵为概率矩阵,那么确定了初始向量的齐次差分方程最后一定会收敛到一个值.证明的话直接求通项然后去求极限即可.

再再进一步

我们都知道矩阵加速:也就是\(\vec{ x }_{ k + 1 } = A \vec{ x }\),\(\vec{ x }_{ n } = A^n \vec{ x }_0\).而我们又知道CH定理:\(p ( A ) = 0\),我们用多项式取膜,有\(A^n = p ( A ) F ( A ) + G ( A ) = G ( A )\),这就是解.

数列中的求和问题

和式的基本运算

分配律:\(\\ \sum_{ i \in S } ca_i = c \sum_{ i \in S } a_i \\\).

结合律:\(\\ \sum_{ i \in S } ( a_i + b_i ) = \sum_{ i \in S } a_i + \sum_{ i \in S } b_i\).

交换律:\(\sum_{ i \in S } a_i = \sum_{ p ( i ) \in S } a_{ p ( i ) }\),其中\(p\)\(S\)集合的重新排列.

交换求和顺序:

  1. \(\sum_{ i } \sum_{ j } a_{ i , j } [ P ( i , j ) ] = \sum_{ j } \sum_{ i } a_{ i , j } [ P ( i , j ) ]\).

  2. \(\sum_{ i = 1 }^n \sum_{ j = i }^n a_{ i , j } = \sum_{ j = 1 }^n \sum_{ i = 1 }^j a_{ i , j }\).

一般分配律:\(\sum_{ i } \sum_{ j } a_{ i } b_j = ( \sum_{ i } a_i ) ( \sum_j b_j )\).

交换顺序法

Example1(等差数列求和)

等差数列求和:

\[ \begin{aligned} S_n & = \sum_{ i = 0 }^n ( ai + b ) = \sum_{ i = 0 }^n ( a ( n - i ) + b ) \\ 2 S_n & = \sum_{ i = 0 }^n ( an + 2 b ) = an ( n + 1 ) + 2 b ( n + 1 ) \\ S_n & = ( n + 1 ) ( \frac{ an }{ 2 } + b ) \end{aligned} \]

Example2(切比雪夫单调不等式)

\(S = \sum_{ 1 \leq i < j \leq n } ( a_j - a_i ) ( b_j - b_i ) = \sum_{ 1 \leq j < i \leq n } ( a_j - a_i ) ( b_j - b_i )\).

考虑恒等式\([ 1 \leq j < i \leq n ] + [ 1 \leq i < j \leq n ] = [ 1 \leq j , i \leq n ] - [ 1 \leq i = j \leq n ]\).

那么我们有:

$$ \[\begin{aligned} 2 S & = \sum_{ 1 \leq i , j \leq n } ( a_j - a_i ) ( b_j - b_i ) - \sum_{ 1 \leq i = j \leq n } ( a_j - a_i ) ( b_j - b_i ) \\ & = \sum_{ 1 \leq i , j \leq n } ( a_j - a_i ) ( b_j - b_i ) \\ & = 2 n \sum_{ i = 1 }^n a_i b_i - 2 ( \sum_{ i = 1 }^n a_i ) ( \sum_{ j = 1 }^n b_j ) \\ \end{aligned}\]

$$

又有\(( \sum_{ i = 1 }^n a_i ) ( \sum_{ j = 1 }^n b_j ) = n \sum_{ i = 1 }^n a_i b_i - \sum_{ 1 \leq i < j \leq n } ( a_j - a_i ) ( b_j - b_i )\),显然有以下式子:

$$ \[\begin{aligned} ( \sum_{ i = 1 }^n a_i ) ( \sum_{ j = 1 }^n b_j ) & \leq n \sum_{ i = 1 }^n a_i b_i , \forall i < j , a_i \leq a_j \land b_i \leq b_j \\ ( \sum_{ i = 1 }^n a_i ) ( \sum_{ j = 1 }^n b_j ) & \geq n \sum_{ i = 1 }^n a_i b_i , \forall i < j , a_i \leq a_j \land b_i \geq b_j \\ \end{aligned}\]

$$

上式被称为切比雪夫单调不等式.

Example3(拉格朗日恒等式)

\(\sum_{ 1 \leq j < k \leq n } ( a_j b_k - a_k b_j )^2 = ( \sum_{ i = 1 }^n a_i^2 ) ( \sum_{ i = 1 }^n b_i^2 ) - ( \sum_{ i = 1 }^n a_i b_i )^2 \\\).

\(S_n = \sum_{ 1 \leq j < k \leq n } ( a_j b_k - a_k b_j )^2 \\\),有:

\[ \begin{aligned} 2 S_n & = \sum_{ j = 1 }^n \sum_{ k = 1 }^n ( a_j b_k - a_k b_j )^2 \\ & = \sum_{ j = 1 }^n \sum_{ k = 1 }^n ( a_j^2 b_k^2 - 2 a_j a_k b_j b_k - a_k^2 b_j^2 ) \\ & = 2 ( \sum_{ i = 1 }^n a_i^2 ) ( \sum_{ i = 1 }^n b_i^2 ) - 2 ( \sum_{ i = 1 }^n a_i b_i )^2 \end{aligned} \]

扰动法

Example1(等比数列求和)

\[ \begin{aligned} S_n & = \sum_{ i = 0 }^n ax^i \\ & = a + \sum_{ i = 1 }^n ax^i \\ & = a + x \sum_{ i = 0 }^{ n - 1 } ax^i \\ & = a + xS_{ n - 1 } \end{aligned} \]

\(S_{ n - 1 } + ax^n = S_n = a + xS_{ n - 1 }\),有\(S_n + ax^{ n + 1 } = a + xS_n , S_n = a \frac{ x^{ n + 1 } - 1 }{ x - 1 }\),其中\(x \ne 1\).

Example2(平方和公式)

\(S_n = \sum_{ i = 0 }^n i^2\).

如果直接对该公式使用扰动法:

\[ \begin{aligned} S_n & = \sum_{ i = 0 }^{ n - 1 } i^2 + n^2 \\ & = \sum_{ i = 1 }^n ( i - 1 )^2 + n^2 \\ & = S_n - 2 \sum_{ i = 1 }^n i + n + n^2 \end{aligned} \]

我们无法得到\(S_n\)的封闭形式,但我们发现我们得到了\(\sum_{ i = 1 }^n i\)的封闭形式.

那以此类推,我们设\(W_n = \sum_{ i = 0 } i^3\)

\[ \begin{aligned} W_n & = \sum_{ i = 0 }^{ n - 1 } i^3 + n^3 \\ & = \sum_{ i = 1 }^n ( i - 1 )^3 + n^3 \\ & = \sum_{ i = 1 }^n i^3 - 3 \sum_{ i = 1 }^n i^2 + 3 \sum_{ i = 1 }^n i - n + n^3 \\ & = W_n - 3 S_n + 3 \frac{ n + n^2 }{ 2 } - n + n^3 \\ S_n & = \frac{ n + n^2 }{ 2 } - \frac{ n - n^3 }{ 3 } \\ & = \frac{ n + 3 n^2 + 2 n^3 }{ 6 } \\ & = \frac{ n ( 1 + 3 n + 2 n^2 ) }{ 6 } \\ & = \frac{ n ( 2 n + 1 ) ( n + 1 ) }{ 6 } \end{aligned} \]

展开和收缩

Example1(平方和公式)

\[ \begin{aligned} S_n & = \sum_{ k = 1 }^n k^2 \\ & = \sum_{ k = 1 }^n \sum_{ i = 1 }^k k \\ & = \sum_{ i = 1 }^n \sum_{ k = i }^n k \\ & = \sum_{ i = 1 }^n \frac{ 1 }{ 2 } ( i + n ) ( n - i + 1 ) \\ & = \sum_{ i = 1 }^n \frac{ 1 }{ 2 } ( in - i^2 + i + n^2 - ni + n ) \\ & = \frac{ 1 }{ 2 } ( \sum_{ i = 1 }^n i - \sum_{ i = 1 }^n i^2 + n^3 + n^2 ) \\ & = \frac{ 1 }{ 4 } n ( n + 1 ) - \frac{ 1 }{ 2 } S_n + \frac{ n^3 + n^2 }{ 2 } \end{aligned} \]

整理得到\(S_n\).

Example2

\(\sum_{ i = 1 }^n i^3 \\\).

\[ \begin{aligned} S ( n ) & = \sum_{ i = 1 }^n i^3 \\ & = \sum_{ i = 1 }^n \sum_{ j = 1 }^i i^2 \\ & = \sum_{ j = 1 }^n \sum_{ i = j }^n i^2 \\ & = \sum_{ j = 1 }^n ( \frac{ n ( n + 1 ) ( 2 n + 1 ) }{ 6 } - \frac{ ( j - 1 ) j ( 2 j - 1 ) }{ 6 } ) \\ & = \frac{ n^2 ( n + 1 ) ( 2 n + 1 ) }{ 6 } - \frac{ 1 }{ 3 } S ( n ) + \frac{ n ( n + 1 ) ( 2 n + 1 ) }{ 12 } - \frac{ n ( n + 1 ) }{ 12 } \\ S ( n ) & = \frac{ n^2 ( n + 1 )^2 }{ 4 } \end{aligned} \]

Problme3

\(\sum_{ i = 1 }^n iq^i ( q \ne 1 )\).

Solution3
$$ \[\begin{aligned} \sum_{ i = 1 }^n iq^i & = \sum_{ j = 1 }^n \sum_{ i = j }^n q^i \\ & = \sum_{ j = 1 }^n \frac{ q^j - q^{ n + 1 } }{ 1 - q } \\ & = \frac{ 1 }{ q - 1 } \sum_{ j = 1 }^n ( q^{ n + 1 } - q^j ) \\ & = \frac{ 1 }{ q - 1 } ( nq^{ n + 1 } - \frac{ q^{ n + 1 } - q }{ q - 1 } ) \\ \end{aligned}\]

$$

ProblemEX2

\(\sum_{ i = 1 }^n ( ai + b ) q^{ i - 1 } ( q \ne 1 )\).

SolutionEX2

\(A = \frac{ a }{ q - 1 } , B = \frac{ b - A }{ q - 1 }\),答案为\(( An + B ) q^n - B\).

有限微积分

移位算子

定义移位算子\(E\),使得\(Ef ( x ) = f ( x + 1 )\).

差分算子

定义差分算子\(\Delta f ( x ) = f ( x + 1 ) - f ( x )\),类似于无限微积分中的D算子.

另外,不难发现有\(\Delta = E - 1\).

逆差分算子

定义逆差分算子\(\Sigma\),可以得到有限微积分的基本定理:

\(g ( x ) = \Delta f ( x ) \Leftrightarrow \sum g ( x ) \delta x = f ( x ) + C \\\)

这里的\(\Sigma\)又被称为不定和式,是差分等于\(g\)的一个函数类.

值得一提的是,这里的\(C\)与无限微积分中的\(C\)有一定区别,这里的\(C\)可以是满足\(p ( x ) = p ( x + 1 )\)的任意一个函数而不非得是常数函数.

定和式

如果\(g ( x ) = \Delta f ( x )\),那么有\(\sum \nolimits_{ a }^b g ( x ) \delta x = f ( x ) |^{ b }_a = f ( b ) - f ( a ) \\\).

值得一提的是,如果\(a \leq b\),显然有\(\sum \nolimits_{ a }^b g ( x ) \delta x = \sum_{ x = a }^{ b - 1 } g ( x ) \\\).

但如果\(a > b\),那么\(\sum \nolimits_{ a }^b g ( x ) \delta x = - \sum \nolimits_b^a g ( x ) \delta x \\\).

事实上,我们一定有:\(\sum \nolimits_a^b g ( x ) \delta x + \sum \nolimits_b^c g ( x ) \delta x = \sum \nolimits_a^c g ( x ) \delta x \\\).

一些基本的公式

类比无限微积分中的\(D ( x^m ) = mx^{ m - 1 }\),有:

(x{})=mx{},mx{}x=x{}+C,m\

\

类比无限微积分中的\(D ( \ln x ) = \frac{ 1 }{ x }\),有:

令H(x)=_{i=1}x\(H(x))=x{},x^{}x =H(x)+C\

\

类比无限微积分中的\(D ( e^x ) = e^x\),有:

\(\Delta ( 2^x ) = 2^x , \sum 2^x \delta x = 2^x + C \\\)

\(\Delta ( c^x ) = ( c - 1 ) c^x , \sum c^x \delta x = \frac{ c^x }{ c - 1 } + C , c \ne 1 \\\)

\(\Delta ( c^{ \underline{ x } } ) = \frac{ c^{ \underline{ x + 2 } } }{ c - x } , \sum \frac{ c^{ \underline{ x + 2 } } }{ c - x } \delta x = c^{ \underline{ x } } + C , c - x \ne 0 \\\).

根据组合数公式,有:

\(\Delta ( \binom{ x }{ k } ) = \binom{ x }{ k - 1 } \\\).

Example1

仍然考虑平方和公式:

我们有:\(k^2 = k^{ \underline{ 2 } } + k^{ \underline{ 1 } } \\\).

那么:

\[ \begin{aligned} S_{ n - 1 } & = \sum_{ i = 0 }^{ n - 1 } i^2 \\ & = \sum_{ i = 0 }^{ n - 1 } ( i^{ \underline{ 2 } } + i^{ \underline{ 1 } } ) \\ & = \sum \nolimits_{ 0 }^n x^{ \underline{ 2 } } \delta x + \sum \nolimits_{ 0 }^n x^{ \underline{ 1 } } \delta x \\ & = \frac{ n^\underline{ 3 } }{ 3 } + \frac{ n^{ \underline{ 2 } } }{ 2 } \end{aligned} \]

整理即可得到封闭形式.

值得一提的是:

与前面的方法不同,这里没有使用三次的二项式公式,而是使用了二次的斯特林公式负责将一般幂转化为下降幂.

分部求和法则(Abel求和法)
$$ \[\begin{aligned} \Delta ( uv ) & = u ( x + 1 ) v ( x + 1 ) - u ( x ) v ( x ) \\ & = u ( x + 1 ) v ( x + 1 ) - u ( x ) v ( x + 1 ) + u ( x ) v ( x + 1 ) - u ( x ) v ( x ) \\ & = v ( x + 1 ) \Delta u + u ( x ) \Delta v = Ev \Delta u + u \Delta v \\ \end{aligned}\]

$$

两边取不定和,即可得到分部求和法则:

\(\sum u \Delta v = uv - \sum Ev \Delta u \\\).

分部求和用一般和式表达如下,下式又被称为Abel求和法:

\(\sum_{ i = l }^{ r - 1 } ( a_{ i + 1 } - a_i ) b_i = a_r b_r - a_l b_l - \sum_{ i = l }^{ r - 1 } a_{ i + 1 } ( b_{ i + 1 } - b_i ) \\\).

Example1

\(\sum_{ k = 0 }^n k 2^k \\\).

根据分部求和法则,我们有:

\(\sum x 2^x \delta x = x 2^x - \sum 2^{ x + 1 } \delta x = x 2^x - 2^{ x + 1 } + C \\\).

改为定和式形式,显然有:

$$ \[\begin{aligned} & \sum_{ k = 0 }^n k 2^k \\ = & \sum \nolimits_0^{ n + 1 } x 2^x \delta x \\ = & ( n + 1 ) 2^{ n + 1 } - 2^{ n + 2 } + 2 \\ = & ( n - 1 ) 2^{ n + 1 } + 2 \\ \end{aligned}\]

$$

Example2

\(\sum_{ k = 0 }^{ n - 1 } kH_k \\\).

\(u ( x ) = H_x , v ( x ) = \frac{ 1 }{ 2 } x^{ \underline{ 2 } } \\\).

带入分部求和法则,显然有:

\(\sum xH_x \delta x = \frac{ x^\underline{ 2 } }{ 2 } H_x - \frac{ x^\underline{ 2 } }{ 4 } + C \\\).

带入即可求出原式\(= \frac{ n^\underline{ 2 } }{ 2 } ( H_n - \frac{ 1 }{ 2 } ) \\\).

Example3

\(\sum_{ i = 1 }^n \frac{ 2 i + 1 }{ i ( i + 1 ) } \\\).

\(u = ( 2 n + 1 ) , v = - \frac{ 1 }{ i }\),则\(\Delta u = 2 , \Delta v = \frac{ 1 }{ i ( i + 1 ) }\).

根据分部求和法则,有:

\[ \begin{aligned} \sum_{ i = 1 }^n \frac{ 2 i + 1 }{ i ( i + 1 ) } & = ( 2 n + 3 ) \times ( - \frac{ 1 }{ n + 1 } ) + 3 - \sum_{ i = 1 }^n ( - \frac{ 2 }{ i + 1 } ) \\ & = - \frac{ 2 n + 3 }{ n + 1 } + 2 H_n + \frac{ n + 3 }{ n + 1 } \\ & = 2 H_n - \frac{ n }{ n + 1 } \end{aligned} \]

Example4

\(\sum_{ i = 0 }^{ n - 1 } \frac{ H_k }{ ( k + 1 ) ( k + 2 ) } \\\).

\(u = H_n , v = - \frac{ 1 }{ n + 1 } , \Delta u = \frac{ 1 }{ n + 1 } , \Delta v = \frac{ 1 }{ ( n + 1 ) ( n + 2 ) } \\\).

根据分部求和法则,有:

\[ \begin{aligned} \sum_{ i = 0 }^{ n - 1 } \frac{ H_k }{ ( k + 1 ) ( k + 2 ) } & = - \frac{ H_n }{ n + 1 } - \sum_{ i = 0 }^{ n - 1 } ( - \frac{ 1 }{ ( i + 2 ) ( i + 1 ) } ) \\ & = - \frac{ H_n }{ n + 1 } + \sum_{ i = 0 }^{ n - 1 } ( \frac{ 1 }{ i + 1 } - \frac{ 1 }{ i + 2 } ) \\ & = - \frac{ H_n }{ n + 1 } + H_n - ( H_n - 1 + \frac{ 1 }{ n + 1 } ) \\ & = 1 - \frac{ H_n + 1 }{ n + 1 } \end{aligned} \]

基础数论在数列中的应用

Example

\(A = \{ 2 n - 1 | n \in \mathbb{ N }_{ + } \} , B = \{ 3 n - 1 | n \in \mathbb{ N }_{ + } \}\).求\(A \cap B\),以及\(A \cup B\)的最小的一百项之和.

对于前者,我们知道:

$$ \[\begin{aligned} a & \in A \Leftrightarrow a \equiv - 1 \pmod{ 2 } \\ b & \in B \Leftrightarrow b \equiv - 1 \pmod{ 6 } \\ \end{aligned}\]

$$

所以\(A \cap B = \{ 6 n - 1 | n \in \mathbb{ N }_{ + } \}\).

而同理,\(x \in A \cup B \Leftrightarrow x \equiv - 1 / - 2 / - 3 / - 5 \pmod{ 6 }\).于是后者是简单的.

构造双射在数列中的应用

\(A = \{ x | x = 2 n - 1 , n \in \mathbb{ N }_+ \} , B = \{ x | x = 2^n , n \in \mathbb{ N }_+ \}\),现在将\(A \cup B\)中的元素排序并提取成一个数列\(a\),求使得\(S_n > 12 a_n\)最小的正整数\(n\).

写出数列,它长这样:

\[ \begin{matrix} 1 & 2 \\ 3 & 4 \\ 5 & 7 & 8 \\ 9 & 11 & 13 & 15 & 16 \\ & & \cdots \end{matrix} \]

不妨设\(n\)在第\(r\)\(c\)列,显然\(( r , c )\)\(n\)构成双射.

那么我们现在无非有两个思路:要么找到一个方式使得对于给定的\(n\)能快速表达\(( r , c )\),要么反之.显然反之比较简单.

考虑设前\(k\)行共有\(W_k\)个数,不难发现\(W_{ k + 1 } = W_k + 2^{ k - 1 } + 1 , W_k = 2^{ k - 1 } + k\).

显然,对于\(( r , c )\)来说,它对应的\(n\)就是\(W_{ r - 1 } + c\).

\(SR_{ r }\)为前\(r\)行数字之和,不难发现\(SR_r = 2^{ r + 1 } - 2 + ( 2^{ r - 1 } )^2\).

接下来考虑找到这个最小的\(n\),显然\(r \ne 1\),接下来只考虑\(r \geq 2\)的情况.

那么我们可以轻松写出\(S_n\)\(a_n\)的表达式,下面直接给出:

\[ \begin{aligned} S_n & = SR_{ r - 1 } + \sum_{ k = 1 }^c ( 2^{ r - 1 } + 2 k - 1 ) - [ c = 2^{ r - 2 } + 2 ] \\ S_n & = 2^r - 2 + 4^{ r - 2 } + 2^{ r - 1 } c + c^2 - [ c = 2^{ r - 2 } + 1 ] \\ a_n & = 2^{ r - 1 } + 2 c - 1 - [ c = 2^{ r - 2 } + 1 ] \end{aligned} \]

讨论一下\([ c = 2^{ r - 2 } + 1 ]\)这个判定式取\(0\)还是取\(1\),这样就做完了.

不等式放缩在数列中的应用

几何导论

三角相关

三角恒等变换

两角和差公式

\[ \begin{aligned} \sin ( A + B ) & = \sin A \cos B + \sin B \cos A \\ \sin ( A - B ) & = \sin A \cos B - \sin B \cos A \\ \cos ( A + B ) & = \cos A \cos B - \sin A \sin B \\ \cos ( A - B ) & = \cos A \cos B + \sin A \sin B \\ \tan ( A + B ) & = \frac{ \tan A + \tan B }{ 1 - \tan A \tan B } \\ \tan ( A - B ) & = \frac{ \tan A - \tan B }{ 1 + \tan A \tan B } \end{aligned} \]

倍角公式

\[ \begin{aligned} \tan ( 2 A ) & = \frac{ 2 \tan A }{ 1 - \tan^2 A } \\ \sin ( 2 A ) & = 2 \sin A \cos A \\ \cos ( 2 A ) & = \cos^2 A - \sin^2 A = 2 \cos^2 A - 1 = 1 - 2 \sin^2 A \end{aligned} \]

半角公式

\[ \begin{aligned} \sin ( \frac{ A }{ 2 } ) & = \pm \sqrt{ \frac{ 1 - \cos A }{ 2 } } \\ \cos ( \frac{ A }{ 2 } ) & = \pm \sqrt{ \frac{ 1 + \cos A }{ 2 } } \\ \tan ( \frac{ A }{ 2 } ) & = \frac{ \sin A }{ 1 + \cos A } = \frac{ 1 - \cos A }{ \sin A } = \pm \sqrt{ \frac{ 1 - \cos A }{ 1 + \cos A } } \end{aligned} \]

和差化积

\[ \begin{aligned} \sin A + \sin B & = 2 \sin ( \frac{ A + B }{ 2 } ) \cos ( \frac{ A - B }{ 2 } ) \\ \sin A - \sin B & = 2 \cos ( \frac{ A + B }{ 2 } ) \sin ( \frac{ A - B }{ 2 } ) \\ \cos A + \cos B & = 2 \cos ( \frac{ A + B }{ 2 } ) \cos ( \frac{ A - B }{ 2 } ) \\ \cos A - \cos B & = - 2 \sin ( \frac{ A + B }{ 2 } ) \sin ( \frac{ A - B }{ 2 } ) \\ \tan A + \tan B & = \frac{ \sin ( A + B ) }{ \cos A \cos B } \end{aligned} \]

值得一提的是,如果你对和差化积特别熟悉,你不难发现下面这个式子:

\[ \sin^2 A - \sin^2 B = \sin ( A - B ) \sin ( A + B ) \]

如果细看会发现,这其实就是和差化积与二倍角公式并用得到的推论,但实际上用处远比和差化积要多.

积化和差

\[ \begin{aligned} \sin A \sin B & = - \frac{ 1 }{ 2 } [ \cos ( A + B ) - \cos ( A - B ) ] \\ \cos A \cos B & = \frac{ 1 }{ 2 } [ \cos ( A + B ) + \cos ( A - B ) ] \\ \sin A \cos B & = \frac{ 1 }{ 2 } [ \sin ( A + B ) + \sin ( A - B ) ] \\ \cos A \sin B & = \frac{ 1 }{ 2 } [ \sin ( A + B ) - \sin ( A - B ) ] \end{aligned} \]

万能公式

\(w = \tan \frac{ A }{ 2 }\),则:

\[ \begin{aligned} \sin A & = \frac{ 2 w }{ 1 + w^2 } \\ \cos A & = \frac{ 1 - w^2 }{ 1 + w^2 } \\ \tan A & = \frac{ 2 w }{ 1 - w^2 } \end{aligned} \]

当然,这个所谓的万能公式其实一点用都没有,因为我们有更强大的公式:

\[ \begin{aligned} \cos ( x ) & = \frac{ e^{ ix } + e^{ - ix } }{ 2 } \\ \sin ( x ) & = \frac{ e^{ ix } - e^{ - ix } }{ 2 i } \end{aligned} \]

补充公式

\[ \begin{aligned} 1 + \sin A & = ( \sin \frac{ A }{ 2 } + \cos \frac{ A }{ 2 } )^2 \\ 1 - \sin A & = ( \sin \frac{ A }{ 2 } - \cos \frac{ A }{ 2 } )^2 \end{aligned} \]

周期函数与初等数论

我们知道,处理三角中的周期性问题时,需要设一些取值为整数的\(k\)来解决问题,这引发我们思考:是否可以将初等数论中的模法来解决这一类问题呢?

Example1

已知函数\(f ( x ) = \sin ( \omega x + \varphi ) , w > 0\),\(f ( - \frac{ \pi }{ 6 } ) = 0 , f ( \frac{ \pi }{ 2 } ) = - 1\),求\(w\)\(\varphi\)的表达式.

正确做法应该是强设\(k_1 , k_2\),但我们来使用模法.

必须要注意的一点是,我们这里的\(\omega\)\(\varphi\)都不是整数,这意味着我们必须时刻保证同余式子左侧是整数,也就是在操作的时候不可以使用任何逆元!换句话说,你两边同时做乘法的时候,只可以同时乘以整数,不可以同时乘以分数.

不妨令\(\frac{ \pi }{ 2 }\)为单位\(1\),我们必有以下式子:

\[ \begin{aligned} - \frac{ \omega }{ 3 } + \varphi & \equiv 0 \pmod{ 2 } \\ \omega + \varphi & \equiv 3 \pmod{ 4 } \end{aligned} \]

下面推导\(\omega\),首先将上面两个式子直接相减,立有:

\[ \frac{ 4 }{ 3 } \omega \equiv 1 \pmod{ 2 } \]

对于\(\varphi\),考虑类似的做法,将第一个式子乘以\(3\)后与第二个式子相加,立有:

\[ 4 \varphi \equiv 1 \pmod{ 2 } \]

这样我们得到的必须满足的条件就有以下几条:

\[ \begin{aligned} \frac{ 4 }{ 3 } \omega & \equiv 1 \pmod{ 2 } \\ 4 \varphi & \equiv 1 \pmod{ 2 } \\ \omega + \varphi & \equiv 3 \pmod{ 4 } \end{aligned} \]

向量相关

旋转模型

自己瞎起的名字.

Example1

已知\(AB = 2 , AC = 1 , \angle A = \theta\),\(BC\)\(B\)点顺时针旋转\(\frac{ \pi }{ 3 }\)得到\(BD\),求以\(\theta\)表示\(S_{ \triangle CBD }\).

先来说文化课做法,我们直接表示\(S\),令\(\alpha = \angle ABC\):

$$ \[\begin{aligned} S & = | BD | \sin ( \alpha + \frac{ \pi }{ 3 } ) \\ \end{aligned}\]

$$

对于这个式子,我们发现如果我们能得到\(| BD | \sin ( \alpha )\)\(| BD | \cos ( \alpha )\)就可以解决了对吧.

这两个怎么求得呢?我们发现\(BD\)\(\alpha\)的一条临边.观察正弦定理和余弦定理可知,正弦定理可以帮助我们求出\(| BD | \sin \alpha\),余弦定理可以帮助我们求出\(| BD | \cos \alpha\).

然而,如果我们再冷静一下,会得到一个更厉害一点的做法:

我们直接建系,立刻可以求出\(\overrightarrow{ AB }\)\(\overrightarrow{ BC }\)的坐标表示,将\(\overrightarrow{ BC }\)用旋转矩阵转过去,拿叉积算一下两个向量所生成的三角形面积即可.

如果要把这个做法对应到文化课可以拿到分的做法的话,首先叉积可以去掉,改为直接暴力算.至于旋转的话可能需要一些操作例如三角换元之类的.

爪子模型

比起套模型,我们来总结一下向量中的两个做题法则:

  1. 如果存在两条不共线向量,已知它们的夹角以及边长,这个题至少可以通过设单位向量暴力运算解决.

  2. 如果通篇题目不涉及边长,或者是涉及边长,但所求是角,将某个边长当作\(1\)是一定没有问题的,这样可以少掉一个未知量,为将来的做题提供更明确的道路.

直接来看题:

Example1

\(\triangle ABC\)中,\(b^2 = ac\),点\(D\)\(AC\)上且满足\(BD = b\),有\(\overrightarrow{ AD } = 2 \overrightarrow{ DC }\),求\(\cos \angle ABC\).

这题通篇没有提到任何的边长,我们可以直接钦定\(c = 1\),于是有\(b^2 = a\).

考虑我们要求\(\cos \angle ABC\),而我们有一条很奇怪的边\(BD\),似乎不满足任何性质,我们立刻想到要把它用\(\angle ABC\)的两条边向量表示,除此之外没有任何别的表示方式.

后面就没有什么了,这题的难点在于后面的解方程过程,但只要你敢让\(c = 1\),后面的解方程极其简单.

奔驰定理及三角形四心

奔驰定理

对于\(\triangle ABC\)内一点\(P\),立有\(S_{ \triangle PBC } \overrightarrow{ PA } + S_{ \triangle PAC } \overrightarrow{ PB } + S_{ \triangle PAB } \overrightarrow{ PC } = \vec{ 0 }\).

看到的证明都略麻烦,下面给出一个容易理解的证明.

我们物理上学过拉密定理,其实也就是运用三角形法则以及正弦定理.利用拉密定理,令\(a = PA , b = PB , c = PC\),我们要证奔驰定理,也就是要证明:

$$ \[\begin{aligned} bc \sin \alpha \overrightarrow{ PA } + ac \sin \beta \overrightarrow{ PB } + ab \sin \gamma \overrightarrow{ PC } & = \vec{ 0 } \\ abc \sin \alpha \frac{ \overrightarrow{ PA } }{ a } + abc \sin \beta \frac{ \overrightarrow{ PB } }{ b } + abc \sin \gamma \frac{ \overrightarrow{ PC } }{ c } & = \vec{ 0 } \\ \sin \alpha \frac{ \overrightarrow{ PA } }{ a } + \sin \beta \frac{ \overrightarrow{ PB } }{ b } + \sin \gamma \frac{ \overrightarrow{ PC } }{ c } & = \vec{ 0 } \\ \end{aligned}\]

$$

考虑\(| \frac{ \overrightarrow{ PA } }{ a } | = | \frac{ \overrightarrow{ PB } }{ b } | = | \frac{ \overrightarrow{ PC } }{ c } | = 1\),后者根据拉密定理显然成立.

外心

有正弦定理,\(| \overrightarrow{ OA } | = | \overrightarrow{ OB } | = | \overrightarrow{ OC } | = \frac{ a }{ 2 \sin A }\).

考虑三个三角形的面积可以表示为\(\frac{ r^2 }{ 2 } \sin \theta\),又考虑到圆中的\(\theta\)是圆心角是圆周角的两倍,立有\(\sin ( 2 A ) \overrightarrow{ OA } + \sin ( 2 B ) \overrightarrow{ OB } + \sin ( 2 C ) \overrightarrow{ OC } = \vec{ 0 }\).

下面给出一个例题:

Example1

\(\triangle ABC\)中,\(AB = 2 , BC = \sqrt{ 10 } , AC = 3\),若\(O\)是其外心,且\(\overrightarrow{ AO } = p \overrightarrow{ AB } + q \overrightarrow{ AC }\).

先给出我一开始的想法:

在没学奔驰定理之前,我们看到这个外心,第一反应肯定是使用\(| OA | = | OB | = | OC |\),也就是这三个长度都是好求的.因此,我们考虑对上面的式子两边平方,得到一个关于\(p , q\)的方程.但是这样没有解决问题.

考虑我们只用了\(| OA |\),用上\(| OB |\),这样的话我们两边同时加上\(\overrightarrow{ BA }\),就可以得到\(p , q\)的另一个方程,可以解出两组解,直接舍也可以舍,不然的话根据\(| OC |\)也可以舍一个解.

但是这样太蠢了啊,我们考虑直接凑奔驰定理:

\[ \begin{aligned} \overrightarrow{ AO } & = p \overrightarrow{ AB } + q \overrightarrow{ AC } \\ \vec{ 0 } & = ( p + q - 1 ) \overrightarrow{ OA } + p \overrightarrow{ OB } + q \overrightarrow{ OC } \end{aligned} \]

考察奔驰定理,立有\(\frac{ p + q - 1 }{ \sin ( 2 A ) } = \frac{ p }{ \sin ( 2 B ) } = \frac{ q }{ \sin ( 2 C ) }\),简单题.

Example2

已知相异两点\(O , H\)分别为\(\triangle ABC\)的外心和垂心,若\(\overrightarrow{ OH } = m ( \overrightarrow{ OA } + \overrightarrow{ OB } + \overrightarrow{ OC } )\),求\(m\).

这题要用到的性质是,我们一定要知道\(( \overrightarrow{ OB } + \overrightarrow{ OC } ) \cdot \overrightarrow{ BC } = 0\),这也是外心的一个很重要的性质.

由此,我们让左边凑出\(\overrightarrow{ AH }\),然后两边同时乘以\(\overrightarrow{ BC }\)就可以解决.注意到最后解方程的时候要么\(m = 1\),要么三角形等边,但是我们声明过\(O , H\)相异两点.

重心

首先重心将中线三等分,这个我竟然一直没细想过怎么证明啊,只是觉得倍长中线肯定能证明.

事实上用不到那么麻烦,你直接连接两个中点,立有中位线,然后以重心为两个三角形的顶点,立有一组对顶角且对边平行的\(1 : 2\)的相似.

又考察三条中线将整个三角形分成了六部分,这六部分的面积是相等的.

为啥呢?因为你可以先把三角形分成三部分(也就是每个顶点连到重心),然后将这三部分内部的两个小三角形证明面积相等(因为此时重心是它的顶点,沿着中线连下去就还是这个三角形的中线),再利用上面的三等分结论就显然了啊.

结合奔驰定理,立有若\(O\)是重心,则必有\(\overrightarrow{ OA } + \overrightarrow{ OB } + \overrightarrow{ OC } = \vec{ 0 }\).

然后听说有个物理理想实验的理解方式,大概是说这与力矩结合一下就可以得到这是他物理重心的结论,不会.

垂心

\(O\)是重心,立有\(\overrightarrow{ OA } \cdot \overrightarrow{ BC } = 0\),将\(\overrightarrow{ BC } = \overrightarrow{ BO } + \overrightarrow{ OC }\),立有\(\overrightarrow{ OA } \cdot \overrightarrow{ OB } = \overrightarrow{ OA } \cdot \overrightarrow{ OC } = \overrightarrow{ OB } \cdot \overrightarrow{ OC }\).同时顺带证明了三条高交于一点.

根据奔驰定理还有\(\overrightarrow{ OA } \tan A + \overrightarrow{ OB } \tan B + \overrightarrow{ OC } \tan C = \vec{ 0 }\).

内心

根据奔驰定理,立有\(a \overrightarrow{ OA } + b \overrightarrow{ OB } + c \overrightarrow{ OC } = \vec{ 0 }\).

立体几何相关

基本概念

直线

使用直线的方向向量\(\vec{ s } = ( n , m , p )\)和直线上一点\(M_0 = ( x_0 , y_0 , z_0 )\).那么方程显然为:

\[ \frac{ x - x_0 }{ n } = \frac{ y - y_0 }{ m } = \frac{ z - z_0 }{ p } \]

如果换元,我们还有参数方程:

\[ \begin{cases} x = x_0 + nt \\ y = y_0 + mt \\ z = z_0 + pt \end{cases} \]

平面

使用平面上的一点\(P_0 ( x_0 , y_0 , z_0 )\)和该平面的法向量\(\vec{ n }\)来表示一个平面,不妨设\(\vec{ n } = ( A , B , C )\),则该平面的方程显然为:

\[ A ( x - x_0 ) + B ( y - y_0 ) + C ( z - z_0 ) = 0 \]

如果我们令\(D = - ( Ax_0 + By_0 + Cz_)\),那么平面方程为:

\[ Ax + By + Cz + D = 0 \]

夹角
两直线夹角.

直接求方向向量的夹角,然后取正值.

对于方向向量分别是\(\vec{ s_1 } = ( n_1 , m_1 , p_1 ) , \vec{ s_2 } = ( n_2 , m_2 , p_2 )\),也就有\(\varphi = \arccos ( \frac{ | \vec{ s }_1 \cdot \vec{ s }_2 | }{ | \vec{ s }_1 | | \vec{ s }_2 | } ) \\\).

直线与平面的夹角

同样使用向量,不妨设方向向量\(\vec{ s } = ( n , m , p )\),法向量\(\vec{ f } = ( a , b , c )\),那么\(\varphi = \arcsin ( \frac{ | \vec{ s } \cdot \vec{ f } | }{ | \vec{ s } | | \vec{ f } | } )\).

另外,由上面这个式子,不难得到一些特殊情况下的判定标准:

  1. 若直线与平面平行,则\(am + bn + cp = 0\).

  2. 若直线与平面垂直,则\(\frac{ a }{ m } = \frac{ b }{ n } = \frac{ c }{ p }\).注意这里分母可能除以\(0\),我们实际上应该是三个形如\(a = mt\)的参数方程,这里简化了.

交点

联立方程硬解.

基本定理

参考:https://zhuanlan.zhihu.com/p/401766934

三余弦定理(最小角定理)

这个定理说明直线与平面的夹角,是所有包含直线的平面与这个平面形成的夹角中最小的那一个.并且偏移量决定了差距.

三正弦定理(最大角定理)

这个定理说明二面角是另一个平面上的直线与平面的夹角中最大的那个,并且偏移量决定了差距.

圆锥曲线

约定

对于所有对称情况结论只讨论一种(其它情况可通过坐标变换得到),但是例题以及做题方法除外.

大部分涉及斜率的存在性问题,统一不予考虑.如果遇到实际例题,只需特别处理那几个特殊情况即可(\(mx + ny = 1\)需要判断过原点的直线,\(y = kx + b\)需要判断平行于\(y\)轴的直线),显然大部分情况下是平凡的.

椭圆

定义
第一定义

平面内与两定点\(F_1 , F_2\)距离之和为常数(\(> | F_1 F_2 |\))的点轨迹.即:\(\{ P \mid | F_1 P | + | F_2 P | = 2 a , F_1 ( - c , 0 ) , F_2 ( c , 0 ) \}\).

第二定义

平面内一动点到定点与准线(\(x = \pm \frac{ a^2 }{ c }\))的距离比是常数\(e = \frac{ c }{ a }\)的点轨迹,即\(\{ P \mid \frac{ | PF_1 | }{ d_1 } = \frac{ | PF_2 | }{ d_2 } = \frac{ c }{ a } = e , F_1 ( - c , 0 ) , F_2 ( c , 0 ) \}\).

第三定义

平面内一动点到两定点\(A_1 ( - a , 0 ) , A_2 ( a , 0 )\)的斜率乘积等于定值\(e^2 - 1\)的轨迹称为椭圆.

椭圆方程
标准方程

由定义不难得到椭圆的标准方程:\(\frac{ x^2 }{ a^2 } + \frac{ y^2 }{ b^2 } = 1 ( b^2 = a^2 - c^2 , a > b > 0 )\).

一般方程

\(nx^2 + my^2 = 1 ( n , m \geq 0 )\),这样设的好处在于如果不知道焦点的位置,仍然可以设方程并进行代数运算,最后判断一下\(n\)\(m\)的大小关系即可.

椭圆重要元素
焦半径

\(P ( x_0 , y_0 )\),则\(| PF_1 | = a + ex_0\),\(| PF_2 | = a - ex_0\).

焦点弦

\(F_1\)的弦\(| AB | = 2 a + e ( x_1 + x_2 )\).

\(F_2\)的弦\(| AB | = 2 a - e ( x_1 + x_2 )\).

注意到焦点弦最短时\(x_1 = x_2\).

焦点三角形

\(\bigtriangleup PF_1 F_2\),令\(\theta = \angle F_1 PF_2\),有以下性质:

  1. \(C = 2 a + 2 c\).

  2. \(S = b^2 \tan \frac{ \theta }{ 2 } = c | y_P |\).

  3. \(\cos \theta \geq 1 - 2 e^2\)(当\(P\)在短轴上取等).

  4. \(| PF_1 | | PF_2 | = \frac{ 2 b^2 }{ 1 + \cos \theta }\).

Example
Example1

已知椭圆\(\frac{ x^2 }{ a^2 } + \frac{ y^2 }{ b^2 } = 1\),\(P\)是椭圆上一点,\(\angle F_1 PF_2\)的角平分线交\(x\)轴于\(Q ( \frac{ c }{ 4 } , 0 )\),求离心率取值范围.

注意到\(S_{ \bigtriangleup QPF_1 } = \frac{ 5 }{ 3 } S_{ \bigtriangleup QPF_2 }\),又有\(Q\)\(PF_1\)\(PF_2\)的距离相等,用等积法,显然\(PF_1 = \frac{ 5 }{ 4 } a , PF_2 = \frac{ 3 }{ 4 } a\).

然后用三角形不等式做差就行.\(2 c > \frac{ 1 }{ 2 } a , \frac{ 1 }{ 4 } < e\)

双曲线

定义
第一定义

平面内与两定点\(F_1 , F_2\)距离之差为常数(\(> | F_1 F_2 |\))的点轨迹.即:\(\{ P \mid | | F_1 P | - | F_2 P | | = 2 a , F_1 ( - c , 0 ) , F_2 ( c , 0 ) \}\).

第二定义

平面内一动点到定点与准线(\(x = \pm \frac{ a^2 }{ c }\))的距离比是常数\(e = \frac{ c }{ a }\)的点轨迹,即\(\{ P \mid \frac{ | PF_1 | }{ d_1 } = \frac{ | PF_2 | }{ d_2 } = \frac{ c }{ a } = e , F_1 ( - c , 0 ) , F_2 ( c , 0 ) \}\).

第三定义

平面内一动点到两定点\(A_1 ( - a , 0 ) , A_2 ( a , 0 )\)的斜率乘积等于定值\(e^2 - 1\)的轨迹称为双曲线.

双曲线重要元素
焦半径

\(P ( x_0 , y_0 ) , ( x_0 > 0 )\),则\(| PF_1 | = a + ex_0\),\(| PF_2 | = - a + ex_0\).

渐近线

\(y = \pm \frac{ b }{ a } x\).

如果换个方向的双曲线,事实上就是把双曲线标准方程的等号右边写成\(0\)得到的两个直线方程.

焦点三角形

\(\bigtriangleup PF_1 F_2\),令\(\theta = \angle F_1 PF_2\),有以下性质:

  1. \(S = \frac{ b^2 }{ \tan \frac{ \theta }{ 2 } }\).

抛物线

定义
第一定义

平面内一动点到定点与准线的距离相等的点轨迹.

抛物线重要元素
焦点弦

我曾经以为整理完二项式恒等式后再也不会有同样恐怖的结论群了

直线\(AB\)为过\(y^2 = 2 px ( p > 0 )\)焦点的弦,\(A ( x_1 , y_1 ) , B ( x_2 , y_2 )\),倾斜角为\(\theta\),准线与\(x\)轴交点为\(E ( - \frac{ p }{ 2 } , 0 )\),作\(AA_1\),\(BB_1\)垂直于准线于\(A_1 , B_1\),则:

  1. \(| AF | = x_1 + \frac{ p }{ 2 }\),\(| BF | = x_2 + \frac{ p }{ 2 }\),\(| AB | = x_1 + x_2 + p , \frac{ 1 }{ | FA | } + \frac{ 1 }{ | FB | } = \frac{ 2 }{ p }\).

  2. \(| AF | = \frac{ p }{ 1 - \cos \theta } , | BF | = \frac{ p }{ 1 + \cos \theta } , | AB | = \frac{ 2 p }{ \sin^2 \theta }\).

  3. \(x_1 x_2 = \frac{ p^2 }{ 4 }\),\(y_1 y_2 = - p^2\).

  4. \(S_{ \bigtriangleup AOB } = \frac{ p^2 }{ 2 \sin \theta }\).

  5. \(k_{ AE } + k_{ BE } = 0\).

  6. \(A , O , B_1\)三点共线,\(B , O , A_1\)三点共线.

  7. \(AB\)为直径的圆与抛物线的准线相切.

  8. \(A_1 B_1\)为直径的圆与\(AB\)相切.

  9. \(AF\)\(BF\)为直径的圆与\(y\)轴相切.

通用解法

联立方程
点参

不设直线斜率,直接通过设点坐标并且导出直线斜率.

这种做法通常要么不能做,要么能做并且非常简单,需要强大的构造能力.

弦长公式

已知直线\(l\)上有两点\(N ( x_1 , y_1 ) , M ( x_2 , y_2 )\),这条直线的斜率为\(k\),那么\(| NM | = \sqrt{ 1 + k^2 } | x_1 - x_2 | = \sqrt{ 1 + \frac{ 1 }{ k^2 } } | y_1 - y_2 |\).

点差法

设圆锥曲线上两点\(A ( x_1 , y_1 ) , B ( x_2 , y_2 )\),其中点\(M ( x_0 , y_0 )\),有\(2 x_0 = x_1 + x_2 , 2 y_0 = y_1 + y_2\).

把这两个点带入圆锥曲线方程并做差,可以通过平方差公式消去几项.然后可以表示出直线斜率,大概做做.

垂径定理

已知直线\(l\)与曲线交于两点\(N ( x_1 , y_1 ) , M ( x_2 , y_2 )\),这条直线的斜率为\(k\),\(MN\)的中点为\(P ( x_0 , y_0 )\),那么:

  1. 在椭圆\(\frac{ x^2 }{ a^2 } + \frac{ y^2 }{ b^2 } = 1 ( a > b > 0 )\)中,\(k \frac{ y_0 }{ x_0 } = - \frac{ b^2 }{ a^2 } = e^2 - 1\).

  2. 在双曲线\(\frac{ x^2 }{ a^2 } - \frac{ y^2 }{ b^2 } = 1\)中,\(k \frac{ y_0 }{ x_0 } = \frac{ b^2 }{ a^2 } = e^2 - 1\).

  3. 在抛物线\(y^2 = 2 px ( p > 0 )\)中,\(k = \frac{ p }{ y_0 } = \frac{ x_0 }{ p }\).

小联立

如果题目中有两条直线,它们之间的斜率满足一定关系,那么可以通过把这两个直线的斜率都设出来,然后再添加一个方程来实现.

这个方法的优点在于,有的时候分离出的方程会让原始式子简单很多.

缺点在于,有的时候会让原始式子复杂很多.

大联立

直接设主要直线的方程,然后其它直线均通过主要直线方程导出.

最常用的方法.

齐次化

本质是平移坐标系.

简单来说,如果图中有两条有公共点的直线\(PA\),\(PB\),我们可以将公共点\(P\)平移至原点,这样\(PA\)\(PB\)的方程都方便表达.然后设\(AB\)的方程为\(mx + ny = 1\)(注意这个式子不能表示过原点的直线,需要特判).

由于进行了平移,新得到的圆锥曲线方程可能存在一次项和零次项,我们将一次项乘以\(mx + ny\),零次项乘以\(( mx + ny )^2\),这样就得到了一个齐次式子.将两边同时除以\(x^2\)后就得到了一个和\(k = \frac{ y }{ x }\)有关的方程.

换句话说,某种意义下,齐次化应该算是点参和大联立的结合体:大部分情况下,能用点参的条件是斜率可以用点坐标轻松表示,而如果点的坐标比较奇怪就没办法表示,而齐次化可以完美解决这个问题.

非对称性韦达定理

大概就是求出一个用一个方程的根表达的式子,然后需要继续化简.

通常的做法是寻找方程的\(x_1 x_2\)\(x_1 + x_2\)之间的关系来做.

当然还有一种情况是问形如\(\frac{ Ax_1 + Bx_2 }{ Cx_1 + Dx_2 }\)是定值的问题,这个时候一定有\(\frac{ A }{ C } = \frac{ B }{ D }\).

还没完,非对称性韦达定理的应用巨多,例如令\(w = \frac{ x_1 }{ x_2 }\),自然有\(w + \frac{ 1 }{ w } + 2 = \frac{ ( x_1 + x_2 )^2 }{ x_1 x_2 }\).

还比如有\(y_2 = ny_1 + m\),我们可以用配凑技巧改写作\(( y_2 + w ) = k ( y_1 + w )\),也就有\(\frac{ y_2 + w }{ y_1 + w } = k\),类似上面的做法也可以求.

硬解定理

设直线\(y = kx + \varphi\)与曲线\(\frac{ x^2 }{ m } + \frac{ y^2 }{ n } = 1\)相交于\(A ( x_1 , y_1 )\)\(B ( x_2 , y_2 )\).

那么联立方程是:\(( n + mk^2 ) x^2 + 2 k \varphi mx + m ( \varphi^2 - n ) = 0\).

判别式:\(\Delta = 4 mn ( n + mk^2 - \varphi^2 )\).

韦达定理:

\[ \begin{aligned} x_1 + x_2 & = \frac{ - 2 km \varphi }{ n + mk^2 } \\ x_1 x_2 & = \frac{ m ( \varphi^2 - n ) }{ n + mk^2 } \\ | x_1 - x_2 | & = \frac{ \sqrt{ \Delta } }{ n + mk^2 } \end{aligned} \]

配凑法

参考:https://zhuanlan.zhihu.com/p/521025768.

先猜结论,再对着结论构造一个对称式子,从而声明这个式子就是答案.

问题在于咋构造,通常前面的部分还是按部就班来.最后来一步”注意到”来机械降神.

感觉没什么太大用,因为小题直接猜结论,大题按部就班不会太慢.

应用

Example1(大联立/点参)

已知抛物线\(y^2 = 4 x\),若\(A , B\)位于抛物线上\(x\)轴上方不同的两点,直线\(OA , OB\)的斜率分别为\(k_1 , k_2\),且满足\(k_1 k_2 - 4 = 4 k_1 + 4 k_2\),求证:\(AB\)过定点,并求出\(k_{ AB }\)的取值范围.

注意到\(k_1\)\(k_2\)之间的关系很复杂,这个时候就别惦记你那小联立了,老老实实拿大联立做吧.

\(AB : y = kx + b\),则\(A ( x_1 , kx_1 + b ) , B ( x_2 , kx_2 + b )\),显然\(k_1 = k + \frac{ b }{ x_1 } , k_2 = k + \frac{ b }{ x_2 }\).

直接带入方程,有:

$$ \[\begin{aligned} ( k + \frac{ b }{ x_1 } ) ( k + \frac{ b }{ x_2 } ) - 4 & = 4 ( 2 k + \frac{ b }{ x_1 } + \frac{ b }{ x_2 } ) \\ k^2 + kb ( \frac{ 1 }{ x_1 } + \frac{ 1 }{ x_2 } ) + \frac{ b^2 }{ x_1 x_2 } - 4 & = 8 k + 4 b ( \frac{ 1 }{ x_1 } + \frac{ 1 }{ x_2 } ) \\ \end{aligned}\]

$$

而直接大联立得到的式子是:

\[ \begin{aligned} k^2 x^2 + ( 2 kb - 4 ) x + b^2 & = 0 \\ \Delta & = 16 - 16 kb > 0 , kb < 1 \\ x_1 x_2 & = \frac{ b^2 }{ k^2 } , x_1 + x_2 = \frac{ 4 - 2 kb }{ k^2 } , \frac{ 1 }{ x_1 } + \frac{ 1 }{ x_2 } = \frac{ 4 - 2 kb }{ b^2 } \end{aligned} \]

带入,得到\(k - b = 4\),因此过定点\(( - 1 , - 4 )\),与\(kb < 1\)联立得到\(k < 2 + \sqrt{ 5 }\).

还没完,这种题一定要检查一遍条件.注意到\(AB\)\(x\)轴上方两点的性质没用到,这意味着\(y_1 y_2 > 0 \land y_1 + y_2 > 0\),带入方程得到:

\[ \begin{aligned} b^2 + b ( \frac{ 4 - 2 kb }{ k } ) + b^2 & > 0 \\ \frac{ 4 - 2 kb }{ k } + 2 b & > 0 \end{aligned} \]

化简得到\(\begin{cases}b > 0 \\ k > 0\end{cases}\),解得\(k > 4\),于是\(k \in ( 4 , 2 + \sqrt{ 5 } )\).

这啥暴力计算啊…没啥好方法嘛?

首先显然的一点是:由于是在做抛物线,直线方程设成反式肯定会好算很多.(整理到这里才意识到可以设反式,但是懒得改前面的内容了)

看上去式子太复杂确实不太可能用小联立做.问题在于,\(OA\)\(OB\)的斜率看上去都很好表示,为何不能用点参做呢?

我们尝试直接用点参:

\[ \begin{aligned} k_{ OA } & = \frac{ y_1 }{ x_1 } , k_{ OB } = \frac{ y_2 }{ x_2 } \\ \frac{ y_1 y_2 }{ x_1 x_2 } - 4 & = 4 ( \frac{ y_1 }{ x_1 } + \frac{ y_2 }{ x_2 } ) \\ 16 - 4 y_1 y_2 & = 16 ( y_1 + y_2 ) \end{aligned} \]

我们毫不费力就导出了用反式之后做的式子,这仿佛在预示我们点参是有用的,让我们继续:

\[ \begin{aligned} & AB : \\ x - x_1 = & ( y - y_1 ) \frac{ x 1 - x_2 }{ y_1 - y_2 } \\ x - \frac{ y_1^2 }{ 4 } = & ( y - y_1 ) \frac{ 1 }{ 4 } ( y_1 + y_2 ) \\ x = & \frac{ y_1 + y_2 }{ 4 } y - \frac{ y_1 y_2 }{ 4 } \\ x = & \frac{ y_1 + y_2 }{ 4 } y - 1 + ( y_1 + y_2 ) \end{aligned} \]

显然过定点\(( - 1 , - 4 )\),并且通过\(y_1\)\(y_2\)的关系也很好求斜率的范围.

另外值得一提的是,通常情况下,不要用那个\(\frac{ x - x_1 }{ x_1 - x_2 } = \frac{ y - y_1 }{ y_1 - y_2 }\)的方程直接表示直线,你做抛物线的很重要的一个目标是通过消参来让式子变得更简洁,而不是去硬着头皮算,上面这个直线方程咋消参啊.

Example2(齐次化)

已知椭圆\(\frac{ x^2 }{ 4 } + y^2 = 1\),\(P , Q\)在椭圆上,\(A ( 2 , 0 )\),\(k_{ AP } k_{ AQ } = \frac{ 1 }{ 20 }\),求证:\(PQ\)过定点.

注意到\(A ( 2 , 0 )\),设\(P ( x_1 , y_1 ) , Q ( x_2 , y_2 )\),\(PQ : m ( x - 2 ) + yn = 1\),那么我们要求的也就是\(x - 2\)\(y\)之间的关系.

第一步先要把椭圆方程配出来,显然\(\frac{ x^2 }{ 4 } + y^2 = 1 \Rightarrow \frac{ ( x - 2 )^2 }{ 4 } + ( x - 2 ) + y^2 = 0\).

显然?这咋配的啊.

其实简单来说也就是令\(x ' = x - 2 , y ' = y\),我们有\(x = x ' + 2 , y = y '\),带入就可以得到关于\(x ' , y '\)的方程,然后再带回\(x\)\(y\)就行.

我们开始推导:

$$ \[\begin{aligned} \frac{ ( x - 2 )^2 }{ 4 } + ( x - 2 ) + y^2 = 0 \\ ( x - 2 )^2 + 4 ( x - 2 ) + 4 y^2 = 0 \\ ( x - 2 )^2 + 4 n ( x - 2 )^2 + 4 my ( x - 2 ) + 4 y^2 = 0 \\ ( 4 n + 1 ) ( x - 2 )^2 + 4 my ( x - 2 ) + 4 y^2 = 0 \\ 4 n + 1 + 4 m \frac{ y }{ x - 2 } + 4 ( \frac{ y }{ x - 2 } )^2 = 0 \\ \end{aligned}\]

$$

\(k = \frac{ y }{ x - 2 }\),也就得到了\(4 n + 1 + 4 mk + 4 k^2 = 0\).用一遍韦达定理,有:\(k_1 k_2 = \frac{ 4 n + 1 }{ 4 } = \frac{ 1 }{ 20 } , n = - \frac{ 1 }{ 5 }\).

也就有:\(PQ : - \frac{ 1 }{ 5 } ( x - 2 ) + my = 1\),显然过定点\(( - 3 , 0 )\).

Example3(小联立)

已知椭圆\(\frac{ x^2 }{ 9 } + y^2 = 1\),\(P , Q\)是该椭圆上两动点,\(M , N\)分别为\(P , Q\)\(x\)轴上的射影,而且\(k_{ OP } k_{ OQ } = - 1\),记\(S = S_{ \bigtriangleup OPM } + S_{ \bigtriangleup OQN }\),求\(S\)的最大值.

出现了两条直线!提问:使用大联立还是小联立.

考虑这么一个事实:大联立的用处应该体现在直线\(PQ\)很重要的时候,而这个题除了\(P , Q\)两点以外,和\(PQ\)半毛钱关系都没有.而且如果使用小联立,那么两个斜率之间的关系也很好表示,因此我们选择小联立.

\(P ( x_1 , y_1 ) , Q ( x_2 , y_2 )\),\(k = \frac{ y_1 }{ x_1 } , - \frac{ 1 }{ k } = \frac{ y_2 }{ x_2 }\):

$$ \[\begin{aligned} 2 S & = | x_1 y_1 | + | x_2 y_2 | \\ & = | x_1^2 k - \frac{ 1 }{ k } x_2^2 | \\ \end{aligned}\]

$$

而联立方程,有:

\[ x_1^2 = \frac{ 1 }{ \frac{ 1 }{ 9 } + k } , x_2^2 = \frac{ 1 }{ \frac{ 1 }{ 9 } - \frac{ 1 }{ k } } \]

代入计算即可求解.

当然这个题斜率形式很好看,拿点参肯定也是可以做的,但是没啥必要,因为斜率关系很好看.

等一下,大联立真的没啥希望嘛?

确实没啥希望,因为直线\(PQ\)有两个未知量,我们还需要拿\(k_{ OP } k_{ OQ } = - 1\)限制它们的关系,不如直接小联立.

Example4(非对称性韦达定理)

已知椭圆\(\frac{ x^2 }{ 2 } + y^2 = 1\),\(F ( 1 , 0 )\),直线\(l\)\(F\)且交椭圆于\(A , B\)两点.求问:\(x\)轴上是否存在异于\(F\)的一点\(Q\),使得\(\frac{ k_{ QA } }{ k_{ QB } }\)是定值.

直接设\(AB : x = ky + 1\),\(Q ( q , 0 )\).我们有:

\[ \begin{aligned} \frac{ k_{ QA } }{ k_{ QB } } & = \frac{ y_1 ( q - x_2 ) }{ y_2 ( q - x_1 ) } \\ & = - \frac{ ky_1 y_2 + y_1 - qy_1 }{ ky_1 y_2 + y_2 - qy_2 } \end{aligned} \]

坏了,这咋做.

我们用一下韦达定理得到:

$$ \[\begin{aligned} ( k^2 + 2 ) y^2 + 2 ky - 1 & = 0 \\ \Delta & = 8 k^2 + 8 > 0 \\ y_1 + y_2 & = - \frac{ 2 k }{ k^2 + 2 } \\ y_1 y_2 & = - \frac{ 1 }{ k^2 + 2 } \\ \end{aligned}\]

$$

注意到\(\frac{ ( y_1 + y_2 ) }{ 2 } = k ( y_1 y_2 )\),代入,有:

\[ \begin{aligned} \frac{ k_{ QA } }{ k_{ QB } } & = - \frac{ y_1 + y_2 + 2 y_1 - 2 qy_1 }{ y_1 + y_2 + 2 y_2 - 2 qy_2 } \\ & = - \frac{ ( 3 - 2 q ) y_1 + y_2 }{ ( 3 - 2 q ) y_2 + y_1 } \end{aligned} \]

若是定值,那么就有:\(\frac{ 3 - 2 q }{ 1 } = \frac{ 1 }{ 3 - 2 q }\),解得\(q_1 = 1 ( F )\),\(q_2 = 2 ( Q )\).

所以\(Q ( 2 , 0 )\).

Example5(配凑法)

已知椭圆\(\frac{ x^2 }{ 4 } + \frac{ y^2 }{ 3 } = 1\),过\(F ( - 1 , 0 )\)的直线交椭圆于\(M , N\)两点,过\(M\)作直线\(x = - 4\)的垂线,垂足为\(E\),求证:\(EN\)过定点.

根据对称原理,显然这个定点一定在\(x\)轴上.

我们先写大联立的式子:设\(MN : x = - 1 + ky\),带入有\(( 3 m^2 + 4 ) y^2 - 6 my - 9 = 0\).再设\(M ( x_1 , y_1 ) , N ( x_2 , y_2 )\),自然有:

\[ \begin{cases} \Delta = 144 k^2 + 144 \\ y_1 + y_2 = \frac{ 6 k }{ 3 k^2 + 4 } \\ y_1 y_2 = \frac{ - 9 }{ 3 k^2 + 4 } \end{cases} \]

接下来呢,我们想一下我们要求什么:我们要求出\(EN\)的表达式:形如\(y - m = k ( x - n )\),然后声明\(( n , m )\)是定点.

这又意味着啥呢,这意味着在这条直线上,除了那个定点以外,一定有\(k = \frac{ y - m }{ x - n }\).而我们现在有两个点\(E ( - 4 , y_1 )\)\(N ( x_2 , y_2 )\),又猜出\(m = 0\),也就是我们要找到一个\(n\)满足\(\frac{ y_1 }{ - 4 - n } = \frac{ y_2 }{ x_2 - n }\).

我们倒着推:

\[ \begin{aligned} \frac{ y_1 }{ - 4 - n } & = \frac{ y_2 }{ x_2 - n } \\ \frac{ y_1 }{ - 4 - n } & = \frac{ y_2 }{ ky_2 - 1 - n } \end{aligned} \]

这是啥,这是非对称性韦达定理.

这一步已经可以暴力化简了.但那样还不如直接做呢.所以我们直接选择从非对称性韦达定理的角度推过来.

观察韦达定理的关系式,我们有:

$$ \[\begin{aligned} ky_1 y_2 + \frac{ 3 }{ 2 } ( y_1 + y_2 ) & = 0 \\ ( x_2 + \frac{ 5 }{ 2 } ) y_1 & = - \frac{ 3 }{ 2 } y_2 \\ y_1 & = \frac{ - 3 }{ 2 } \frac{ y_2 }{ x_2 + \frac{ 5 }{ 2 } } \\ \frac{ y_1 }{ - \frac{ 3 }{ 2 } } & = \frac{ y_2 }{ x_2 + \frac{ 5 }{ 2 } } \\ \frac{ y_1 }{ - 4 + \frac{ 5 }{ 2 } } & = \frac{ y_2 }{ x_2 + \frac{ 5 }{ 2 } } \\ \end{aligned}\]

$$

做到这一步发现要做完了,不难发现\(n = \frac{ 5 }{ 2 }\).

等一下,最后咋就这么巧就凑出来了呢?

因为你都确定了\(m = 0\)了,肯定是可以凑出来的,除非它真的不过定点.

极点极线
定义

几何定义

感觉这个定义大概率没啥用

过不在二次曲线上的一点\(P\)作直线\(l\)交二次曲线于\(M , N\)两点(离\(P\)近的是\(M\)),则在\(l\)上有且只有一点\(Q\),使得\(| MQ | | NP | = | MP | | NQ |\)(即\(P , Q , M , N\)构成一调和点列).当\(l\)绕着\(P\)旋转时,\(Q\)的轨迹是一条直线\(p\)(或一部分),这条直线\(p\)叫做点\(P\)关于二次曲线的极线,而\(P\)叫做\(p\)关于该曲线的极点.

以椭圆为例子,接下来我们声明:\(p : \frac{ x_0 x }{ a^2 } + \frac{ y_0 y }{ b^2 } = 1\).

证明:我有一个绝妙的证法,可惜这里地方太小,写不下.

代数定义

对于不在二次曲线\(C : Ax^2 + Bxy + Cy^2 + Dx + Ey + F = 0\)上的一点\(P ( x_0 , y_0 )\),我们称它的极线为\(p : Axx_0 + B \frac{ x_0 y + y_0 x }{ 2 } + Cyy_0 + D \frac{ x + x_0 }{ 2 } + E \frac{ y + y_0 }{ 2 } + F = 0\).

而对于在二次曲线上的点,我们也可以这么定义,不难发现此时极线就是过极点的切线.

证明:我有一个绝妙的证法,可惜这里地方太小,写不下.

基本性质

性质1(配极原理)

对于同一条二次曲线\(C\),如果点\(P\)的极线经过点\(Q\),那么点\(Q\)的极线经过点\(P\).

证明:我有一个绝妙的证法,可惜这里地方太小,写不下.

性质2(配极原理推论)

两点连线的极点是这两点的极线的交点;两直线交点的极线是这两直线的极点的连线.

证明:由性质1,显然.

性质3(极点与极线的位置关系)

ps:对于双曲线而言:我们所说的在内部指的是平面中被双曲线分为的三部分平面中对称的那两部分.抛物线类似.

  1. 设四边形\(ABCD\)(对边不平行)内接于二次曲线\(C\),则对角线交点\(P\)的极线是两组对边交点的连线.反之同理,若\(P\)在二次曲线内部,那以这个点为对角线交点的内接四边形对边交点的连线就是它的极线.这告诉我们:若一个点在二次曲线内,那它的极线一定在二次曲线外.反之亦然成立.

  2. 若一个点在二次曲线上,那它的极线就是过这个点的二次曲线的切线.

  3. 若一个点在二次曲线外,那它的极线就是过这个点向二次曲线作两条切线,这两条切线与二次曲线的交点的连线.

证明:我有一个绝妙的证法,可惜这里地方太小,写不下.

使用方法

通过极点极线猜结论,然后想办法证明结论.

Example1

已知\(\frac{ \cos \theta }{ a } + \frac{ \sin \theta }{ b } = 1\),求证:\(\frac{ 1 }{ a^2 } + \frac{ 1 }{ b^2 } \geq 1\).

设直线\(l : \frac{ x }{ a } + \frac{ y }{ b } = 1\),\(M ( \cos \theta , \sin \theta )\),则\(M\)\(l\)上.

又注意到\(M\)显然是在单位圆上,而\(l\)是单位圆关于\(P ( \frac{ 1 }{ a } , \frac{ 1 }{ b } )\)的极点.又注意到\(l\)与单位圆至少有一个交点,因此\(P\)要么在圆上要么在圆外,得证.

Example2

已知椭圆\(\frac{ x^2 }{ 4 } + \frac{ y^2 }{ 3 } = 1\),\(A_1 ( - 2 , 0 ) , A_2 ( 2 , 0 ) , D ( \frac{ 1 }{ 2 } , 0 )\),过\(D\)的直线交椭圆于\(P , Q\)两点(不与\(A_1 , A_2\)重合).\(A_1 P \cap A_2 Q = M\),\(A_1 Q \cap A_2 P = N\),设\(k_1 = k_{ A_1 P } , k_2 = k_{ A_1 Q }\).求证:\(k_1 k_2\)是定值,求出这个定值并求出\(\bigtriangleup DMN\)面积的最小值.

一眼极点极线,通过极点极线知识不难得知\(MN : x = 8\).

我们先来看已知\(MN : x = 8\)之后怎么做:

\(P ( x_1 , y_1 ) , Q ( x_2 , y_2 )\),再设\(PQ : x = ky + \frac{ 1 }{ 2 }\),则:\(k_1 k_2 = \frac{ y_1 }{ x_1 + 2 } \frac{ y_2 }{ x_2 + 2 }\),不难算出\(k_1 k_2 = - \frac{ 9 }{ 20 }\).

此时\(S_{ \bigtriangleup DMN } = | MN | | 8 - \frac{ 1 }{ 2 } | \frac{ 1 }{ 2 }\).不难发现只需求出\(| MN |_{ \min }\)即可.而\(MN \bot x\)轴,所以\(| MN | = | y_M - y_N |\).

接下来咋做?第一问求得\(k_1\)\(k_2\)的关系不能白求啊!

我们有\(A_1 P : x = - 2 + \frac{ 1 }{ k_1 } y , A_1 Q : x = - 2 + \frac{ 1 }{ k_2 } y\),带入\(x = 8\),求得\(y_M = 10 k_1 , y_N = 10 k_2\).

于是\(| MN | = 10 | k_1 - k_2 |\).注意到\(k_1 > 0 \land - k_2 > 0 \land k_1 ( - k_2 ) = \frac{ 9 }{ 20 }\),显然可以用基本不等式计算,最后得到\(S_{ \min } = \frac{ 45 \sqrt{ 5 } }{ 2 }\).

好,问题就差一步极点极线的证明了.

这个时候,我们先说出\(A_1 Q : x = - 2 + \frac{ y_2 }{ x_2 + 2 } y , A_2 P : x = 2 + \frac{ y_1 }{ x_1 - 2 } y\),然后我们声明这两条直线的交点的横坐标一定是\(8\),然后代入验证即可.

好吧我也觉得很无赖,没办法.

隐函数求导

大概是这样的:

拿椭圆举例子,我们假设椭圆方程是\(\frac{ x^2 }{ a^2 } + \frac{ y^2 }{ b^2 } = 1\).

我们将\(y\)看作\(x\)的函数,对两边求导,自然得到:

\[ \frac{ 2 x }{ a^2 } + \frac{ 2 yy ' }{ b^2 } = 0 \]

这是个方程,你可以解得\(y ' = - \frac{ b^2 x }{ a^2 y }\).而这就是椭圆过\(( x , y )\)这一点切线的斜率.用点斜式就可以得到方程.

目前没发现这方法在除了推导切线方程以外有啥用.

线性变换

大概率没啥用的方法,不过思想还是挺重要的.

(好吧我特意写这么一栏只是因为我线代学魔怔了)

简单来说就是把一般的图形变成特殊的图形,然后乱做.

线性变换的问题在于角的变化有点随意.不过边长以及斜率的变化都可以控制.

不过感觉只有椭圆是迫真有用的东西

旋转矩阵

向量\(\vec{ b } = ( x , y )\)逆时针旋转\(\theta\)后得到的答案是\(A \vec{ b }\),其中

,-\

,

\end{bmatrix}

你要不喜欢矩阵表示也不是不行,那向量\(( x , y )\)旋转\(\theta\)得到\(( x ' , y ' )\),其中

y’=xsin+ycos

椭圆转化成圆

我们注意到圆的方程是\(( x ' )^2 + ( y ' )^2 = 1\),而椭圆的方程形如\(\frac{ x^2 }{ a^2 } + \frac{ y^2 }{ b^2 } = 1\).

我们注意到上面的式子等价于:\(( \frac{ x }{ a } )^2 + ( \frac{ y }{ b } )^2 = 1\).我们将原坐标系中的所有坐标\(( x , y )\)全部变成\(( \frac{ x }{ a } , \frac{ y }{ b } )\)之后,就得到了一个新的坐标系.在新的坐标系中,我们只需要对着圆做就行.

换成线性代数语言,令\(\vec{ f } = ( x , y )\)满足椭圆方程,令\(\vec{ g } = ( x ' , y ' )\)满足圆的方程,自然有:

$$ \[\begin{aligned} \begin{bmatrix} \frac{ 1 }{ a } , 0 \\ 0 , \frac{ 1 }{ b } \end{bmatrix} \vec{ f } & = \vec{ g } \\ \end{aligned}\]

$$

\[ \begin{bmatrix} a , 0 \\ 0 ,{ b } \end{bmatrix} \vec{ g } = \vec{ f } \]

双曲线转化为反比例函数

注意到反比例函数的方程是\(x ' y ' = 1\),而双曲线的方程是\(\frac{ x^2 }{ a^2 } - \frac{ y^2 }{ b^2 } = 1\).

这个要硬配可能有些抽象.我们拿矩阵导一导.

首先先转化为\(x^2 - y^2 = 2\)的形式,需要左乘矩阵\(\begin{bmatrix}\frac{ \sqrt{ 2 } }{ a } , 0 \\ 0 , \frac{ \sqrt{ 2 } }{ b }\end{bmatrix}\).

然后这个形式和我们所需要的反比例函数的形式只差一步旋转\(\frac{ \pi }{ 4 }\)了.旋转矩阵为

,-\

,

\end{bmatrix}

把两个东西乘起来得到矩阵

,-\

,

\end{bmatrix}

验证一下,我们有\(x ' = \frac{ x }{ a } - \frac{ y }{ b } , y ' = \frac{ x }{ a } + \frac{ y }{ b }\).带入反比例函数的方程:

\[ x ' y ' = \frac{ x^2 }{ a^2 } - \frac{ y^2 }{ b^2 } = 1 \]

对着矩阵求逆一下得到:逆矩阵为

,\

-,

\end{bmatrix}

验证一下,我们有\(x = \frac{ a }{ 2 } ( x ' + y ' ) , y = \frac{ b }{ 2 } ({ y ' - x ' } )\),带入双曲线方程得到:

\[ \begin{aligned} ( \frac{ x }{ a } )^2 - ( \frac{ y }{ b } )^2 & = 1 \\ ( x ' + y ' )^2 - ( x ' - y ' )^2 & = 4 \\ x ' y ' & = 1 \end{aligned} \]

要觉得矩阵部分比较魔怔也可以直接看上面的普通描述.

抛物线转化为二次函数

这个比较简单,交换\(x , y\)即可,小问题.

极坐标

平面内取一点\(O\)为极点,引一条射线\(Ox\)叫做极轴,再选定单位长度和单位角度以及角度正方向,就建立了一个极坐标系.

对于平面上任意一点\(M\),令\(\rho = | OM |\),\(\theta\)为以\(Ox\)为始边,沿角度正方向(一般是逆时针方向)转到\(OM\)的夹角.那么我们称\(( \rho , \theta )\)\(M\)的极坐标,其中\(\rho\)叫做极径,\(\theta\)叫做极角.

\(\rho\)有可能取负,我们通常认为\(( - \rho , \theta ) = ( \rho , \theta + \pi )\).

通常情况下默认\(0 \leq \theta < 2 \pi , \rho \geq 0\).如果遇到和直角坐标系结合的问题,通常默认原点为极点,\(x\)轴正半轴为极轴且二者单位长度相等.下文如无特殊说明均按此建立极坐标.

注意到若\(M\)在直角坐标系中坐标为\(( x , y )\),在极坐标中坐标为\(( \rho , \theta )\),若\(M \ne O\)自然有:

\[ \begin{aligned} x & = \rho \cos \theta , y = \rho \sin \theta \\ \rho^2 & = x^2 + y^2 , \theta = \begin{cases} \frac{ \pi }{ 2 } & x = 0 \land y > 0 \\ \frac{ 3 \pi }{ 2 } & x = 0 \land y < 0 \\ \arctan ( \frac{ y }{ x } ) & x \ne 0 \end{cases} \end{aligned} \]

看到这里,聪明的你可能已经发现了不对劲:那这玩意怎么做坐标系变换呢?这玩意难道能乱乘矩阵嘛?这俩项单位都不一样欸.

别急,你注意到这个东西看上去不太能整什么抽象的坐标系,做的时候直接考虑转化为平面直角坐标系再做.

圆的极坐标方程

显然是\(\rho^2 = r^2\).

另外,如果中心在\(C ( \rho_0 , \theta_0 )\),半径为\(r\)的方程咋求呢?

我们考虑本质是坐标系变换,想都别想先转平面直角坐标系,自然有:

\[ \begin{aligned} r^2 & = ( \rho \cos \theta - \rho_0 \cos \theta_0 )^2 + ( \rho \sin \theta - \rho_0 \sin \theta_0 ) \\ r^2 & = \rho^2 + \rho_0^2 - 2 \rho \rho_0 \cos \theta \cos \theta_0 - 2 \rho \rho_0 \sin \theta \sin \theta_0 \\ r^2 & = \rho^2 + \rho_0^2 - 2 \rho \rho_0 \cos ( \theta - \theta_0 ) \end{aligned} \]

另外由于\(\cos \theta = \cos ( - \theta )\),这个公式应该不难背.

直线的极坐标方程

过定点\(( \rho_1 , \theta_1 )\),且倾斜角为\(\alpha\):\(\rho \sin ( \alpha - \theta ) = \rho_1 \sin ( \alpha - \theta_1 )\).

这个咋推的呢,先换回平面直角坐标系,假设过定点\(( x_1 , y_1 )\),倾斜角为\(\alpha\),我们自然有\(( x - x_1 ) \sin \alpha = ( y - y_1 ) \cos \alpha\).

于是有:

\[ \begin{aligned} ( x - x_1 ) \sin \alpha & = ( y - y_1 ) \cos \alpha \\ ( \rho \cos \theta - \rho_1 \cos \theta_1 ) \sin \alpha & = ( \rho \sin \theta - \rho_1 \sin \theta_1 ) \cos \alpha \\ \rho \sin ( \alpha - \theta ) & = \rho_1 \sin ( \alpha - \theta_1 ) \end{aligned} \]

其实本质还是极坐标轴变换,因为过极点的直线是显然的.

我们再来考虑一个:求过定点\(( \rho_1 , \theta_1 )\)\(( \rho_2 , \theta_2 )\)的直线方程.

同理的:

\[ \begin{aligned} ( x - x_1 ) ( y_2 - y_1 ) & = ( y - y_1 ) ( x_2 - x_1 ) \\ \\ ( \rho \cos \theta - \rho_1 \cos \theta_1 ) ( \rho_2 \sin \theta_2 - \rho_1 \sin \theta_1 ) \\ & = ( \rho_2 \cos \theta_2 - \rho_1 \cos \theta_1 ) ( \rho \sin \theta - \rho_1 \sin \theta_1 ) \\ \\ \rho \rho_2 ( \cos \theta \sin \theta_2 - \cos \theta_2 \sin \theta ) \\ + \rho \rho_1 ( - \cos \theta \sin \theta_1 + \sin \theta \cos \theta_1 ) \\ + \rho_1 \rho_2 ( - \cos \theta_1 \sin \theta_2 + \cos \theta_2 \sin \theta_1 ) \\ & = 0 \\ \\ \rho \rho_2 \sin ( \theta_2 - \theta ) + \rho \rho_1 \sin ( \theta - \theta_1 ) + \rho_1 \rho_2 \sin ( \theta_1 - \theta_2 ) & = 0 \end{aligned} \]

太丑了吧,甚至不对称?

(网上的资料这一步可以继续往下化简,用一些三角函数知识).

这个故事教给我们:极坐标系下是很难表示一些直线的.

那表示曲线呢?

圆锥曲线的极坐标方程

优美的来了!

我们注意到圆锥曲线的一种定义是:到准线距离\(d\)和到定点距离\(r\)之比为常数的曲线.令\(e = \frac{ r }{ d }\).

假定定点为原点,极轴垂直于准线,\(h\)为定点到准线的距离,又设曲线上一点为\(M ( \rho , \theta )\),自然有:\(r = \rho , d = h + \rho \cos \theta\).

于是有:

\[ \begin{aligned} e & = \frac{ \rho }{ h + \rho \cos \theta } \\ he + e \rho \cos \theta & = \rho \\ \rho & = \frac{ he }{ 1 - e \cos \theta } \end{aligned} \]

值得一提的是这玩意不能将圆理解为\(e = 0\)的圆锥曲线.

参数方程

在平面直角坐标系中,曲线上任意一点的坐标\(x , y\)都是某个变量\(t\)的函数\(\begin{cases}x = f ( t ) \\ y = g ( t )\end{cases}\).

圆的参数方程

\(M ( r \cos \theta , r \sin \theta )\),其中\(\theta\)\(\angle OMx\).

直线的参数方程

\(M ( x_0 + t \cos \theta , y_0 + t \sin \theta )\),其中\(\theta\)是倾斜角,\(t\)是参数,\(M_0 ( x_0 , y_0 )\).

注意到\(| M_0 M | = | t |\).事实上,设\(\vec{ e } = ( \cos \theta , \sin \theta )\),也就是直线的单位方向向量,则\(\overrightarrow{ M_0 M } = t \vec{ e }\).

椭圆的参数方程

\(M ( a \cos \theta , b \sin \theta )\),其中\(\theta\)称为\(M\)的离心角.

值得注意的是,这里的\(\theta\)并非\(\angle MOx\),而是将椭圆线性变换回圆后对应点的对应圆心角.

Example1

在椭圆\(\frac{ x^2 }{ 9 } + \frac{ y^2 }{ 4 } = 1\)上求一点\(M\),使\(M\)到直线\(x + 2 y - 10 = 0\)的距离最小.

直接令\(M = ( 3 \cos \theta , 2 \sin \theta )\),则\(d = \frac{ | 3 \cos \theta + 4 \sin \theta - 10 | }{ \sqrt{ 5 } } = | \sqrt{ 5 } \sin ( \theta + \varphi ) - 2 \sqrt{ 5 } |\),其中\(\varphi = \arcsin \frac{ 3 }{ 5 }\).

于是\(d_{ \min } = \sqrt{ 5 }\),此时\(\sin ( \theta + \varphi ) = 1 = \sin{ \frac{ \pi }{ 2 } }\),那么就有\(\theta = \frac{ \pi }{ 2 } - \varphi\),\(\sin \theta = \cos \varphi = \frac{ 4 }{ 5 } , \cos \theta = \sin \varphi = \frac{ 3 }{ 5 }\).

\(M = ( \frac{ 9 }{ 5 } , \frac{ 8 }{ 5 } )\).

Example2

已知椭圆\(\frac{ x^2 }{ 100 } + \frac{ y^2 }{ 64 } = 1\),有一内接矩阵\(ABCD\)(\(AB / / x , BC / / y\)),求矩阵最大面积.

直接令\(A = ( 10 \cos \theta , 8 \sin \theta )\),则\(S = 20 \cos \theta \times 16 \sin \theta = 160 \sin ( 2 \theta )\),\(S_{ \max } = 160\).

双曲线的参数方程

\(M ( \frac{ a }{ \cos \theta } , b \tan \theta ) = M ( a \sec \theta , b \tan \theta )\),其中\(\theta\)称为\(M\)的离心角,通常规定\(\theta \in [ 0 , 2 \pi ] \land \theta \ne \frac{ \pi }{ 2 } \land \theta \ne \frac{ 3 \pi }{ 2 }\).

其实本质也就是三角恒等式\(\sec^2 \theta = 1 + \tan^2 \theta\).

Example1

\(O : x^2 + ( y - 2 )^2 = 1\)上有一点\(P\),双曲线\(x^2 - y^2 = 1\)上有一点\(Q\),求\(| PQ |_{ \min }\).

\(Q ( \sec \theta , \tan \theta )\),则:

\[ \begin{aligned} | OQ |^2 & = \sec^2 \theta + ( \tan \theta - 2 )^2 \\ & = \tan^2 \theta + 1 ( \tan \theta - 2 )^2 \\ & = 2 ( \tan \theta - 1 )^2 + 3 \end{aligned} \]

\(| OQ |_{ \min } = \sqrt{ 3 } , | PQ |_{ \min } = \sqrt{ 3 } - 1\).

Example2

求证:等轴双曲线平行于实轴的弦在两顶点所张的角均为直角.

\(P ( a \sec \theta , a \tan \theta ) , Q ( - a \sec \theta , a \tan \theta )\),则\(k_P = \frac{ a \tan \theta }{ a \sec \theta - a } , k_Q = \frac{ a \tan \theta }{ - a \sec \theta - a }\).注意到\(k_P \cdot k_Q = - 1\).

Example3

已知双曲线\(\frac{ x^2 }{ a^2 } - \frac{ y^2 }{ b^2 } = 1\),\(A , B\)是双曲线同支上相异两点,线段\(AB\)的垂直平分线与\(x\)轴相交于点\(P ( x_0 , 0 )\),求证:\(| x_0 | > \frac{ c^2 }{ a } = \frac{ a^2 + b^2 }{ a }\).

\(A ( a \sec \alpha , b \tan \alpha ) , B ( a \sec \beta , b \tan \beta )\),则中点\(M ( \frac{ a }{ 2 } ( \sec \alpha + \sec \beta ) , \frac{ b }{ 2 } ( \tan \alpha + \tan \beta ) )\).

于是中垂线方程为\(y - \frac{ b }{ 2 } ( \tan \alpha + \tan \beta ) ) = - \frac{ a ( \sec \alpha - \sec \beta ) }{ b ( \tan \alpha - \tan \beta ) } [ x - \frac{ a }{ 2 } ( \sec \alpha + \sec \beta ) ]\).

代入\(P ( x_0 , 0 )\),求得\(x_0 = \frac{ c^2 }{ 2 a } ( \sec \alpha + \sec \beta )\).

也就是要比较\(| \sec \alpha + \sec \beta |\)\(2\)的大小关系,注意到\(A , B\)同支,所以\(| \sec \alpha + \sec \beta | > 2\).

抛物线的参数方程

\(M ( \frac{ 2 p }{ \tan^2 \theta } , \frac{ 2 p }{ \tan \theta } )\),其中\(\theta\)称为\(M\)的离心角,意义是该点和原点所确定直线的斜率,注意这个参数方程不能表示抛物线顶点.

事实上,我们可以有一个别的参数方程表达:\(M ( 2 pk^2 , 2 pk )\),这个参数方程可以表示顶点.

Example1

若抛物线\(\begin{cases}x = 2 pt^2 \\ y = 2 pt\end{cases}\)上有不同两点\(M_1 , M_2\),所对应的参数分别是\(t_1 , t_2\),求直线\(M_1 M_2\)所在直线的斜率.

\(k_{ M_1 M_2 } = \frac{ 2 pt_1 - 2 pt_2 }{ 2 pt_1^2 - 2 pt_2^2 } = \frac{ 1 }{ t_1 + t_2 }\).

Example2

\(A , B\)是抛物线\(y^2 = 2 px\)上异于顶点的两动点,且\(OA \bot OB\),\(AB\)上有一点\(M\)满足\(OM \bot AB\),求\(M\)的轨迹方程.

\(M ( x , y ) , A ( 2 pt_1^2 , 2 pt_1 ) , B ( 2 pt_2^2 , 2 pt_2 )\),注意到:

\[ \begin{aligned} \overrightarrow{ OM } & = ( x , y ) \\ \overrightarrow{ OA } & = ( 2 pt_1^2 , 2 pt_1 ) \\ \overrightarrow{ OB } & = ( 2 pt_2^2 , 2 pt_2 ) \\ \overrightarrow{ AB } & = ( 2 p ( t_2^2 - t_1^2 ) , 2 p ( t_2 - t_1 ) ) \end{aligned} \]

因为\(\overrightarrow{ OA } \bot \overrightarrow{ OB }\),所以\(( 2 pt_1 t_2 )^2 + ( 2 p )^2 t_1 t_2 = 0\),\(t_1 t_2 = - 1\).

因为\(\overrightarrow{ AB } \bot \overrightarrow{ OM }\),又有\(k_{ AB } = \frac{ 1 }{ t_1 + t_2 }\),所以\(k_{ OM } = - ( t_1 + t_2 )\),\(\frac{ y }{ x } = - ( t_1 + t_2 )\).

接下来咋做捏?注意到我们好像忘记了\(ABM\)三点共线的性质,拿向量做这个东西.

\(\overrightarrow{ AM } = ( x - 2 pt_1^2 , y - 2 pt_1 ) , \overrightarrow{ MB } = ( 2 pt_2^2 - x , 2 pt_2 - y )\).

那么有\(( x - 2 pt_1^2 ) ( 2 pt_2 - y ) = ( 2 pt_2^2 - x ) ( y - 2 pt_1 )\).

化简得到\(x^2 + y^2 - 2 px = 0 ( x \ne 0 )\).

等一下,这咋想到的啊.

首先注意到我们有两个点\(A , B\),自然要设出它们的参数方程.然后呢?然后我们发现最后\(M\)一定和\(t_1 , t_2\)有关.但是我们要求的是\(M\)的方程,其中不能带有\(t_1 , t_2\),因此考虑把\(M\)的坐标设出来,再用这个坐标表示\(t_1 , t_2\),表示不出来表示\(t_1 t_2 , t_1 + t_2\)也可以,然后消掉即可.

当然这题还有一个做法,注意到\(M\)一定在以\(| OA |\)为直径的圆上,\(B\)同理,这两个圆的方程分别为:

\[ \begin{aligned} x^2 + y^2 - 2 pt_1^2 x - 2 pt_1 y & = 0 \\ x^2 + y^2 - 2 pt_2^2 x - 2 pt_2 y & = 0 \end{aligned} \]

也就是说,\(t_1 , t_2\)是同一个方程的两个根,根据韦达定理自然有\(t_1 t_2 = \frac{ - ( x^2 + y^2 ) }{ 2 px } = - 1\),于是直接有\(x^2 + y^2 - 2 px = 0\).

还没完,注意到\(O\)一定是一个根,要去掉,所以答案就是\(x^2 + y^2 - 2 px = 0 ( x \ne 0 )\).

Example3

已知\(A , B , C\)是抛物线\(y^2 = 2 px ( p > 0 )\)上的三个点,且\(BC\)\(x\)轴垂直,直线\(AB\)\(AC\)分别与抛物线的轴交于\(D , E\)两点,求证:抛物线的顶点平分\(DE\).

\(A ( 2 pt_1^2 , 2 pt_1 ) , B ( 2 pt_2^2 , 2 pt_2 ) , C ( 2 pt_2^2 , - 2 pt_2 )\),注意到\(AB : y - 2 pt_1 = \frac{ 1 }{ t_1 + t_2 } ( x - 2 pt_1^2 )\),\(AC : t - 2 pt_1 = \frac{ 1 }{ t_1 - t_2 } ( x - 2 pt_1^2 )\).

可求得\(D ( - 2 pt_1 t_2 , 0 ) , E ( 2 pt_1 t_2 , 0 )\),于是得证.

蒙日圆

参考:https://zhuanlan.zhihu.com/p/591258689

定义

过圆锥曲线外一点作两条互相垂直的切线,那么这一点的轨迹是一个圆,这个圆被称为蒙日圆,又叫外准圆.

方程

椭圆的蒙日圆方程

设椭圆为\(\frac{ x^2 }{ a^2 } + \frac{ y^2 }{ b^2 } = 1\),其蒙日圆方程为\(x^2 + y^2 = a^2 + b^2\).

证明:直接设椭圆上一点就可以导出.

双曲线的蒙日圆方程

设双曲线为\(\frac{ x^2 }{ a^2 } - \frac{ y^2 }{ b^2 } = 1\),其蒙日圆方程为\(x^2 + y^2 = a^2 - b^2\).

证明:其实注意到椭圆的证明中设\(b\)是复数也是成立的,自然得证双曲线.

我知道你在想啥,你在想有没有可能一个点向双曲线能做出超过两条切线.事实上根据渐近线的原理这是不可能滴.

抛物线的蒙日圆方程

设抛物线\(y^2 = 2 px\),其蒙日圆方程为\(x = - \frac{ p }{ 2 }\).

有一说一,直线是半径无穷大的圆.

阅读全文 »

汉诺塔问题

三个柱子,\(n\)个面积互不相等的有孔圆盘一开始按照面积从上往下以此增大的顺序套在其中一个柱子上.

现在每次可以将某根柱子顶端的圆盘移动到另一根柱子顶端,要求这根柱子原本没有圆盘或者柱子顶端圆盘面积大于该圆盘.

求最小移动次数,使得所有圆盘移动到另一根柱子上.

不妨令\(T_n\)表示答案,显然\(T_0 = 0 , T_1 = 1\).

而我们一定可以找到一种方案,使得前\(n - 1\)个圆盘先移动到其中一根柱子上,然后将最下面的圆盘移动到目标柱子,最后再把\(n - 1\)个圆盘移动到目标柱子.由于这是一个可行解而不一定是最优解,我们有:\(T_n \leq 2 T_{ n - 1 } + 1\).

而如果我们要移动最大的圆盘,一定要保证前n-1个圆盘已经移走到一根柱子上.因此一定有:\(2 T_{ n - 1 } + 1 \leq T_n\).于是有\(T_n = 2 T_{ n - 1 } + 1\).

Example1(《具体数学》1.2)

汉诺塔问题,所有圆盘一开始均在最左边的塔A上,要将他们全都移动到最右边的塔C上,不允许在二塔之间直接移动,求最小操作次数.

Solution 1

考虑设\(T_n\)为n个圆盘时的最小操作次数.假设已知\(T_{ n - 1 }\),我们考虑如何移动.

首先因为不能直接在AC之间移动,因此一定是先要把最大的圆盘移动到中间塔上,这一步要求先把所有圆盘移动到C上,然后需要再把这些圆盘移动回A上,因此,显然有:\(T_{ n } = 3 T_{ n - 1 } + 2 , T_0 = 0\).

考虑如何求该式子的封闭形式,令\(W_n = T_n + 1\),显然有\(W_n = 3 W_{ n - 1 } , W_0 = 1\),显然\(W_n = 3^n\),有\(T_n = 3^n - 1\).

注意到\(T_n\)刚好是三根柱子上所有合法排列的数量,并且这个过程中不可能出现某两个时刻的情况是相同的,因此1.3也可以证明.

Example2(《具体数学》1.4)

汉诺塔问题,问是否存在一种符合规则的初始摆放方式,使得将其全部移动到其中一根柱子所用次数小于等于\(2^n - 1\).

Solution 2

不存在.

证明方式类似原初问题的证明,考虑最大的那个圆盘是否到达终点.如果到达则可以去掉它,用数学归纳证明不存在;如果还未到达,同样用数学归纳得到不等式.

Example3(《具体数学》1.10)

汉诺塔问题,但是移动圆盘时只能从A移动到B,从B移动到C,从C移动到A.一开始所有圆盘都在A,求将它们全部移动到B的最小操作次数,以及将他们从B移动回A的最小操作次数.

Solution 3

\(Q_n\)为将n个圆盘从A移动到B的最小操作次数,令\(R_n\)为将n个圆盘从B移动回A的最小操作次数.

先考虑边界情况,\(Q_0 = 0 , R_0 = 0\).

我们考虑,由于柱子间在移动过程中是无区别的,因此\(Q_n\)的实质是将n个圆盘移动到它的下一个柱子的最小操作次数,\(R_n\)的实质是将n个圆盘移动到它的上一个柱子的最小操作次数.

在将最大的圆盘移动到下一根柱子前,一定要先把上面的圆盘全部移动到上一根柱子上,最后再移动回来.

显然有\(Q_n = 2 R_{ n - 1 } + 1 , 1 \leq n\).

在将最大的圆盘移动到上一根柱子前,一定要先把他移动到下一根柱子上,这个步骤要求我们把其他的圆盘移动到上一根柱子上.在这之后,我们又要把所有圆盘放到上一根柱子上来让最大圆盘到目标柱子,最后再移动回来.

\(R_n = R_{ n - 1 } + 1 + Q_{ n - 1 } + 1 + R_{ n - 1 } = Q_n + Q_{ n - 1 } + 1 , 1 \leq n\).

Example4(《具体数学》1.11)

汉诺塔问题,但是每种大小的圆盘有两个,且其中一个可以摆放在另一个的上面.

a.如果相同圆盘无区别,求最小操作次数.

b.如果相同圆盘有区别,且最后需要还原原本二者的上下顺序,求最小操作次数.

Solution 4

a.仍然令\(T_n\)为n对圆盘的最小操作次数,显然\(T_n = 2 T_{ n - 1 } + 2 , T_0 = 0\),可解得\(T_n = 2^{ n + 1 } - 2\).

b.令\(Q_n\)为n对圆盘的最小操作次数,观察a问题,我们可以发现a问题转移之后,只有最下面的两个圆盘会交换顺序.而如果我们在b问题中只关注最下层两个圆盘的顺序,我们发现\(Q_n = T_{ n - 1 } + 1 + T_{ n - 1 } + 1 + T_{ n - 1 } + 1 + T_{ n - 1 } = 4 T_{ n - 1 } + 3 = 2^{ n + 2 } - 5\).

我们进行了四次a操作,那么次下面两个圆盘自然就顺序与原本相同了,因此这里的\(Q_n\)就是答案.

Example5(《具体数学》1.12)

类似Problem11,但第\(i\)大的圆盘有\(k_i\)个.

Solution 5

无区别,只是\(T_n = 2 T_{ n - 1 } + k_n , T_0 = 0\).

如果求封闭形式的话,显然有\(T_n = \sum_{ i = 1 }^n 2^{ n - i } k_i\).

递归式的封闭形式

在上述问题中,我们已经有了以下式子:

\(T_n = 2 T_{ n - 1 } + 1 , n > 0 , T_0 = 0\).

如果\(n\)很大,那么一步一步去计算是很复杂的,现在我们想知道一种更为快速的求出\(T_n\)的方法.

换句话说,我们想要把\(T_n\)表示为只与n有关的式子,我们称其为该递归式的封闭形式.

寻找循环节

Example(《具体数学》1.8)

解递归式:\(Q_n = \begin{cases}\alpha & n = 0 \\ \beta & n = 1 \\ \frac{ ( 1 + Q_{ n - 1 } ) }{ Q_{ n - 2 } } & n > 1\end{cases}\),保证\(\forall n , Q_n > 0\).

Solution

注意到\(Q_2 = \frac{ \beta + 1 }{ \alpha } , Q_3 = \frac{ \beta + \alpha + 1 }{ \beta \alpha } , Q_4 = \frac{ 1 + \alpha }{ \beta } , Q_5 = \alpha , Q_6 = \beta\).

显然该递归式存在长度为\(5\)的循环节.

数学归纳法

观察T序列的前几项,可以发现似乎有\(T_n = 2^n - 1\).

现在我们来证明它:

1.该公式对于\(n = 0\)成立,显然可验证.

2.若该公式对\(n = k\)时成立,那该公式必然对\(n = k + 1\)成立.

因为有\(T_{ k + 1 } = 2 T_k + 1 = 2 \times 2^k + 2 - 1 = 2^{ k + 1 } - 1\).

以上过程被称为数学归纳法.

Example(《具体数学》1.9)

求证:\(\prod_{ i = 1 }^n x_i \leq ( \frac{ \sum_{ i = 1 }^n x_i }{ n } )^n , \forall i \in N_+ , 1 \leq i \leq n , 0 \leq x_i\).

Solution

使用反向归纳法.

1.\(n = 2\)时,即基本不等式,显然成立.

2.若该式子对\(n = k\)时成立,则该式子对n=2k时也成立.

不妨令\(A_1 = \sqrt[k]{ \prod_{ i = 1 }^k x_i } , B_1 = \sqrt[k]{ \prod_{ i = k + 1 }^{ 2 k } x_i } , A_2 = ( \frac{ \sum_{ i = 1 }^k x_i }{ k } ) , B_2 = ( \frac{ \sum_{ i = k + 1 }^{ 2 k } x_i }{ k } )\),显然有\(A_1 \leq A_2 , B_1 \leq B_2\).

同时有\(( \frac{ A_2 + B_2 }{ 2 } ) \geq \sqrt{ A_2 B_2 } \geq \sqrt{ A_1 B_1 }\).

3.若该式子对\(n = k\)时成立,则该式子对\(n = k - 1\)的时候也成立.

\(x_k = \frac{ \sum_{ i = 1 }^{ k - 1 } x_i }{ k - 1 }\),有\(x_k \prod_{ i = 1 }^{ k - 1 } x_i \leq ( x_k )^k\).

则显然\(n = k - 1\)时也成立.

由1和2,我们知道了对于n是二的整数次幂的情况,该公式成立,由3,我们又可以知道该公式对于任意一个存在比他大的二的整数次幂的数成立,因此该公式成立.

换元

考虑令\(U_n = T_n + 1\),显然有:\(T_n + 1 = 2 T_{ n - 1 } + 2\).即\(U_n = 2 U_{ n - 1 }\),显然\(U_n = 2^n\),则\(T_n = 2^n - 1\).

这个做法可以做掉所有形如\(a_{ n + 1 } = pa_n + q\)的递归式.我们有:

\[ a_{ n + 1 } + \frac{ q }{ p - 1 } = p ( a_n + \frac{ q }{ p - 1 } ) \]

换元做掉这个式子.

转化和式

考虑递归式\(a_n T_n = b_n T_{ n - 1 } + c_n\).如果我们能找到一个不为0的求和因子\(s_n\)并满足\(s_n b_n = s_{ n - 1 } a_{ n - 1 }\).那么我们两面同时乘以\(s_n\),显然有:\(s_n a_n T_n = s_{ n - 1 } a_{ n - 1 } T_{ n - 1 } + c_n s_n\).

\(S_n = s_n a_n T_n\).显然有\(S_n = s_0 a_0 T_0 + \sum_{ i = 1 }^n s_i c_i\),则\(T_n = \frac{ S_n }{ s_n a_n }\).

而我们也会发现\(s_n = \frac{ \prod_{ i = 1 }^{ n - 1 } a_i }{ \prod_{ i = 1 }^n b_i }\).

Example1(快速排序时间复杂度)

结论:排序\(n\)个数时,其期望复杂度满足:

\[ C_n = \begin{cases} 0 & n = 0 , 1 \\ n + 1 + \frac{ 2 }{ n } \sum_{ i = 0 }^{ n - 1 } C_k & n > 1 \end{cases} \]

不妨考虑两边同时乘以\(n\),有 \(nC_n = n^2 + n + 2 \sum_{ i = 0 }^{ n - 1 } C_i , n > 1\) .

显然也有\(( n - 1 ) C_{ n - 1 } = ( n - 1 )^2 + n - 1 + 2 \sum_{ i = 0 }^{ n - 2 } C_i , n > 2\).

二式相消,有\(nC_n - ( n - 1 ) C_{ n - 1 } = 2 n + 2 C_{ n - 1 } , n > 2\).

而同时有\(C_2 = 3\).即:\(nC_n = ( n + 1 ) C_{ n - 1 } + 2 n , n > 2\),可以使用转化和式的方法,两边乘以\(\frac{ 1 }{ n ( n + 1 ) }\)解决.

Example2

已知\(a_1 = 1\),\(a_n = \sqrt{ S_n } + \sqrt{ S_{ n - 1 } }\),求\(a_n\).

注意到\(a_n = S_n - S_{ n - 1 }\),则有\(\sqrt{ S_n } - \sqrt{ S_{ n - 1 } } = 1\),于是\(\sqrt{ S_n } = n\),\(S_n = n^2\),\(a_n = 2 n - 1\).

成套方法

如果我们有

& n=1\

2f(n 2)+& n=2k,k\

2f(2)+&n=2k+1,k

\end{cases}

其中\(n = 2^m + l\)\(2^m \leq n < 2^{ m + 1 }\).

该如何求出\(f ( n )\)的封闭形式呢?

由于所有的未知数都是以加法运算连接,显然有\(f ( n ) = A ( n ) \alpha + B ( n ) \beta + C ( n ) \gamma\),而有\(A 、 B 、 C\)互不影响且\(\alpha \beta \gamma\)\(ABC\)无关.

那无论\(\beta\)\(\gamma\)的取值如何,\(A ( n )\)都不会受到影响,我们考虑\(\beta = \gamma = 0\)的特殊情况,此时显然有\(A ( n ) = 2^m\).

接下来,我们考虑取\(\alpha \beta \gamma\)的特殊值,去得到ABC之间的关系.

例如,当\(f ( n ) = 1\)时,由递推式可知\(\alpha = 1 , \beta = \gamma = - 1\),那么有\(A ( n ) - B ( n ) - C ( n ) = f ( n ) = 1\).

同理,\(f ( n ) = n\)时,可知\(\alpha = 1 , \beta = 0 , \gamma = 1\),此时有\(A ( n ) + C ( n ) = f ( n ) = n\).

显然可以通过解方程求得\(B ( n )\)\(C ( n )\).

这个方法显然是通用方法,式子仅仅是例子,事实上,只要我们能证明\(ABC\)互不影响且\(\alpha \beta \gamma\)\(ABC\)无关,我们就可以使用这个方法.

这个东西的原理是什么呢?显然是因为其中存在一个线性无关性对吧.

线性递推

一个常系数的\(k\)阶线性递推关系形如:

\[ \begin{aligned} a_n & = P_n + \sum_{ i = 1 }^k c_i a_{ n - i } , n \geq k \\ a_0 & = C_0 , a_1 = C_1 , . . . , a_{ k - 1 } = C_{ k - 1 } \end{aligned} \]

\(P = 0\)时,称作齐次线性递推.

特征方程

我们称方程\(r^k = \sum_{ i = 1 }^k c_i r^{ k - i }\)是该递推关系的特征方程,方程的解叫做该递推关系的特征根.

二阶线性齐次递推

若其特征方程有两个不同的根\(r_1\)\(r_2\),那么存在两个常数\(\alpha_1\)\(\alpha_2\),满足\(a_n = \alpha_1 r_1^n + \alpha_2 r_2^n\).

若其特征方程有两个相同的根\(r\),那么存在两个常数\(\alpha_1\)\(\alpha_2\),满足\(a_n = \alpha_1 r^n + \alpha_2 nr^n\).

先考虑前者的证明,首先考虑对于\(n = 0\)或者\(n = 1\)的情况,我们考虑求出一组\(\alpha_1\)\(\alpha_2\)来满足:

\[ \begin{aligned} C_0 & = \alpha_1 + \alpha_2 \\ C_1 & = \alpha_1 r_1 + \alpha_2 r_2 \end{aligned} \]

\(r_1 \ne r_2\),可以解得:

\[ \begin{aligned} \alpha_1 & = \cfrac{ C_1 - C_0 r_2 }{ r_1 - r_2 } \\ \alpha_2 & = C_0 - \alpha_1 \end{aligned} \]

接下来考虑数学归纳:

\[ \begin{aligned} a_n & = c_1 a_{ n - 1 } + c_2 a_{ n - 2 } \\ & = c_1 ( \alpha_1 r_1^{ n - 1 } + \alpha_2 r_2^{ n - 1 } ) + c_2 ( \alpha_1 r_1^{ n - 2 } + \alpha_2 r_2^{ n - 2 } ) \\ & = \alpha_1 ( c_1 r_1^{ n - 1 } + c_2 r_1^{ n - 2 } ) + \alpha_2 ( c_1 r_2^{ n - 1 } + c_2 r_2^{ n - 2 } ) \\ & = \alpha_1 r_1^n + \alpha_2 r_2^n \end{aligned} \]

接下来考虑后者,首先我们有\(\Delta = c_1^2 + 4 c_2 = 0\),考虑初始条件:

$$ \[\begin{aligned} C_0 & = \alpha_1 \\ C_1 & = \alpha_1 r + \alpha_2 r \\ \end{aligned}\]

$$

接下来我们考虑数学归纳:

\[ \begin{aligned} a_n & = c_1 a_{ n - 1 } + c_2 a_{ n - 2 } \\ & = c_1 ( \alpha_1 r^{ n - 1 } + \alpha_2 nr^{ n - 1 } - \alpha_2 r^{ n - 1 } ) + c_2 ( \alpha_1 r^{ n - 2 } + \alpha_2 nr^{ n - 2 } - 2 \alpha_2 r^{ n - 2 } ) \\ & = a_n - c_1 \alpha_2 r^{ n - 1 } - 2 c_2 \alpha_2 r^{ n - 2 } \end{aligned} \]

我们接下来只需证明\(c_1 r + 2 c_2 = 0\)即可.根据方程,不难发现\(r = \cfrac{ c_1 }{ 2 }\),根据\(\Delta = 0\),自然得证.

更一般的情况

直接在复数域上定义\(f_k ( x ) = \{ n^k x^n \}_{ n = 0 }^\infty\),此时我们规定\(0^0 = 1\).特别地,当\(x = 0\)的时候,定义\(f_k ( x )\)的第\(k\)项是\(1\),其余项是\(0\).在此基础上定义线性映射\(T : ( a_n )_{ n = 0 }^\infty \mapsto ( a_{ n + 1 } )_{ n = 0 }^\infty\),立刻见到:\(( T - x )^{ k + 1 } f_k ( x ) = 0 , ( T - x )^k f_k ( x ) \ne 0\).原因只需简单数学归纳.而此还可以引出\(f_0 ( x ) , f_1 ( x ) , \cdots\)线性无关.

在此基础上观察线性递推\(a_{ n + d } = c_{ d - 1 } a_{ n + d - 1 } + \cdots + c_0 a_n\),不妨取\(G ( x ) = x^d - c_{ d - 1 } x^{ d - 1 } - \cdots - c_0\),立刻应当见到如果\(a\)\(G\)的根并且重数为\(e ( a )\),那么\(f_{ 0 } ( x ) , \cdots , f_{ e ( a ) - 1 } ( a )\)都在\(\ker f ( T )\)中.这恰好是该线性递推空间的维数个.我们需要说明它们线性无关,不妨反证,假设出现了形如\(\sum_j w_i f_i ( y ) = \sum_j w_j f_j ( x )\)的情况,此时对右边直接操作若干次\(( T - x )\)就可以把右边全部消成\(0\),在对着左边消几次就可以使得左边只留下最高次项,这个时候发现最高次项是消不掉的,原因是将每一个位置看作关于\(n\)的多项式右边的\(( T - x )\)是不会改变左边这边的每一个位置多项式的\(\deg\),这当然意味着不可能消干净.

再再进一步

我们都知道矩阵加速:也就是\(\vec{ x }_{ k + 1 } = A \vec{ x }\),\(\vec{ x }_{ n } = A^n \vec{ x }_0\).而我们又知道CH定理:\(p ( A ) = 0\),我们用多项式取膜,有\(A^n = p ( A ) F ( A ) + G ( A ) = G ( A )\),这就是解.

约瑟夫问题

考虑n个人围成一圈,从第一个人开始,每隔一个人就杀掉一个人.如10个人围成一圈时,杀人的顺序是\(2 , 4 , 6 , 8 , 10 , 3 , 7 , 1 , 9\).问最后幸存下来的人编号.

首先一定有J(1)=1.考虑第一遍杀掉n号或者n-1号之后,对整个圆圈进行重新编号.

那么当人数是偶数时,我们有\(J ( 2 n ) = 2 J ( n ) - 1\);当人数是奇数时,我们杀掉一号,然后有\(J ( 2 n + 1 ) = 2 J ( n ) + 1\).

整理得到:

\[ J ( n ) = \begin{cases} 1 & n = 1 \\ 2 J ( \frac{ n }{ 2 } ) - 1 & n = 2 k , k \in \mathbb{ N_+ } \\ 2 J ( \frac{ n - 1 }{ 2 } ) + 1 & n = 2 k + 1 , k \in \mathbb{ N_+ } \end{cases} \]

仍然可以使用数学归纳,如果令\(n = 2^m + l 且 2^m \leq n < 2^{ m + 1 }\).

\(J ( n ) = 2 l + 1\).

要是注意力没有那么集中怎么办呢?考虑到这个东西显然和取膜有着不可分割的关系,我们不妨从\(0\)开始编号:

\[ J ( n ) = \begin{cases} 0 & n = 1 \\ 2 J ( \frac{ n }{ 2 } ) & n = 2 k , k \in \mathbb{ N_+ } \\ 2 J ( \frac{ n - 1 }{ 2 } ) + 2 & n = 2 k + 1 , k \in \mathbb{ N_+ } \end{cases} \]

这下相信\(J ( n )\)是多少就很显然了,将\(n\)写成二进制的形式,这个就相当于把首位\(1\)抹去然后在末尾加个\(0\).

Example(《具体数学》1.15)

求约瑟夫问题中最后一名被杀死的人的编号.

Solution

显然有:

\[ J ( n ) = \begin{cases} 2 & n = 2 \\ 1 & n = 3 \\ 2 J ( \frac{ n }{ 2 } ) - 1 & n = 2 k + 2 , k \in \mathbb{ N_+ } \\ 2 J ( \frac{ n - 1 }{ 2 } ) + 1 & n = 2 k + 3 , k \in \mathbb{ N_+ } \end{cases} \]

\(0\)开始编号,自然有:

\[ J ( n ) = \begin{cases} 1 & n = 2 \\ 0 & n = 3 \\ 2 J ( \frac{ n }{ 2 } ) & n = 2 k + 2 , k \in \mathbb{ N_+ } \\ 2 J ( \frac{ n - 1 }{ 2 } ) + 2 & n = 2 k + 3 , k \in \mathbb{ N_+ } \end{cases} \]

显然\(J ( n )\)也可以用二进制表达其形式.

和式

和式的基本运算

分配律:

\[ \sum_{ i \in S } ca_i = c \sum_{ i \in S } a_i \]

一般分配律:

\[ \sum_{ i } \sum_{ j } a_{ i } b_j = ( \sum_{ i } a_i ) ( \sum_j b_j ) \]

结合律:

\[ \sum_{ i \in S } ( a_i + b_i ) = \sum_{ i \in S } a_i + \sum_{ i \in S } b_i \]

交换律:

\[ \sum_{ i \in S } a_i = \sum_{ p ( i ) \in S } a_{ p ( i ) } \]

交换求和顺序:

\[ \begin{aligned} \sum_{ i } \sum_{ j } a_{ i , j } [ P ( i , j ) ] & = \sum_{ j } \sum_{ i } a_{ i , j } [ P ( i , j ) ] \\ \sum_{ i = 1 }^n \sum_{ j = i }^n a_{ i , j } & = \sum_{ j = 1 }^n \sum_{ i = 1 }^j a_{ i , j } \end{aligned} \]

和式的封闭形式

交换顺序法

Example1(等差数列求和)

我们有:

\[ \begin{aligned} S_n & = \sum_{ i = 0 }^n ( ai + b ) = \sum_{ i = 0 }^n ( a ( n - i ) + b ) \\ 2 S_n & = \sum_{ i = 0 }^n ( an + 2 b ) = an ( n + 1 ) + 2 b ( n + 1 ) \\ S_n & = ( n + 1 ) ( \frac{ an }{ 2 } + b ) \end{aligned} \]

Example2(切比雪夫单调不等式)

\(S = \sum_{ 1 \leq i < j \leq n } ( a_j - a_i ) ( b_j - b_i ) = \sum_{ 1 \leq j < i \leq n } ( a_j - a_i ) ( b_j - b_i )\).

考虑恒等式\([ 1 \leq j < i \leq n ] + [ 1 \leq i < j \leq n ] = [ 1 \leq j , i \leq n ] - [ 1 \leq i = j \leq n ]\).

那么我们有:

\[ \begin{aligned} 2 S & = \sum_{ 1 \leq i , j \leq n } ( a_j - a_i ) ( b_j - b_i ) - \sum_{ 1 \leq i = j \leq n } ( a_j - a_i ) ( b_j - b_i ) \\ & = \sum_{ 1 \leq i , j \leq n } ( a_j - a_i ) ( b_j - b_i ) \\ & = 2 n \sum_{ i = 1 }^n a_i b_i - 2 ( \sum_{ i = 1 }^n a_i ) ( \sum_{ j = 1 }^n b_j ) \\ ( \sum_{ i = 1 }^n a_i ) ( \sum_{ j = 1 }^n b_j ) & = n \sum_{ i = 1 }^n a_i b_i - \sum_{ 1 \leq i < j \leq n } ( a_j - a_i ) ( b_j - b_i ) \end{aligned} \]

显然有以下式子:

(_{i=1}na_i)({j=1}^nb_j)n{i=1}na_ib_i,i<j,a_ia_j且b_ib_j\

上式被称为切比雪夫单调不等式.

值得一提的是,切比雪夫单调不等式其实是排序不等式的一个特化版本.

Example3(拉格朗日恒等式)

证明:

$$ \[\begin{aligned} \sum_{ 1 \leq j < k \leq n } ( a_j b_k - a_k b_j )^2 & = ( \sum_{ i = 1 }^n a_i^2 ) ( \sum_{ i = 1 }^n b_i^2 ) - ( \sum_{ i = 1 }^n a_i b_i )^2 \\ \end{aligned}\]

$$

有:

\[ \begin{aligned} S_n & = \sum_{ 1 \leq j < k \leq n } ( a_j b_k - a_k b_j )^2 \\ 2 S_n & = \sum_{ j = 1 }^n \sum_{ k = 1 }^n ( a_j b_k - a_k b_j )^2 \\ & = \sum_{ j = 1 }^n \sum_{ k = 1 }^n ( a_j^2 b_k^2 - 2 a_j a_k b_j b_k + a_k^2 b_j^2 ) \\ & = 2 ( \sum_{ i = 1 }^n a_i^2 ) ( \sum_{ i = 1 }^n b_i^2 ) - 2 ( \sum_{ i = 1 }^n a_i b_i )^2 \end{aligned} \]

扰动法

Example1(等比数列求和)

\[ \begin{aligned} S_n & = \sum_{ i = 0 }^n ax^i \\ & = a + \sum_{ i = 1 }^n ax^i \\ & = a + x \sum_{ i = 0 }^{ n - 1 } ax^i \\ & = a + xS_{ n - 1 } \end{aligned} \]

\(S_{ n - 1 } + ax^n = S_n = a + xS_{ n - 1 }\),有\(S_n + ax^{ n + 1 } = a + xS_n , S_n = a \frac{ x^{ n + 1 } - 1 }{ x - 1 }\),其中\(x \ne 1\).

Example2(平方和公式)

如果直接对该公式使用扰动法:

\[ \begin{aligned} S_n & = \sum_{ i = 0 }^n i^2 = \sum_{ i = 0 }^{ n - 1 } i^2 + n^2 \\ & = \sum_{ i = 1 }^n ( i - 1 )^2 + n^2 \\ & = S_n - 2 \sum_{ i = 1 }^n i + n + n^2 \end{aligned} \]

我们无法得到\(S_n\)的封闭形式,但我们发现我们得到了\(\sum_{ i = 1 }^n i\)的封闭形式.

那以此类推,我们设\(W_n = \sum_{ i = 0 } i^3\).

\[ \begin{aligned} W_n & = \sum_{ i = 0 }^{ n - 1 } i^3 + n^3 \\ & = \sum_{ i = 1 }^n ( i - 1 )^3 + n^3 \\ & = \sum_{ i = 1 }^n i^3 - 3 \sum_{ i = 1 }^n i^2 + 3 \sum_{ i = 1 }^n i - n + n^3 \\ & = W_n - 3 S_n + 3 \frac{ n + n^2 }{ 2 } - n + n^3 \\ S_n & = \frac{ n + n^2 }{ 2 } - \frac{ n - n^3 }{ 3 } \\ & = \frac{ n + 3 n^2 + 2 n^3 }{ 6 } \\ & = \frac{ n ( 1 + 3 n + 2 n^2 ) }{ 6 } \\ & = \frac{ n ( 2 n + 1 ) ( n + 1 ) }{ 6 } \end{aligned} \]

Example3(《具体数学》2.20)

\(H_n = \sum_{ k = 1 }^n \frac{ 1 }{ k }\),求\(\sum_{ i = 0 }^n H_i\).

Solution3

不妨考虑\(\sum_{ i = 0 }^n iH_{ i }\)的值.

$$ \[\begin{aligned} \sum_{ i = 0 }^n iH_{ i } & = \sum_{ i = 1 }^n [ ( i - 1 + 1 ) H_{ i - 1 } + 1 ] \\ & = n + \sum_{ i = 0 }^{ n - 1 } H_i + \sum_{ i = 0 }^{ n } iH_i - nH_n \\ \sum_{ i = 0 }^{ n - 1 } H_i & = n ( H_n - 1 ) \\ \sum_{ i = 0 }^n H_i & = ( n + 1 ) ( H_{ n + 1 } - 1 ) \\ \end{aligned}\]

$$

Example4(《具体数学》2.21)

\(S_n = \sum_{ i = 0 }^n ( - 1 )^{ n - i } , T_n = \sum_{ i = 0 }^n ( - 1 )^{ n - i } i , U_n = \sum_{ i = 0 }^n ( - 1 )^{ n - i } i^2\).

Solution 4

\[ \begin{aligned} S_n & = \sum_{ i = 1 }^{ n } ( - 1 )^{ n - i } + ( - 1 )^n \\ - S_{ n - 1 } + 1 & = ( - 1 )^n + \sum_{ i = 0 }^{ n - 1 } ( - 1 )^{ n - 1 - i } \\ - S_{ n - 1 } + 1 & = ( - 1 )^n + S_{ n - 1 } \\ S_{ n - 1 } & = \frac{ 1 - ( - 1 )^n }{ 2 } \\ S_n & = \frac{ 1 + ( - 1 )^n }{ 2 } \end{aligned} \]

\[ \begin{aligned} T_{ n } & = \sum_{ i = 1 }^n ( - 1 )^{ n - i } i \\ - T_{ n - 1 } + n & = \sum_{ i = 1 }^n ( - 1 )^{ n - i } ( i - 1 ) + \sum_{ i = 1 }^n ( - 1 )^{ n - i } \\ - T_{ n - 1 } + n & = \sum_{ i = 0 }^{ n - 1 } ( - 1 )^{ n - i - 1 } i + \sum_{ i = 0 }^n ( - 1 )^{ n - i } - ( - 1 )^n \\ - T_{ n - 1 } + n & = T_{ n - 1 } + S_n - ( - 1 )^n \\ n - \frac{ 1 - ( - 1 )^n }{ 2 } & = 2 T_{ n - 1 } \\ T_n & = \frac{ 1 }{ 2 } ( n + 1 + \frac{ - 1 - ( - 1 )^n }{ 2 } ) = \frac{ 1 }{ 2 } ( n + \frac{ 1 - ( - 1 )^n }{ 2 } ) \end{aligned} \]

\[ \begin{aligned} U_n & = \sum_{ i = 1 }^n ( - 1 )^{ n - i } i^2 \\ - U_{ n - 1 } + n^2 & = \sum_{ i = 1 }^n ( - 1 )^{ n - i } ( i - 1 + 1 )^2 \\ - U_{ n - 1 } + n^2 & = \sum_{ i = 1 }^n ( - 1 )^{ n - i } ( i - 1 )^2 + 2 \sum_{ i = 1 }^n ( - 1 )^{ n - i } ( i - 1 ) + \sum_{ i = 1 }^n ( - 1 )^{ n - i } \\ - U_{ n - 1 } + n^2 & = \sum_{ i = 0 }^{ n - 1 } ( - 1 )^{ n - i - 1 } i^2 + 2 \sum_{ i = 0 }^{ n - 1 } ( - 1 )^{ n - i - 1 } i + \sum_{ i = 0 }^{ n - 1 } ( - 1 )^{ n - i - 1 } \\ - U_{ n - 1 } + n^2 & = U_{ n - 1 } + 2 T_{ n - 1 } + S_{ n - 1 } \\ 2 U_{ n - 1 } & = n^2 - 2 T_{ n - 1 } - S_{ n - 1 } \\ 2 U_{ n - 1 } & = n^2 - ( n - \frac{ 1 - ( - 1 )^n }{ 2 } ) - \frac{ 1 - ( - 1 )^n }{ 2 } \\ 2 U_{ n - 1 } & = n^2 - n \\ U_n & = \frac{ n ( n + 1 ) }{ 2 } \end{aligned} \]

转化为递归式

考虑和式\(S_n = \sum_{ i = 0 }^n f ( i ) = S_{ n - 1 } + f ( n ) \\\),显然是递归式形式.

因此递归式所可以使用的方法同样可以在和式中使用.

Example1(《具体数学》2.13)

\(\sum_{ i = 0 }^n ( - 1 )^i i^2 \\\).

Solution1

\(S ( n ) = \sum_{ i = 0 }^n ( - 1 )^i i^2 = S ( n - 1 ) + ( - 1 )^n n^2\),考虑使用成套方法.

不妨令\(S ( n ) = S ( n - 1 ) + ( - 1 )^n ( \alpha + \beta n + \gamma n^2 ) = \alpha A ( n ) + \beta B ( n ) + \gamma C ( n )\).

\(S ( n ) = ( - 1 )^n n , 可 以 解 得 \alpha = - 1 , \beta = 2 , \gamma = 0\),有\(( - 1 )^n n = - A ( n ) + 2 B ( n )\).

\(S ( n ) = ( - 1 )^n n^2 , 可 以 解 得 \alpha = 1 , \beta = - 2 , \gamma = 2\),有\(( - 1 )^n n^2 = A ( n ) - 2 B ( n ) + 2 C ( n )\).

显然可解得\(2 C ( n ) = ( - 1 )^n n^2 + ( - 1 )^n n , C ( n ) = ( - 1 )^n \frac{ n ( n + 1 ) }{ 2 }\).

而原式中,\(S ( n ) = C ( n ) = ( - 1 )^n \frac{ n ( n + 1 ) }{ 2 }\).

Example2(《具体数学》2.19)

\(2 T_n = nT_{ n - 1 } + 3 n ! , T_0 = 5\),求\(T_n\).

Solution 2

\(s_n = \frac{ 2^{ n - 1 } }{ n ! }\),两边同时乘以\(s_n\),有\(\frac{ 2^n }{ n ! } T_n = \frac{ 2^{ n - 1 } }{ ( n - 1 ) ! } T_{ n - 1 } + 3 \times 2^{ n - 1 } \\\).

\(S_n = \frac{ 2^n }{ n ! } T_n\),有:

\[ \begin{aligned} S_n & = S_{ n - 1 } + 3 \times 2^{ n - 1 } \\ & = 5 + 3 \sum_{ i = 0 }^{ n - 1 } 2^i \\ & = 5 + 3 \times 2^{ n + 1 } - 3 \\ & = 3 \times 2^{ n } + 2 \\ T_n & = 3 n ! + \frac{ n ! }{ 2^{ n - 1 } } \end{aligned} \]

转化为积分形式

Example1(平方和公式)

考虑先求出一个近似解,然后再求误差.

考虑函数\(f ( x ) = x^2\),显然\(\int_0^n x^2 dx = \frac{ n^3 }{ 3 } \sim S_n \\\).

接下来,我们考虑求得二者之间的误差,设\(E_n = S_n - \frac{ n^3 }{ 3 } \\\),对其使用扰动法:

\[ \begin{aligned} E_n & = S_n - \frac{ n^3 }{ 3 } \\ & = S_{ n - 1 } + n^2 - \frac{ ( n - 1 + 1 )^3 }{ 3 } \\ & = S_{ n - 1 } + n^2 - \frac{ ( n - 1 )^3 }{ 3 } - ( n - 1 )^2 - ( n - 1 ) - \frac{ 1 }{ 3 } \\ & = E_{ n - 1 } + n^2 - n^2 + 2 n - 1 - n + 1 - \frac{ 1 }{ 3 } \\ & = E_{ n - 1 } + n - \frac{ 1 }{ 3 } \end{aligned} \]

这样就得到了递归式,可以求得封闭形式.

还有一种方法是:

\[ \begin{aligned} E_n & = S_n - \int_0^n x^2 dx \\ & = \sum_{ k = 1 }^n ( k^2 - \int_{ k - 1 }^k x^2 dx ) \\ & = \sum_{ k = 1 }^n ( k^2 - \frac{ k^3 - ( k - 1 )^3 }{ 3 } ) \\ & = \sum_{ k = 1 }^n ( k - \frac{ 1 }{ 3 } ) \end{aligned} \]

这是一个简单的和式.而\(S_n = E_n + \frac{ n^3 }{ 3 } \\\),显然也可以求得.

Example2(某浙江高考题)

已知\(a_1 = 1 , a_{ n + 1 } - a_n = - \frac{ 1 }{ 3 } a_n^2\),估计\(a_n\)的值.

考虑构造一个函数\(f ( n )\)使得\(f ( n ) \approx a_n\),那我们就可以将\(a_{ n + 1 } - a_n \approx f_n\).

这个第一眼看上去就很有道理,而事实上也确实很有道理,原因是根据拉格朗日中值定理,\(\exists x_0 \in [ n , n + 1 ] , f ' ( x_0 ) = f ( n + 1 ) - f ( n )\),而对于增长率变化不大的函数,直接认为\(f ' ( x_0 ) = f ' ( n )\)是有理可循的!

然后,原式子就变成了一个微分方程了,带入\(f ( 1 ) = 1\)解得\(f ( n ) = \frac{ 3 }{ n + 2 }\).这个精度已经足够选出来原本的放缩题的答案了.

\(a_n = \frac{ 3 }{ n + 2 } - b_n\),带入化简,得到\(\{ b_n \}\)的递推式:

\[ \begin{aligned} \frac{ 3 }{ n + 3 } - b_{ n + 1 } & = ( \frac{ 3 }{ n + 2 } - b_n ) ( 1 - \frac{ 1 }{ n + 2 } + \frac{ b_n }{ 3 } ) \\ b_{ n + 1 } - \frac{ 3 }{ n + 3 } & = ( b_n - \frac{ 3 }{ n + 2 } ) ( \frac{ n + 1 }{ n + 2 } + \frac{ b_n }{ 3 } ) \\ b_1 & = 0 , b_{ n + 1 } = \frac{ b_n^2 }{ 3 } + \frac{ n }{ n + 2 } b_n + \frac{ 3 }{ ( n + 2 )^2 ( n + 3 ) } \end{aligned} \]

算到这里,我们可以很轻易使用数学归纳法算出\(b_n \leq \frac{ 1 }{ 4 n }\),这个精度已经挺不错的了,但是也让人觉得很不满意,因为这个误差项怎么和估计项是同阶的啊.

然后我开始估计了一下这个\(b_n\)的阶,因为我其实没学过什么高超的高数技巧,所以我使用了OI的一些技巧来估计,不妨假设\(b_n^2 < < b_n\):

那么这个\(b_n\)\(O ( \frac{ \ln n }{ n^2 } )\)级别的.

如何理解这个级别?考虑别乱动\(b_n\)的系数,我们有:

\[ \begin{aligned} b_{ n + 1 } & = \frac{ n }{ n + 2 } b_n + \frac{ 1 }{ n ( n + 1 ) ( n + 2 ) } \\ ( n + 1 ) ( n + 2 ) b_{ n + 1 } & = n ( n + 1 ) b_n + \frac{ 1 }{ n } \\ g ( n ) & = n ( n + 1 ) b_n , g ' ( n ) = \frac{ 1 }{ n } , g ( n ) = \ln n \\ b_n & = \frac{ \ln n }{ n^2 } \end{aligned} \]

这警戒我们以后乱估计的时候千万别把\(O ( n^{ \epsilon } )\)\(O ( 1 )\)搞混了,警钟长鸣.

这个时候大概估计一下会发现\(b_n \leq \frac{ 3 \ln n }{ n ( n + 1 ) }\).

展开和收缩

Example1(平方和公式)

我们有:

\[ \begin{aligned} S_n & = \sum_{ k = 1 }^n k^2 \\ & = \sum_{ k = 1 }^n \sum_{ i = 1 }^k k \\ & = \sum_{ i = 1 }^n \sum_{ k = i }^n k \\ & = \sum_{ i = 1 }^n \frac{ 1 }{ 2 } ( i + n ) ( n - i + 1 ) \\ & = \sum_{ i = 1 }^n \frac{ 1 }{ 2 } ( in - i^2 + i + n^2 - ni + n ) \\ & = \frac{ 1 }{ 2 } ( \sum_{ i = 1 }^n i - \sum_{ i = 1 }^n i^2 + n^3 + n^2 ) \\ & = \frac{ 1 }{ 4 } n ( n + 1 ) - \frac{ 1 }{ 2 } S_n + \frac{ n^3 + n^2 }{ 2 } \end{aligned} \]

整理得到\(S_n\).

Example2(《具体数学》2.14)

\(\sum_{ i = 1 }^n i 2^i \\\).

Solution 2

\[ \begin{aligned} \sum_{ i = 1 }^n i 2^i & = \sum_{ i = 1 }^n \sum_{ j = 1 }^i 2^i \\ & = \sum_{ j = 1 }^n \sum_{ i = j }^n 2^i \\ & = \sum_{ j = 1 }^n ( 2^{ n + 1 } - 2^j ) \\ & = n 2^{ n + 1 } - ( 2^{ n + 1 } - 2 ) \\ & = ( n - 1 ) 2^{ n + 1 } + 2 \end{aligned} \]

Example3(《具体数学》2.15)

\(\sum_{ i = 1 }^n i^3 \\\).

Solution 3

\[ \begin{aligned} S ( n ) & = \sum_{ i = 1 }^n i^3 \\ & = \sum_{ i = 1 }^n \sum_{ j = 1 }^i i^2 \\ & = \sum_{ j = 1 }^n \sum_{ i = j }^n i^2 \\ & = \sum_{ j = 1 }^n ( \frac{ n ( n + 1 ) ( 2 n + 1 ) }{ 6 } - \frac{ ( j - 1 ) j ( 2 j - 1 ) }{ 6 } ) \\ & = \frac{ n^2 ( n + 1 ) ( 2 n + 1 ) }{ 6 } - \frac{ 1 }{ 3 } S ( n ) + \frac{ n ( n + 1 ) ( 2 n + 1 ) }{ 12 } - \frac{ n ( n + 1 ) }{ 12 } \\ S ( n ) & = \frac{ n^2 ( n + 1 )^2 }{ 4 } \end{aligned} \]

ExampleEX

\(\sum_{ i = 1 }^n iq^i ( q \ne 1 )\).

SolutionEX
$$ \[\begin{aligned} \sum_{ i = 1 }^n iq^i & = \sum_{ j = 1 }^n \sum_{ i = j }^n q^i \\ & = \sum_{ j = 1 }^n \frac{ q^j - q^{ n + 1 } }{ 1 - q } \\ & = \frac{ 1 }{ q - 1 } \sum_{ j = 1 }^n ( q^{ n + 1 } - q^j ) \\ & = \frac{ 1 }{ q - 1 } ( nq^{ n + 1 } - \frac{ q^{ n + 1 } - q }{ q - 1 } ) \\ \end{aligned}\]

$$

ExampleEX2

\(\sum_{ i = 1 }^n ( ai + b ) q^{ i - 1 } ( q \ne 1 )\).

SolutionEX2

\(A = \frac{ a }{ q - 1 } , B = \frac{ b - A }{ q - 1 }\),答案为\(( An + B ) q^n - B\).

有限微积分

移位算子

定义移位算子\(E\),使得\(Ef ( x ) = f ( x + 1 )\).

差分算子

定义差分算子\(\Delta f ( x ) = f ( x + 1 ) - f ( x )\),类似于无限微积分中的D算子.

另外,不难发现有\(\Delta = E - 1\).

逆差分算子

定义逆差分算子\(\Sigma\),可以得到有限微积分的基本定理:

$$ \[\begin{aligned} g ( x ) & = \Delta f ( x ) \Leftrightarrow \sum g ( x ) \delta x = f ( x ) + C \\ \end{aligned}\]

$$

这里的\(\Sigma\)又被称为不定和式,是差分等于\(g\)的一个函数类.

值得一提的是,这里的\(C\)与无限微积分中的\(C\)有一定区别,这里的\(C\)可以是满足\(p ( x ) = p ( x + 1 )\)的任意一个函数而不非得是常数函数.

定和式

如果\(g ( x ) = \Delta f ( x )\),那么有\(\sum \nolimits_{ a }^b g ( x ) \delta x = f ( x ) |^{ b }_a = f ( b ) - f ( a ) \\\).

值得一提的是,如果\(a \leq b\),显然有\(\sum \nolimits_{ a }^b g ( x ) \delta x = \sum_{ x = a }^{ b - 1 } g ( x ) \\\).

但如果\(a > b\),那么\(\sum \nolimits_{ a }^b g ( x ) \delta x = - \sum \nolimits_b^a g ( x ) \delta x \\\).

事实上,我们一定有:\(\sum \nolimits_a^b g ( x ) \delta x + \sum \nolimits_b^c g ( x ) \delta x = \sum \nolimits_a^c g ( x ) \delta x \\\).

一些基本的公式

类比无限微积分中的\(D ( x^m ) = mx^{ m - 1 }\),有:

$$ \[\begin{aligned} \Delta ( x^{ \underline{ m } } ) & = mx^{ \underline{ m - 1 } } \\ \sum mx^{ \underline{ m - 1 } } \delta x & = x^{ \underline{ m } } + C , m \ne 0 \\ \\ \end{aligned}\]

$$

类比无限微积分中的\(D ( \ln x ) = \frac{ 1 }{ x }\),有:

$$ \[\begin{aligned} \Delta ( H ( x ) ) & = x^{ \underline{ - 1 } } = \frac{ 1 }{ x + 1 } \\ \sum x^{ \underline{ - 1 } } \delta x & = H ( x ) + C \\ \\ \end{aligned}\]

$$

类比无限微积分中的\(D ( e^x ) = e^x\),有:

$$ \[\begin{aligned} \Delta ( 2^x ) & = 2^x , \sum 2^x \delta x = 2^x + C \\ \Delta ( c^x ) & = ( c - 1 ) c^x , \sum c^x \delta x = \frac{ c^x }{ c - 1 } + C , c \ne 1 \\ \Delta ( c^{ \underline{ x } } ) & = \frac{ c^{ \underline{ x + 2 } } }{ c - x } , \sum \frac{ c^{ \underline{ x + 2 } } }{ c - x } \delta x = c^{ \underline{ x } } + C , c - x \ne 0 \\ \end{aligned}\]

$$

根据组合数公式,有:

\[ \begin{aligned} \Delta ( \binom{ x }{ k } ) & = \binom{ x }{ k - 1 } \\ \sum \binom{ x }{ k - 1 } \delta x & = \binom{ x }{ k } + C \end{aligned} \]

Example(平方和公式)

我们有:\(k^2 = k^{ \underline{ 2 } } + k^{ \underline{ 1 } } \\\).

那么:

\[ \begin{aligned} S_{ n - 1 } & = \sum_{ i = 0 }^{ n - 1 } i^2 \\ & = \sum_{ i = 0 }^{ n - 1 } ( i^{ \underline{ 2 } } + i^{ \underline{ 1 } } ) \\ & = \sum \nolimits_{ 0 }^n x^{ \underline{ 2 } } \delta x + \sum \nolimits_{ 0 }^n x^{ \underline{ 1 } } \delta x \\ & = \frac{ n^\underline{ 3 } }{ 3 } + \frac{ n^{ \underline{ 2 } } }{ 2 } \end{aligned} \]

整理即可得到封闭形式.

值得一提的是:

与前面的方法不同,这里没有使用三次的二项式公式,而是使用了二次的斯特林公式负责将一般幂转化为下降幂.

高阶差分

考虑一阶差分是\(\Delta f ( x ) = f ( x + 1 ) - f ( x )\),那么二阶差分就是\(\Delta^2 f ( x ) = f ( x + 2 ) - 2 f ( x + 1 ) + f ( x )\).

类似地,我们可以通过归纳法证明\(\Delta^n f ( x ) = \sum_{ k } \binom{ n }{ k } ( - 1 )^{ n - k } f ( x + k ) \\\).

事实上有一种更简单的证明方法,由于\(\Delta = E - 1\),于是\(\Delta^n = ( E - 1 )^n = \sum_{ k } \binom{ n }{ k } ( - 1 )^{ n - k } E^k \\\),由于\(E^k f ( x ) = f ( x + k )\),即可证明原式.

另外,不难发现如果\(f ( x )\)是一个关于\(x\)\(d\)次多项式,那么\(\Delta f ( x )\)是一个\(d - 1\)次多项式.同理,\(\Delta^d f ( x )\)会是一个常数而\(\Delta^{ d + 1 } f ( x )\)会是\(0\),这个发现引出了牛顿级数.

Example([yLOI2020]灼)

首先不难发现对于一个位置,有意义的只有相邻的两个虫洞,设这两个位置分别为\(x_1 , x_2\).

不难写出期望转移式子:\(f_i = \cfrac{ 1 }{ 2 } ( f_{ i - 1 } + f_{ i + 1 } ) + 1\),并且\(f_{ x_1 } = f_{ x_2 } = 0\).

接下来如何做呢?

我们先对第一个式子进行变形:

\[ \begin{aligned} f_i & = \cfrac{ 1 }{ 2 } ( f_{ i - 1 } + f_{ i + 1 } ) + 1 \\ 2 f_i & = f_{ i - 1 } + f_{ i + 1 } + 2 \\ f_i - f_{ i - 1 } & = f_{ i + 1 } - f_i + 2 \\ \Delta f_{ i - 1 } & = \Delta f_{ i } + 2 \\ \Delta f_i - \Delta f_{ i - 1 } & = - 2 \\ \Delta^2 f_{ i - 1 } & = - 2 \end{aligned} \]

\(f\)的二阶差分是常数,也就是说\(f\)是二次多项式,不难求得其二次项系数为\(- 1\)又知道两个零点,显然可以得到\(f\)的表达式.

牛顿级数

\(f ( x ) = \sum_{ 0 \leq i \leq d } a_i x^i \\\).而由于有斯特林数可以进行幂和下降幂的转换,则我们可以将其改写为\(f ( x ) = \sum_{ 0 \leq i \leq d } b_i x^{ \underline{ i } } \\\).

我们设\(c_i = i ! b_i\),于是有:\(f ( x ) = \sum_{ 0 \leq i \leq d } c_i \binom{ x }{ i } \\\).

也就是说,任何多项式都可以表示为二项式系数的倍数之和,我们称这样的展开式为\(f ( x )\)的牛顿级数.

于是不难发现有:\(\Delta^n f ( x ) = \sum_{ 0 \leq i \leq d } c_i \binom{ x }{ i - n } \\\).如果我们令\(x = 0\),则有:\(\Delta^n f ( 0 ) = \begin{cases}c_n & n \leq d \\ 0 & n > d\end{cases}\).那么牛顿级数的另一种表示即:\(f ( x ) = \sum_{ 0 \leq i \leq d } \Delta^i f ( 0 ) \binom{ x }{ d } \\\).

另外,如果我们展开一下\(c_n = \Delta^n f ( 0 )\),我们可以得到公式:

\(\sum_{ k } \binom{ n }{ k } ( - 1 )^k ( \sum_{ 0 \leq i \leq n } c_i \binom{ k }{ i } ) = ( - 1 )^n c_n , n \in \mathbb{ N } \\\).

如果我们将多项式还原,由于\(a_n = b_n\),有:

\(\sum_{ k } \binom{ n }{ k } ( - 1 )^k ( \sum_{ 0 \leq i \leq n } a_i k^i ) = ( - 1 )^n n ! a_n , n \in \mathbb{ N } \\\).

另外,如果\(x \in \mathbb{ N }\),那么我们有:\(f ( x ) = \sum_{ 0 \leq k } \Delta^k f ( 0 ) \binom{ x }{ 0 }\),根据多项式推理法,这个公式对\(\forall x \in \mathbb{ Z }\)都成立.

于是我们可以类似泰勒级数写出无限牛顿级数:

\[ g ( a + x ) = \sum_{ 0 \leq k } \cfrac{ \Delta^k g ( a ) }{ k ! } x^{ \underline{ k } } \]

Example

\(\sum_{ k } \binom{ n }{ k } \binom{ r - sk }{ n } ( - 1 )^k , n \in \mathbb{ N } \\\).

如果我们令\(f ( k ) = \binom{ r - sk }{ n } = \sum_{ 0 \leq i \leq n } a_i k^i \\\),不难发现\(a_n = \cfrac{ ( - 1 )^n s^n }{ n ! }\),于是显然原式\(= s^n\).

分部求和法则(Abel求和法)
$$ \[\begin{aligned} \Delta ( uv ) & = u ( x + 1 ) v ( x + 1 ) - u ( x ) v ( x ) \\ & = u ( x + 1 ) v ( x + 1 ) - u ( x ) v ( x + 1 ) + u ( x ) v ( x + 1 ) - u ( x ) v ( x ) \\ & = v ( x + 1 ) \Delta u + u ( x ) \Delta v = Ev \Delta u + u \Delta v \\ \end{aligned}\]

$$

两边取不定和,即可得到分部求和法则:

\(\sum u \Delta v = uv - \sum Ev \Delta u \\\).

分部求和用一般和式表达如下,下式又被称为Abel求和法:

\[ \begin{aligned} \sum_{ i = l }^{ r - 1 } ( a_{ i + 1 } - a_i ) b_i & = a_r b_r - a_l b_l - \sum_{ i = l }^{ r - 1 } a_{ i + 1 } ( b_{ i + 1 } - b_i ) \\ \sum_{ i = l }^{ r - 1 } ( \Delta a_i ) b_i & = a_r b_r - a_l b_l - \sum_{ i = l }^{ r - 1 } a_{ i + 1 } ( \Delta b_i ) \end{aligned} \]

对于\(l = 0 , r = n , a_0 = b_0 = 0\)的特殊情况,应当有:

\[ \begin{aligned} \sum_{ i = 0 }^{ n - 1 } ( \Delta a_i ) b_i & = a_n b_n - \sum_{ i = 0 }^{ n - 1 } a_{ i + 1 } ( \Delta b_i ) \\ \sum_{ i = 1 }^n a_i ( b_{ i + 1 } - b_i ) & = a_n b_n - \sum_{ i = 0 }^{ n - 1 } ( \Delta a_i ) b_i \end{aligned} \]

取两组数列\(\alpha , \beta\),并令\(\sum_{ i = 1 }^n \beta_i = B_i\),立刻有:

\[ \sum_{ i = 1 }^n \alpha_i \beta_i = \alpha_n B_n - \sum_{ i = 1 }^{ n - 1 } ( \alpha_{ i + 1 } - \alpha_i ) B_i \]

Example1

\(\sum_{ k = 0 }^n k 2^k \\\).

根据分部求和法则,我们有:

\(\sum x 2^x \delta x = x 2^x - \sum 2^{ x + 1 } \delta x = x 2^x - 2^{ x + 1 } + C \\\).

改为定和式形式,显然有:

\(\sum_{ k = 0 }^n k 2^k = \sum \nolimits_0^{ n + 1 } x 2^x \delta x = ( n + 1 ) 2^{ n + 1 } - 2^{ n + 2 } + 2 = ( n - 1 ) 2^{ n + 1 } + 2 \\\).

Example2

\(\sum_{ k = 0 }^{ n - 1 } kH_k \\\).

\(u ( x ) = H_x , v ( x ) = \frac{ 1 }{ 2 } x^{ \underline{ 2 } } \\\).

带入分部求和法则,显然有:

\(\sum xH_x \delta x = \frac{ x^\underline{ 2 } }{ 2 } H_x - \frac{ x^\underline{ 2 } }{ 4 } + C \\\).

带入即可求出原式\(= \frac{ n^\underline{ 2 } }{ 2 } ( H_n - \frac{ 1 }{ 2 } ) \\\).

Example3(《具体数学》2.23)

\(\sum_{ i = 1 }^n \frac{ 2 i + 1 }{ i ( i + 1 ) } \\\).

Solution 3

\(u = ( 2 n + 1 ) , v = - \frac{ 1 }{ i }\),则\(\Delta u = 2 , \Delta v = \frac{ 1 }{ i ( i + 1 ) }\).

根据分部求和法则,有:

\[ \begin{aligned} \sum_{ i = 1 }^n \frac{ 2 i + 1 }{ i ( i + 1 ) } & = ( 2 n + 3 ) \times ( - \frac{ 1 }{ n + 1 } ) + 3 - \sum_{ i = 1 }^n ( - \frac{ 2 }{ i + 1 } ) \\ & = - \frac{ 2 n + 3 }{ n + 1 } + 2 H_n + \frac{ n + 3 }{ n + 1 } = 2 H_n - \frac{ n }{ n + 1 } \end{aligned} \]

Problem 4(《具体数学》2.24)

\(\sum_{ i = 0 }^{ n - 1 } \frac{ H_k }{ ( k + 1 ) ( k + 2 ) } \\\).

Solution 4

\(u = H_n , v = - \frac{ 1 }{ n + 1 } , \Delta u = \frac{ 1 }{ n + 1 } , \Delta v = \frac{ 1 }{ ( n + 1 ) ( n + 2 ) } \\\).

根据分部求和法则,有:

\[ \begin{aligned} \sum_{ i = 0 }^{ n - 1 } \frac{ H_k }{ ( k + 1 ) ( k + 2 ) } & = - \frac{ H_n }{ n + 1 } - \sum_{ i = 0 }^{ n - 1 } ( - \frac{ 1 }{ ( i + 2 ) ( i + 1 ) } ) \\ & = - \frac{ H_n }{ n + 1 } + \sum_{ i = 0 }^{ n - 1 } ( \frac{ 1 }{ i + 1 } - \frac{ 1 }{ i + 2 } ) \\ & = - \frac{ H_n }{ n + 1 } + H_n - ( H_n - 1 + \frac{ 1 }{ n + 1 } ) \\ & = 1 - \frac{ H_n + 1 }{ n + 1 } \end{aligned} \]

贪心

排除不优策略

Example1(CF1612E)

先把期望写开,我们发现如果选择了\(t\)个消息\(a_1 , a_2 , . . . , a_t\),那么答案就是\(\sum [ \exists j , m_i = a_j ] \cfrac{ \min ( t , k_i ) }{ t }\).显然如果\(t\)固定,那么每个\(a_j\)的贡献是独立的.于是只需要枚举\(t\)然后取贡献最大的.

但是,如果\(t > \max \{ k_i \}\),这个时候\(t - 1\)的答案是\(t - 1\)个数之和除以\(t - 1\),\(t\)的答案是这\(t - 1\)个数之和加上另一个更小的数除以\(t\),而前者肯定比后者大,于是不用再进一步枚举.

于是复杂度\(O ( n \max \{ k_i \} )\).

Example2(CF1592F1)

首先,二操作和三操作一定没有用,因为它们都可以用两次一操作代替.

再注意到四操作是可能有用的,因为我们拿一操作模拟四操作需要四金币的代价,而用一个四操作只需要三个金币.但是,由于拿一操作模拟四操作的时候,需要全局做一遍一操作,所以如果有两个四操作,模拟的时候两遍全局操作就可以抵消.因此,我们模拟两次四操作只需要六个金币的代价.换句话说,我们如果要用到四操作,只会使用一次或零次.

首先区间异或可以差分(\(b_{ i , j } = a_{ i , j } \oplus a_{ i + 1 , j } \oplus a_{ i , j + 1 } \oplus a_{ i + 1 , j + 1 }\))后转化为四个点的异或操作,而由于一操作操作了左上角的矩阵,所以它实际上是对三个在原矩阵外的点和一个在矩阵内的点操作.我们注意到如果矩阵内已经全都是\(0\)了,那么矩阵外不可能是\(1\),也就是原矩阵也全都是\(0\)了.

枚举一下最后的操作是啥即可,另外注意到这一步操作必须把四个点全部变成\(0\)才有用,不然还需要拿一操作去补,就不如直接用一操作.

Example3(CF1592F2)

首先注意到,如果我们对\(( x , y )\)使用操作四,那我们不可能再对一个\(( x , i )\)使用操作四,不然我们就可以用四次操作一代替这两次操作四.

再通过上面的分析,注意到只有\(b_{ x , y } , b_{ n , y } , b_{ x , m }\)都是\(1\)的时候才会使用四操作,不然,如果我们使用四操作,必然会再需要一个一操作来补,这样就是至少三个金币的代价.而由于这四个点中最多只有三个\(1\),所以一定不如直接用一操作来的划算.不然,如果三个都是\(1\),那么用了就一定不亏,因为无论如何也需要三次一操作,而就算我们用完后\(b_{ n , m }\)变成\(1\)了,再不行也可以使用一次\(1\)操作来补全.

因此我们现在想要选尽可能多的三操作,满足两两操作不在同一行或同一列,这显然是一个二分图匹配问题.换句话说,如果\(b_{ x , y } , b_{ n , y } , b_{ x , m }\)都是\(1\),我们就把\(x\)\(y\)连一条边,然后做二分图匹配,显然是最优的.

Example4(CF1666E)

先想一下别的东西怎么求.

如果我们要求最大值最小或者最小值最大怎么办?我们可以二分后贪心,而显然它们的差就是一个答案的下界,问题在于这个下界是否可以取到.

我们冷静一下,发现在可能的方案中,第\(i\)条线段的右端点的位置一定是一段连续的区间.

\(f_i\)表示第\(i\)个分界点可能的最小值,\(g_i\)表示第\(i\)个分界点可能的最大值.假设我们目前二分的最大值要小于等于\(mx\),最小值要大于等于\(mn\),那么我们有转移:

$$ \[\begin{aligned} f_{ i + 1 } & = \max \{ a_{ i + 1 } , f_i + mn \} \\ g_{ i + 1 } & = \min \{ a_{ i + 2 } , g_i + mx \} \\ \end{aligned}\]

$$

注意到\(f\)\(g\)的转移是无关的,而显然对于第\(i\)个分界点,它可以取\([ f_i , g_i ]\)中一个数,一定存在一个取法使得答案能取到下界.

为啥呢?只需让\(ans_{ i }\)表示第\(i\)条分界线是啥,那么我们\(ans_i\)是可以取\([ ans_{ i + 1 } - mx , ans_{ i + 1 } - mn ]\)中的任何一个数字的,我们将其和上面求出的\([ f_i , g_i ]\)求一下交集.如果交集为空,说明要么\(ans_{ i + 1 } - mn < f_i , f_{ i + 1 } < ans_{ i + 1 } < f_i + mn\),这是不可能的.另一种情况同理不可能,这就保证了一定可以取到答案.一定能使极差\(\leq mx - mn\).

Example5(2022zrtg十连测day7 Palindrome)

首先注意到同种字符的相对顺序不可能改变.于是最后的回文串是哪个字符对应哪个字符就可以确定.

这样我们的问题转化为现在有若干个点对\(( l , r )\),我们想给每一个点对赋值:\(a_l = i , a_r = n - i + 1\)(注意如果\(n\)是奇数,那么中心点应该是\(a_{ mid } = \frac{ n + 1 }{ 2 }\)),然后使整个序列逆序对数尽可能小.

接下来讨论一下两个点对\(( l_1 , r_1 )\),\(( l_2 , r_2 )\)之间的三种可能的关系:不交,包含,相交且不包含.会发现若\(l\)小则让\(a_l\)尽可能小就是最优的.

Example6(23省选10连测 day9 C)

强强题.

首先发现这个\(\pm 1\)操作很奇怪.我们不妨这么考虑:设最后的答案序列为\(b\),那么答案其实就是\(\sum | b_i - a_i |\).这实际上是什么呢?实际上是数轴上\(a_i\)\(b_i\)之间的距离.既然这样,那么我们同时反转\(a\)\(b\),这等价于翻转数轴,答案应该是不变的.这说明什么呢?如果我挑一个\(a\),将它和\(x\)同时反转,那么答案不变.这么做后我们可以直接清空所有\(a\)的最高位,只剩下\(x\)可能有最高位.

\(x\)的最高位一定会让若干\(a\)往上变成它.注意到最多只会有一个\(a\)会向上满足\(x\)的最高位.证明的话同样考虑取反,如果有两个\(a\)满足\(a_i \oplus b_i\)\(a_j \oplus b_j\)这一位是\(1\),我们仍然考虑数轴,有\(| not ( b_i ) - a_i | \leq | a_i - b_i |\),这由\(a_i \oplus b_i\)最高位是\(1\)导出.因此两个都取反一定不劣.

再考虑,我们会让哪个\(a\)上去满足呢?自然的想法是取代价最小的那个,因为就算它不是,这里自然地有一个待悔贪心:其它的\(a\)可以再变成它.

于是就做完了.

Example7(异或粽子)
Example8()

带悔贪心

Example1

给定一个数组,给出若干次操作\([ l , r , k ]\)表示可以将\(a [ l \cdots r ]\)减一进行至多\(k\)次,要求操作过程中数组时刻非负,求最大能做出的操作次数.

这题的做法是,我们每次遇到一个左端点,就将所有以它为左端点的区间全部操作,并把这些区间按照右端点为关键字扔进堆里.每次遇到一个地方的值变成了负的,就从堆中找右端点最大的区间杀掉.容易发现这样是正确的.

为啥能想到带悔贪心呢?主要是因为我们发现不同的区间会彼此影响,而且有一个限制性的长期条件.因此先不管这个条件,最后再通过调整堆将这个条件调整至合法.

Example2

给定一个序列,每次可以选择相邻的两个数,使其中一个\(- 1\),另一个\(- 2\),求使得整个序列都小于等于\(0\)的最小操作次数.

我们明确一下带悔贪心的基本条件:

  1. 首先,贪心是需要保证局部最优性的,并且需要保证不考虑全局的前提下,求局部最优解就是全局最优解的一部分.按我的理解,贪心是和dp一样需要有无后效性的,你前面的决策做了就是做了,带悔贪心只能改变后面的决策的形态,而不能改变前面的决策.

  2. 不同的操作之间会彼此影响,并且我们在不看全局的状态的前提下,无法第一时间确定当前对后面最优影响的操作是啥.通常情况下,感觉带悔贪心的每个操作会影响的操作是有限的.

  3. 感觉能做带悔贪心的好像很多都可以设计一个复杂度更高的dp.不过这个似乎很合理,因为(2)告诉我们它能影响的操作大概率是不多的.

我们看这个题,第一点基本随便编个贪心都可以满足:就是先不断做\(( - 2 , - 1 )\),最后不够了再加个\(( - 1 , - 2 )\)补一下.而第二点呢?显然每个地方的操作只会影响前后两个位置接下来的操作(当然,被影响到的位置有可能继续影响别人).

那么为什么能想到带悔贪心呢?其实只要发现有的时候\(( - 1 , - 2 ) + ( - 1 , - 2 )\)\(( - 2 , - 1 )\)更优秀就自然能引到带悔贪心了.

好,现在我们仍然是做那个看上去就不太对的贪心:先不断做\(( - 2 , - 1 )\),最后不够了再加个\(( - 1 , - 2 )\)补一下.我们通过样例以及其它栗子发现:有的时候\(( - 1 , - 2 ) + ( - 1 , - 2 )\)\(( - 2 , - 1 )\)更优秀,这启发我们:能不能在做后面位置的时候将前面的\(( - 2 , - 1 )\)变成\(( - 1 , - 2 ) + ( - 1 , - 2 )\)呢?注意这里我们不能直接换:带悔贪心要求我们不能改变前面操作的状态.因此我们引入一个操作:如果当前前面存在一个\(( - 2 , - 1 )\)操作,那么我可以在这个位置进行一个\(( 0 , - 3 )\)操作.显然\(( 0 , - 3 ) + ( - 2 , - 1 ) = ( - 1 , - 2 ) + ( - 1 , - 2 )\).我们完成了反悔的操作!

但是,我们直接认为\(( - 1 , - 2 )\)不可能反悔的原因是:它是一个补位操作,一个位置只有可能进行一次,这玩意不可能能反悔.可现在不一样了,我们的操作序列中有了两个\(( - 1 , - 2 ) + ( - 1 , - 2 )\),怎么办呢?你当然可以对着这个操作再观察怎么反悔,但事实上有更高效的思路:我们直接考虑\(( - 3 , 0 )\)怎么反悔.这个看上去很疑惑:我们为了使\(( - 2 , - 1 )\)变成\(( - 1 , - 2 ) + ( - 1 , - 2 )\)而引入了一个新操作,这个新操作在原序列中是不存在的:它甚至有个很奇怪的限制条件:必须在前面存在\(( - 2 , - 1 )\)的时候才可以发动.那为什么我们可以直接考虑它如何反悔呢?

先看第一个问题:\(( - 3 , 0 )\)这个技能的发动是有前提条件的:前面必须有\(( - 2 , - 1 )\)才可以.但你注意我们是在贪心啊,我们很清楚每个地方用了几个\(( - 2 , - 1 )\),也很清楚每个地方用了几个\(( - 3 , 0 )\).

再看第二个问题:这个新操作为何能反悔呢?其实第一个问题解决这个问题也就解决了,由于贪心,我们知道了巨大多的信息,这个信息量是dp不能比的.因此这个条件如果dp的话看上去需要多记一维,但是贪心完全不用.

我们可以根据类似上面的操作迅速编出它怎么反悔:\(( - 3 , 0 ) \rightarrow ( - 1 , - 2 ) + ( - 2 , - 1 ) = ( - 3 , 0 ) + ( 0 , - 3 )\),或者\(( - 3 , 0 ) \rightarrow ( - 1 , - 2 ) + ( - 1 , - 2 ) + ( - 1 , - 2 ) = ( - 3 , 0 ) + ( 0 , - 3 ) + ( 0 , - 3 )\).

最后遇到一个点,能用\(( 0 , - 3 )\)就用\(( 0 , - 3 )\),不够用的再补齐.这个原因也很简单:如果我们在这里不用\(( - 3 , 0 )\)而用其它的代替的话,你会发现无论如何都等价于\(( - 3 , 0 )\)然后后面再反悔.

再总结一下这个题中包含的带悔贪心:

这个带悔贪心包含若干个操作,这些操作之间可以互相转化,使得在前面进行的一个操作可以和在后面进行的一个操作一起,等价于前面进行了另一个操作.如同最经典的带悔贪心的模型,我们每次进行一个操作后,都会加入若干个可以进行的操作(在这个题中,一开始就在每个位置加入了无穷多的\(( - 2 , - 1 )\)\(( - 1 , - 2 )\)的操作)(写一下代码就会发现,我们其实记录下了每个位置插入了多少个可行的\(( - 3 , 0 )\)操作).这些操作构成一个封闭的东西,使得反悔任意一个操作的反悔操作本身都可以使用若干操作表示出来.

寻找下界并证明

Example1([EER1]代价)

给你一个长度为\(n\)的序列\(a\),保证\(a_1 = a_n = 1\).每次你可以选择一个\(i ( 1 < i < n )\)\(a_i\)删去并付出\(a_{ i - 1 } a_i a_{ i + 1 }\)的代价.删去\(a_i\)后序列两端会接起来,求删成两个\(1\)的最小代价.

首先注意到,如果有一个\(1 < i < n\)满足\(a_i = 1\),那这个点最后删显然更优秀:如果我们把它删了,不仅肯定比最后删它劣(最后删它只需要\(1\)的代价),还有可能使原本能和它相邻的点这次和一个更大的数相邻了,显然不优秀.因此整个序列被若干个\(1\)所划分.接下来我们只考虑中间所有数\(\geq 2\)的情况.

再思考一个事实:当\(a , b \geq 2\)时,一定有\(ab \geq a + b\).而考虑每两个相邻的点一定会被乘起来扔进答案,也就是说答案下界一定是\(\sum_{ i = 2 }^{ n - 2 } a_i a_{ i + 1 } + \min_{ i = 2 }^{ n - 1 }{ a_i }\).注意到这个下界是可以构造出来的:找到每一段最小的点然后从左/右挨个删点即可.

Example2(loj3318)

首先考虑:给出一个排列,从原排列换到它的最小步数一定是它的逆序对数.因为我们可以每次找到应当被放到边界的点,然后不断把它换过去.

考虑现在构造\(a\)数组,每次对于还没选的最大值,显然要扔到尽可能靠后的位置,然后不断递归处理.

Example3

给定一张图,每个点上有一个权值\(a_i\),我们每次可以删掉一个点以及其所有连边,代价是所有相邻的点的权值和.求删光图的最小代价.

首先注意到答案一共要更新边数次,不妨考虑边.

一条边可能对答案有两种贡献,也就是与它相邻的两个点的点权.它会对答案贡献后删的那个点的点权.显然所有边取最小值时是一个下界.这个下界是可以构造出来的:我们按照点权从大往小删即可.

Example4([UOJ280]题目难度排序)

先考虑\(a_i\)互不相同,那可以每次选一个最大的数,满足它加进去后整个集合的中位数\(\leq\)还没选的数的最小的数.注意到这里一定能构造出合法解,且如果选了另一个数一定更劣.

那如果可能存在\(a_i\)相同呢,我们先按照大小排序,然后选出一对小于等于所有数的中位数的\(( a_i , a_{ i + 1 } )\),然后这么选:\(a_i , a_{ i + 1 } , a_n , a_{ i - 1 } , a_{ n - 1 } , a_{ i - 2 } . . .\),一直到左边全部被填完,然后按照互不相同的方法填.

首先这么做一定是合法解,因为中位数会在\(a_i\)上震荡.其次这么做为什么是最优解呢?我们考虑一开始如果选了另一对大于中位数的相等的数,那一定不合法,因为最后会剩一些小数,会把这些东西震荡到一个更小的中位数.而如果一开始选了一个单点,接下来一定要不断选更大的点,这样比它小的数就没法加进去了.而等左边全部被填完后,由于这个时候中位数已经没有办法保持不变了,所以必定接下来要增大,而中位数不断增大只能按照互不相同的方法填.

Example5([CF1098D]Eels)

首先,我们猜测:我们一开始先让最小的两个互相吃,可能是最优秀的.接下来我们尝试证明这个猜测.

首先,对于一个不危险的操作来说,假设这次操作的两个数是\(a\)\(b\),其中\(2 a < b\).我们尝试判断一下这个操作满足什么条件.这个时候,注意到如果\(b\)之前吃过别的鱼,假设是\(c\)\(d\)(不妨假设\(d \geq c\)),有\(b = c + d\),由鸽笼原理,发现\(d > a\).这意味着:如果\(a\)都没被操作掉,那么\(d\)必不可能被操作掉,这也就是说\(b\)不可能出现.因此\(b\)在这次操作前一定没有吃过别的鱼.那互相残杀的鱼的重量就都一定小于\(b\),且\(a\)就是所有一开始小于\(b\)的鱼的和.

我们按照鱼的重量从小到大排序,你会发现一次不危险操作涉及到的鱼一定是一条满足自己大于比自己小的所有鱼的重量和的两倍的鱼,我们称其为大鱼,也就是\(w_i > 2 \sum_{ j = 1 }^{ i - 1 } w_j\),我们对此计数就可以完成一次操作.

那么问题又来了,这个东西一定是最小的吗?

我们考虑一个事实:我们要最小化不危险操作的数量,但很明显的一点是:每只大鱼都必须经过一次不危险操作才能变成一只更大的鱼,当然,如果它选择自杀,那么吃掉它的那只鱼会继承它的地位,在不死的情况下仍然要进行至少一次不危险操作才能变成更大的鱼,因此这显然是一个下界.而又可以构造出答案.

那么如何多组询问呢?首先发现大鱼不会很多,最多\(\log w\)个,我们考虑一下这个两倍的用处,我们按照值域\([ 1 , 1 ] , [ 2 , 2 ] , [ 3 , 4 ] , [ 5 , 8 ] , . . . , [ 2^{ k - 1 } + 1 , 2^k ]\)将鱼分成若干组,不难发现大鱼只有可能是每个区间中最小的数字,因为不然,那么这个区间中最小的数字乘以二一定比它自己大.这个东西就很好维护了.

Example6(称球游戏)

给定\(n\)个球(其中有一个次品球,重量和其它球不一样)和一架天平,求最少通过多少次操作才能找到这个球.

我们通过这个游戏来引入信息论和判定树作为一个构造下界的工具.

首先引入一套语言体系来简化文字:

  1. \(S\)表示标准球.

  2. \(< A , B >\)表示称量集合\(A\)和集合\(B\),\(< A , B > = 0\)表示平衡,\(< A , B > = A\)表示\(A\)较重,\(< A , B > = B\)表示\(B\)较重.

信息论

如果一个随机变量\(x\)\(n\)种取值,出现概率分别为\(p_1 , p_2 , \cdots , p_n\),则其熵为\(H ( x ) = f ( p_1 , p_2 , \cdots , p_n ) = \sum{ C p_i \ln \frac{ 1 }{ p_i } }\),\(C\)为正整数,通常取\(1\).(事实上这里的定义与真正的信息论的定义有一定的差别,不过原理是类似的,这里简化了一些.)

定理1:在得到关于随机变量\(x\)的一个熵为\(h\)的信息后,\(x\)的熵会减少\(h\).

定理2:当一个随机变量的各种取值概率相等时,它的熵最大.

用信息论估计一下称球游戏的上界,如果我们已知次品轻重,由于一共有\(n\)个球,每个球等概率成为次品,因此总熵是\(\ln n\),每称一次能得到的信息有三种:平衡,左边重,右边重,因此称一次能得到的熵是\(\ln 3\),也就是说我们至少要猜\(\frac{ \ln n }{ \ln 3 } = \log_3 n\)次.如果我们不知道次品的轻重,那么至少要猜\(\frac{ \ln 2 n }{ \ln 3 } = \log_3 2 n\)次.

这就是称球游戏的信息论下界,接下来我们要做的无非就是证明这个下界能否取得到.

判定树

我们考虑将称量的决策树建立出来,每个叶子节点表示我们得到的答案,每个非叶子节点代表一次称量,每个非叶子节点有三个儿子,分别表示如果称量的结果是左偏/右偏/平衡时,接下来的策略.显然判定树的深度就是最坏情况下称量的次数.

\(n\)个叶子的树的最小深度是\(\lceil \log_3 n \rceil\),这得出和信息论一样的下界估计(信息论的结论好像就是拿哈夫曼树证明的,不太懂).

子问题1(已知次品重量)

不妨假设\(f ( n )\)表示有\(n\)个球的最少次数,注意到\(f ( 3 ) = 1\).

根据信息论,\(f ( n ) \geq \lceil \log_3 n \rceil\),下面证明等号成立:

首先考虑证明\(f ( 3^m ) = m\),\(m = 1\)时已经得证.\(m > 1\)时,考虑将所有球分成等数量的三份,称量其中两份.由于已知次品重量,这一次就可以找到次品在哪一份中,因此\(f ( 3^m ) \leq f ( 3^{ m - 1 } ) + 1\).综合信息论下界\(f ( 3^m ) \geq m\),我们不难得出以上结论.至于\(n \ne 3^m\)的情况,我们类似这个过程按照\(n \bmod 3\)的值讨论一下即可,于是有\(f ( n ) \leq f ( \lceil \frac{ n }{ 3 } \rceil ) + 1\).

子问题2(不知次品轻重,已有一个标准球,需知道次品轻重)

根据信息论下界,\(f ( n ) \geq \lceil \log_3 2 n \rceil\).

比起上面的问题,这个问题在于:如果我们称量不平衡,是不知道次品球在两堆中的哪一堆的.但我们思考到:虽然我们不知道在哪一堆,但我们得到了一个额外的信息:如果它在哪一堆,它的重量我们也就知道了.

下面证明引理:

引理

有两堆球,第一堆有\(n\)个球,第二堆有\(m\)个,已知其中有一个次品,并且次品如果在第一堆中只可能是重球,在第二堆中只可能是轻球.设此时的称量次数是\(g ( n , m )\),则\(g ( n , m ) = \lceil \log_3 ( n + m ) \rceil\).

先证明信息论下界,不难发现仍然是\(g ( n , m ) = \lceil \log_3 ( n + m ) \rceil\).

首先不难发现,\(g ( 1 , 0 ) = g ( 0 , 1 ) = 0 , g ( 1 , 1 ) = g ( 2 , 0 ) = g ( 0 , 2 ) = 1\).

仍然使用数学归纳,假设\(n + m < k ( k \geq 3 )\)的时候成立,我们接下来证明\(n + m = k\)的时候仍然成立.

情况1

\(n = 3 p , m = 3 q\),我们将\(n\)分成等数量的三堆:\(A_1 , B_1 , C_1\),将\(m\)分成等质量的三堆\(A_2 , B_2 , C_2\).

接下来称量\(\langle A_1 + A_2 , B_1 + B_2 \rangle\).

  1. 如果\(\langle A_1 + A_2 , B_1 + B_2 \rangle = 0\),那么答案在\(C_1 \cup C_2\)中,此时有\(g ( n , m ) = g ( \frac{ n }{ 3 } , \frac{ m }{ 3 } ) + 1\).

  2. 如果\(\langle A_1 + A_2 , B_1 + B_2 \rangle = A_1 + A_2\),由于若次品在\(A_2\)中,那么它不可能是重球,因此次品不可能在\(A_2\)中,同理不可能在\(B_1\)中,只可能在\(A_1 \cup B_2\)中,此时有\(g ( n , m ) = g ( \frac{ n }{ 3 } , \frac{ m }{ 3 } ) + 1\).

  3. \(\langle A_1 + A_2 , B_1 + B_2 \rangle = B_1 + B_2\),同理.

此时数学归纳成立.

情况2

\(n = 3 p + 1 , m = 3 q + 2\).此时我们将第一堆分成\(A_1 ( p ) , B_1 ( p ) , C_1 ( p + 1 )\),将第二堆分成\(A_2 ( q + 1 ) , B_2 ( q + 1 ) , C_2 ( q )\),然后\(\langle A_1 + A_2 , B_1 + B_2 \rangle\),接下来和情况1一样,于是有\(g ( n , m ) = \max \{ g ( p , q + 1 ) , g ( p + 1 , q ) \} = \lceil \log_3 \frac{ n + m }{ 3 } \rceil + 1\).

同理,当\(n , m \bmod 3\)的值是其它组合的时候,也都可以类似操作.引理得证.

由此引理得证.

回到原问题,进行数学归纳,我们继续来讨论\(n \bmod 3\)的值.

情况1

\(n = 3 p\)时,直接分成\(A ( p ) , B ( p ) , C ( p )\),然后\(\langle A , B \rangle\).如果平衡则接下来需要\(f ( p ) = \lceil \log_3 2 p \rceil\)次,不然根据引理,需要\(\lceil \log_3 ( p + p ) \rceil\)次,因此\(f ( n ) = \lceil \log_3 2 p \rceil + 1 = \lceil \log_3 6 p \rceil = \lceil \log_3 2 n \rceil\).

情况2

\(n = 3 p + 1\)时,一种自然的想法是分成\(A ( p + 1 ) , B ( p ) , C ( p )\),但是这种想法是错误的!我们考虑判定树,这种情况下,所有的叶子被分成了\(2 p + 2 , 2 p , 2 p\),这显然是不优秀的.正确的做法是分成\(A = \{ S , 1 , \cdots p \} , B = \{ p + 1 , \cdots 2 p + 1 \} , C = \{ 2 p + 2 , \cdots 3 p + 1 \}\).由于存在标准球,此时如果\(\langle A , B \rangle = A \ or \ B\),那么转化成\(g ( p , p + 1 ) = \lceil \log_3 ( 2 p + 1 ) \rceil\),不然转化成\(f ( p ) = \lceil \log_3 2 p \rceil\).

剩下的情况也都类似,该问题解决.

子问题3(不知次品轻重,无标准球,需知道次品轻重)

考虑在第一次称量后,无论结果如何都会得到一个标准球,因此后面的问题都等价于子问题2,只需考虑第一次操作.再思考一下不难发现,在子问题2中,只有\(n \bmod 3 = 1\)的时候才会需要用到标准球,因此只有这里需要多一步.拟合一下函数,可以得到该问题\(f ( n ) = \lceil \log_3 ( 2 n + 2 ) \rceil\).

子问题4(不知次品轻重,已有一个标准球,无需知道次品轻重)

这个问题复杂一些,而且难以估计下界.但我们可以用一下最优化dp来估计下界.

首先假设有无穷个标准球,我们每次将\(a\)个球放左边,\(b\)个球放右边,\(a \leq b\),在左边补上\(b - a\)个标准球.

  1. 如果天平不平衡,转化为引理问题(因为此时找到次品是谁必然知道它的轻重),因此需要\(\lceil \log_3 ( a + b ) \rceil + 1\)步.

  2. 如果天平平衡,需要\(f ( n - a - b ) + 1\)步.

我们有\(f ( n ) = \min_{ a , b } \{ \max \{ f ( n - a - b ) , \lceil \log_3 ( a + b ) \rceil \} \} + 1\).

注意到接下来的步数只与\(a + b\)有关,取\(b - a \leq 1\),于是一个标准球已经够用了.

构造方程后手算几项,注意到\(f ( n ) = \lceil \log_3 ( 2 n - 1 ) \rceil\).

接下来归纳法就简单了,只需要对于\(n \bmod 3\)的余数讨论一下,然后再讨论一下\(a\)的取值即可.

Example7(Ucup 3rd Stage 8 H)

每次可以询问一个区间,交互库返回这个区间中的次大元素所在位置,求\(n\)所在位置.要求询问次数\(\leq \lceil 1 . 5 \log_2 n \rceil\),询问区间总长度\(\leq 3 n\).

一个自然的想法是先问一下全局次大值,然后二分,但这样询问区间总长度就会爆掉.

因此考虑设\(T ( n )\)表示长度为\(n\)的,已知次大值(并且次大值)的最小次数.我们考虑每次判断一下最大值在哪边,因此把这个区间拆成两半,然后询问一下次大值所在的那一半,这样就可以判断最大值在不在那一半.

那么我们当然有方程\(T ( n ) = \min_{ m < n } \{ \max \{ T ( m ) + 1 , T ( n - m ) + 2 \} \}\).

当然有\(m_n \leq m_{ n + 1 }\),于是直接dp即可.

Exchange Arguments

模型1

给定\(n\)个元素\(x_1 , . . . , x_n\),以及一个定义域为这些元素的序列,定义域为有序集合的函数\(F\).求出对于所有的\(n\)阶排列\(p\),表达式\(F ( \{ x_{ p_1 } , x_{ p_2 } , . . . , x_{ p_n } \} )\)最小值.

事实上会发现一些NPC问题也可以直接转化为这个模型,但是并无贪心解.我们接下来考虑这个模型内哪些问题是有贪心解的.

Example1(国王游戏)

给定\(n\)个二元正整数对\(( a_i , b_i )\),将它们按照任意顺序排成一列.定义排成一列的代价为每个二元组的\(a\)乘上序列中这个二元组之后的所有二元组的\(b\)之和的总和,求最小代价.\(n , a_i , b_i \leq 10^6\).

转化为上面的形式,也即:\(F ( \{ ( a_1 , b_1 ) , . . . , ( a_n , b_n ) \} ) = \sum_{ 1 \leq i < j \leq k } a_i b_j\).

考虑调整法,令排列\(( q_1 , . . . , q_n ) = ( p_1 , . . . , p_{ i - 1 } , p_{ i + 1 } , p_i , p_{ i + 2 } , . . . , p_n )\).则:

\[ F ( \{ ( a_{ p_1 } , b_{ p_1 } ) , . . . , ( a_{ p_n } , b_{ p_n } ) \} ) - F ( \{ ( a_{ q_1 } , b_{ q_1 } ) , . . . , ( a_{ q_n } , b_{ q_n } ) \} ) = a_{ p_i } b_{ p_{ i + 1 } } - a_{ p_{ i + 1 } } b_{ p_i } \]

因而如果\(a_{ p_i } b_{ p_{ i + 1 } } - a_{ p_{ i + 1 } } b_{ p_i } > 0\),则\(F ( \{ ( a_{ p_1 } , b_{ p_1 } ) , . . . , ( a_{ p_n } , b_{ p_n } ) \} ) > F ( \{ ( a_{ q_1 } , b_{ q_1 } ) , . . . , ( a_{ q_n } , b_{ q_n } ) \} )\),也就是说\(( p_1 , . . . , p_n )\)不是最优解.因此只有满足\(\forall 1 \leq i < n\),\(\cfrac{ a_{ p_i } }{ b_{ p_i } } \leq \cfrac{ a_{ p_{ i + 1 } } }{ b_{ p_{ i + 1 } } }\)可能是最优解.

如果一个\(p\)满足这样的性质,则所有\(\cfrac{ a }{ b }\)相等的数在排列中一定是连续的一段.而根据式子,这样的排列交换\(\cfrac{ a }{ b }\)相等的两个位置,是不会使答案改变的.因此直接按照\(\cfrac{ a }{ b }\)排序即可.

我以前所使用的调整法大概是先构造一个贪心策略,然后证明这个策略改变后一定不优秀或更劣.但是这样对于多峰函数会卡在一个局部最优解上而找不到全局最优解.但是,如果我们说不满足这个条件的一定不是最优解(可以使用调整得到更优解),我们再证明满足这个条件(即调整过程DAG的终止点)的都是最优解,继续做下去,就是很严谨的.

换句话说,我们要用调整法,就一定要证明调整过程中的DAG的零出度点是最优解.

模型通解

设给出的元素的集合为\(S\),定义\(S\)上的一种二元比较关系\(\leq\),将所有元素按照比较关系排序.在上一个问题中,不难发现以下性质:

  1. 强完全性:\(\forall a , b \in S\),\(a \leq b \lor b \leq a = 1\).

  2. 传递性:\(\forall a , b , c \in S\),\(a \leq b , b \leq c \Rightarrow a \leq c\).

  3. \(\forall a , b \in S\),如果\(a \leq b\),则对于任意一个包含\(\{ a , b \}\)作为子段的元素序列\(\{ s_1 , . . . , s_{ k - 1 } , a , b , s_{ k + 2 } , . . . , s_n \}\)\(\{ s_1 , . . . , s_{ k - 1 } , b , a , s_{ k + 2 } , . . . , s_n \}\)都有:\(F ( \{ s_1 , . . . , s_{ k - 1 } , a , b , s_{ k + 2 } , . . . , s_n \} ) \leq F ( \{ s_1 , . . . , s_{ k - 1 } , b , a , s_{ k + 2 } , . . . , s_n \} )\).

问题满足以上性质,那么我们按照这种二元比较关系对元素排序后的答案一定是最优的.原因在于,首先这种操作构成DAG,而定义\(\leq\)后自然也就定义了\(=\),所以DAG的零出度点自然是最优解点.

分析题目时,应该先分析第三条性质得到\(\leq\)的定义,然后判断是否符合前两条性质.

Example2

给定\(n\)个包含小写字符的字符串\(s_1 , . . . , s_n\),找到一个\(n\)阶排列\(p\),将\(s_{ p_1 } , s_{ p_2 } , . . . , s_{ p_n }\)顺序拼接得到\(S\),使\(S\)的字典序最小.

\(s \leq t\)当且仅当\(s + t\)的字典序\(\leq\)t+s

此时我们注意到:\(s + t\)的字典序小于等于\(t + s\)的字典序当且仅当\(s^{ \infty } \leq t^{ \infty }\).原因是:不妨设\(s\)的长度\(\leq t\)的长度.若\(s\)不是\(t\)的前缀,那显然只需比较\(t\)的前缀和\(s\)的字典序即可,此时上面两个条件等价;若\(s\)\(t\)的前缀,则我们需要比较\(t\)的前缀和\(t\)的后缀,注意到\(t\)的前缀还是\(s\),于是需要比较\(s\)\(t\)的后缀.类似可得.

于是这题可以使用后缀数组求任意两个字符串的后缀的最长公共前缀实现.

Example3

\(n\)个箱子,第\(i\)个箱子有重量\(w_i\)和承载量\(v_i\),\(( w_i , v_i > 0 )\),将它们堆成一列使得每一个箱子上面的箱子总重量都不大于它的承载量.

考虑最大化\(\min_{ i = 1 }^n \{ v_i - \sum_{ j = 1 }^{ i - 1 } w_j \}\),并判断是否\(\geq 0\).

我们令\(b_i = - ( v_i + w_i ) , a_i = - v_i\),则我们要最大化\(\min \{ \sum_{ j = 1 }^{ i - 1 } b_i - \sum_{ j = 1 }^i a_i \}\).

我们接下来将证明所有形如这样的题的通法.

首先,定义\(x \leq y\)当且仅当\(F ( \{ x , y \} ) \leq F ( \{ y , x \} )\),那么对于两个元素\(( a_1 , b_1 ) , ( a_2 , b_2 )\),显然\(( a_1 , b_1 ) \leq ( a_2 , b_2 )\)当且仅当\(\min \{ - a_1 , b_1 - a_1 - a_2 \} \geq \min \{ - a_2 , b_2 - a_1 - a_2 \}\).接下来我们证明这样的定义是满足性质的.

对于性质(3),显然成立,因为交换两个相邻位置不会对前面或后面产生影响,而前后对于这两个位置的影响也都可以抵消.

性质(1)显然成立.

再分析一下这个式子,这相当于不等式左边的两个元素都大于等于右边的最小值.我们讨论一下两种情况:

  1. 都大于等于第一个元素,则相当于\(a_1 \leq a_2 \land b_1 - a_1 \geq 0\).

  2. 都大于等于第二个元素,则相当于\(b_1 \geq b_2 \land b_2 - a_2 \leq 0\).

可能这里后面和\(0\)比较没有移项来得简洁.但是,相减的两项是同一个元素的两项,我们显然把它俩放在一类是更优秀的.

注意到需要对\(b - a\)的符号进行讨论:

  1. \(sgn ( b_1 - a_1 ) > sgn ( b_2 - a_2 )\),则不等式成立.

  2. \(sgn ( b_1 - a_1 ) = sgn ( b_2 - a_2 ) = 1\),则不等式成立当且仅当\(a_1 \leq a_2\).

  3. \(sgn ( b_1 - a_1 ) = sgn ( b_2 - a_2 ) = 0\),则不等式成立.

  4. \(sgn ( b_1 - a_1 ) = sgn ( b_2 - a_2 ) = - 1\),则不等式成立当且仅当\(b_1 \geq b_2\).

这四条中(2)和(4)的证明是显然的,(3)则是因为此时\(b_1 = a_1\),\(b_2 = a_2\),两条件必有一真.(1)则是因为此时满足\(b_1 - a_1 > b_2 - a_2 \land sgn ( b_1 - a_1 ) \geq 0 \land sgn ( b_2 - a_2 ) \leq 0\).也就有\(a_2 - a_1 > b_2 - b_1 \land b_1 \geq a_1 \land b_2 \leq a_2\).怎么着都能成立.

由此发现,对于\(sgn ( b - a )\)相同的类,内部排序是一定满足传递性的.

但是不同类之间并没有满足传递性,因此我们把排序条件修正为:

\[ \begin{aligned} ( a_1 , b_1 ) & \leq ( a_2 , b_2 ) \\ \Updownarrow \\ ( sgn ( b_1 - a_1 ) & > sgn ( b_2 - a_2 ) ) \\ \lor ( sgn ( b_1 - a_1 ) & = sgn ( b_2 - a_2 ) \land F ( \{ 1 , 2 \} ) \leq F ( \{ 2 , 1 \} ) \end{aligned} \]

模型2

给定\(n\)个元素\(x_1 , . . . , x_n\),以及一个定义域为这些元素的序列,值域为有序集合的函数\(F\).求出对于给定整数\(k\),所有的\(n\)阶排列\(p\)的长度为\(k\)的子序列,表达式\(F ( \{ x_{ p_1 } , x_{ p_2 } , . . . , x_{ p_k } \} )\)最小值.

如果\(k = n\),则就是模型1.不然,我们考虑先选出一个大小为\(k\)的子集,然后使用模型1.不难发现,我们最后取出的\(\{ x_{ p_1 } , x_{ p_2 } , . . . , x_{ p_k } \}\)一定是\(n = k\)时最优解的一个子序列.这在一些情况下可以降低问题的难度.

Example

\(n\)个物品,第\(i\)个物品有非负费用\(c_i\)和价值\(v_i\),两个人进行如下博弈:

  1. 第一个人要么选择一个物品,付出\(c_i\)的代价;要么选择结束游戏.

  2. 第二个人可以选择删除这个物品,这会使博弈回到第一步,且第一个人付出的代价不会消失(这个操作最多可以进行\(k\)次);也可以选择不操作,此时第一个人获得\(v_i\)的收益,博弈结束.

  3. 第一个人的总收益为收益减去付出的所有代价,第一个人希望最大化收益,第二个人希望最小化收益.\(( n \leq 1 . 5 \times 10^5 , k \leq 9 )\)

注意到第一个人要么一开始就结束游戏,要么连续选择\(k + 1\)个,然后收益为\(\min_{ i = 1 }^{ k - 1 } \{ v_{ x_i } - \sum_{ j = 1 }^i c_{ x_j } \}\)(如果第一个人把一个收益很大的放在最后选,那第二个人可以直接结束游戏防止他选到).注意到这和模型1的Example3是类似的,于是我们可以先排序,然后dp出子序列,复杂度\(O ( n \log n + nk )\).

构造

增量构造

Example1

平面上有\(n\)条直线,将整个平面划分成若干部分.求证:这些部分可以黑白染色使得两个边相邻的部分颜色不相同,并给出构造方案.

考虑数学归纳,现在已经有\(n\)条直线的答案,求\(n + 1\)条直线的答案.我们将直线加到这个平面上,并将在这条直线其中一边的部分颜色全部取反.

Example2

给定若干个角度\(a_1 , \cdots , a_n \in \{ 90 \degree , 270 \degree \}\),要求构造一个\(n\)边形(边必须平行于坐标轴),使得其内角依次是\(a_1 , \cdots , a_n\).

首先有解条件显然是判定它们的和是否是\(180 \degree ( n - 2 )\).

注意到相邻的\(90 \degree\)\(270 \degree\)无非是在原序列上修修改改,这个可以一起合并起来.不断合并就做完了.

Example3(CF1770H)

呃,简单来说就是把边界往里缩,每次找左上和右上的四个点做匹配,然后剩下的缩进去.

原题解的那个图特别清晰.

Example4(ABC232H)

放在这个模块下就好想了,剥一行一列就行.最后可能会剩个边界情况,简单讨论.

找中间状态

常见于操作可逆,想要让\(S \rightarrow T\).这个时候可以找一个中间状态\(A\),让\(S \rightarrow A , T \rightarrow A\).

Example1

坐标系上每个整点有个灯,初始只有\(( X , 0 )\)亮着,每次把\(( x , y )\),\(( x , y + 1 )\),\(( x + 1 , y )\)状态反转,给出终止状态,求初始亮的点的坐标,保证有解且唯一解.

\(n \leq 10^5\),坐标的绝对值均\(\leq 10^{ 17 }\).

首先我们发现,如果我们上面有若干个亮点,我们一定能把他们全杀了,变到下面,但下面的亮点没办法处理.怎么办呢?

一个想法是,我们将所有的亮点全都推到一条直线\(y = - inf\),然后比对.我们注意到\(( X , 0 )\)向下推的过程类似一个组合数递推的过程,由经典公式\(\binom{ S }{ T } \equiv [ T \subseteq S ] \bmod 2\)可知,我们取\(inf = 2^{ 63 } - 1\)即可.然后最后在这条线上一定是有一个区间是\(1\),我们需要找到区间左端点,我们选择在直线上随便找到一个\(1\),由于\(inf\)很大,大于\(10^{ 17 }\),因此这一步是好找的.然后最后二分+算贡献就可以找到左端点.

这个题有个改版,\(n \leq 10^4\),但是初始点可能是\(( X , Y )\).

这个题怎么做呢?类似上面的,我们考虑找到两个点\(( j , - inf )\)\(( k , - inf )\)是亮的,并且他们分别是最靠左的和最靠右的,然后我们就能反解出\(X\)\(Y\).而上述条件满足当且仅当\([ j - X \subseteq Y + inf ]\).

如果我们随便找一个点\(( p , - inf )\)满足条件,那我们接下来只需要枚举\(w\),判断\(( p - 2^w , - inf )\)是否是亮的,这样就能找到最靠左的,同理可以找到最靠右的.

那么怎么找到这个点呢?我们二分,每次判断一个区间\([ l , r ]\)中是否有亮的.这个是难以判断的,但是好判断的是,这个区间中亮的灯的数量是奇数还是偶数.因此我们拿这个判断就行,有奇数就去奇数,两个都是偶数随便去一个.

二维计算几何

参考:https://www.luogu.com.cn/blog/command-block/ji-suan-ji-he-suan-fa-hui-zong.

这一部分比较常用,知识点也比较简单,会主要聚焦于写法.

基本函数

eps

1
const double eps=1e-10

浮点数计算存在误差,因此大部分时候不能直接进行大小是否相等的判断,我们需要通过规定精度来减少这种误差.

sign

1
2
3
4
5
inline int sign(double x){
if(x<eps&&-x<eps)return 0;
if(x>eps)return 1;
return -1;
}

用于判断一个浮点数是正数还是负数.

myabs

1
2
3
4
inline double myabs(double x){
if(sign(x)==-1)return -x;
return x;
}

用来求绝对值.

mysqr

1
2
3
inline double mysqr(double x){
return x*x;
}

用来求平方.

Point/Vector

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
struct Point{
double x,y;
Point(double X,double Y){
x=X;y=Y;
}
inline double len(){//判断到原点的距离
return std::sqrt(x*x+y*y);
}
inline int que(){//判断点的象限
if(sign(x)== 1&&sign(y)== 1)return 1;
if(sign(x)==-1&&sign(y)== 1)return 2;
if(sign(x)==-1&&sign(y)==-1)return 3;
return 4;
}
};
inline Point operator +(const Point &A,const Point &B){
return Point(A.x+B.x,A.y+B.y);
}
inline Point operator -(const Point &A,const Point &B){
return Point(A.x-B.x,A.y-B.y);
}
inline Point operator *(const double &c,const Point &A){
return Point(c*A.x,c*A.y);
}
inline Point operator *(const Point &A,const double &c){
return Point(c*A.x,c*A.y);
}
inline Point operator /(const Point &A,const double &c){
return Point(A.x/c,A.y/c);
}
inline double dist(const Point &A,const Point &B){
return std::sqrt(mysqr(A.x-B.x)+mysqr(A.y-B.y));
}

存储基本的点的信息.也可以看作一个二维向量.

向量内积

1
2
3
inline double operator *(const Point &A,const Point &B){
return A.x*B.x+A.y*B.y;
}

也就是\(\vec{ a } \cdot \vec{ b } = | \vec{ a } | | \vec{ b } | \cos \theta = x_a x_b + y_a y_b\).也就等于\(\vec{ a }\)\(b\)上的投影与\(\vec{ b }\)的模长的乘积.

内积可以用来判断夹角:

  1. 如果\(\vec{ a } \cdot \vec{ b } = 0\),则说明\(\vec{ a } \bot \vec{ b }\).

  2. 如果\(\vec{ a } \cdot \vec{ b } > 0\),则说明\(\vec{ a }\)\(\vec{ b }\)正方向的夹角小于\(90 \degree\).

  3. 如果\(\vec{ a } \cdot \vec{ b } < 0\),则说明\(\vec{ a }\)\(\vec{ b }\)正方向的夹角大于\(90 \degree\).

两个向量同时旋转相同角度,其内积结果不变.

向量叉积

1
2
3
double operator ^(const Point &A,const Point &B){
return A.x*B.y-B.x*A.y;
}

也就是\(\vec{ a } \times \vec{ b } = x_a y_b - y_a x_b\).也就等于\(\vec{ a } , \vec{ b }\)两个向量张成的平行四边形(有向)的面积.

叉积可以用来判断方向:

  1. 如果\(\vec{ a } \times \vec{ b } = 0\),说明二者共线.

  2. 如果\(\vec{ a } \times \vec{ b } < 0\),说明从\(\vec{ a }\)\(\vec{ b }\)的方向是顺时针.

  3. 如果\(\vec{ a } \times \vec{ b } > 0\),说明从\(\vec{ a }\)\(\vec{ b }\)的方向是逆时针.

向量旋转

1
2
3
4
5
//插入Point内部
inline Point rotate(double theta){
double st=std::sin(theta),double ct=std::cos(theta);
return Point(x*ct-A.y*st,A.x*st+A.y*ct);
}

也就是将这个竖向量乘左乘旋转矩阵\(\begin{bmatrix}\cos \theta & - \sin \theta \\ \sin \theta & \cos \theta\end{bmatrix}\).

Line

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct Line{
Point a,b;
double len(){
return dist(a,b);//计算线段长度,直线和射线基本没用
}
};
bool onl0(const Point &A,const Line &L){
return sign((A-L.a)^(A-L.b))==0;
}//判断点是否在直线上
bool onl2(const Point &A,const Line &L){
return (sign((A-L.a)^(A-L.b))==0)&&
(sign(A.x-std::min(L.a.x,L.b.x))>=0)&&
(sign(A.x-std::max(L.a.x,L.b.x))>=0)&&
(sign(A.y-std::min(L.a.y,L.b.y))>=0)&&
(sign(A.y-std::max(L.a.y,L.b.y))<=0);

}//判断点是否在线段上

用来维护直线/射线/线段的基本信息.

判断线段相交

1
2
3
4
5
6
7
8
9
bool isinter(const Line &L1,const Line &L2){
if(std::max(L1.a.x,L1.b.x)<std::min(L2.a.x,L2.b.x))return 0;
if(std::max(L2.a.x,L2.b.x)<std::min(L1.a.x,L1.b.x))return 0;
if(std::max(L1.a.y,L1.b.y)<std::min(L2.a.y,L2.b.y))return 0;
if(std::max(L2.a.y,L2.b.y)<std::min(L1.a.y,L1.b.y))return 0;
if(((L1.a-L2.b)^(L2.a-L2.b))*((L1.b-L2.b)^(L2.a-L2.b))<0)return 0;
if(((L2.a-L1.b)^(L1.a-L1.b))*((L2.b-L1.b)^(L1.a-L1.b))<0)return 0;
return 1;
}

前四行被称为快速排斥实验,后两行被称为跨立实验,也就是相交的两线段,对于其中一个线段而言,它的两个端点必然在另一个线段的两侧.但我们注意到共线线段也会通过跨立实验,因此拿快速排斥实验来判掉这种情况.

注意,线段交点不同于直线交点,两条共线的交点是有可能在端点上的.这个需要特判一下.

当然一般判断线段是否相交可以直接求直线交点,然后判断在不在线段上.

求直线交点

1
2
3
4
5
Point inter(const Line &L1,const Line &L2){
double ls=(L1.b-L1.a)^(L2.a-L1.a);
double rs=(L1.b-L1.a)^(L2.b-L1.a);
return L2.a+(L2.b-L2.a)*ls/(ls-rs);
}

原理在于,画一下\(x_{ L_1 } , x_{ L_2 } , y_{ L_1 } , y_{ L_2 }\)围成的四边形,计算面积后用等高不等底计算.注意\(ls\)\(rs\)所代表的面积一正一负(不一定谁是正),因此需要减一下.

点到线的最短距离

1
2
3
4
5
6
7
8
inline double disl0(const Point &A,const Line &L){
return myabs(((L.a-A)^(L.b-A))/dis(L.a,L.b));
}
inline double disl2(const Point &A,const Line &L){
if(sign((A-L.a)*(L.b-L.a))<0)return dist(A,L.a);
if(sign((A-L.b)*(L.a-L.b))<0)return dist(A,L.b);
return disl0(A,L);
}

直线好做,直接算垂线段长度,用面积除以底长.

线段用点积判一下夹角即可.

凸多边形面积

利用叉乘,任取平面上一点\(O\),则\(S = \frac{ 1 }{ 2 } \sum_{ i = 1 }^n \overrightarrow{ OP_i } \times \overrightarrow{ OP_{ i + 1 } }\).证明的话考虑分\(O\)在内部和\(O\)在外部两种情况分类讨论.注意此时的\(P\)必须逆时针排列.

另外有皮克定理:在一个平面直角坐标系内,以整点为顶点的简单多边形(任两边不交叉),它内部整点数为\(a\),它的边上(包括顶点)的整点数为\(b\),则它的面积\(S = a + \frac{ b }{ 2 } - 1\).

基本算法

排序算法

极角排序

定义原点\(O\)并建立坐标系,所有点按照和\(O\)所连直线与\(x\)轴正方向的夹角排序.

极角排序通常使用叉乘来实现,因为叉乘可以快速计算两个向量的方向.但是注意到需要先判断象限,再判断叉乘.

1
2
3
4
5
6
7
8
bool cmp(Point A,Point B){//判断A能否在B前面
A=A-O,B=B-O;//O=(0,0)的时候可以省略
if(A.qua()!=B.qua()){
return A.qua()<B.qua();
}
if(sign(A^B)==0)return A.x<B.x;
return sign(B^A)==1;
}
水平序排序
1
2
3
4
bool cmp(Point A,Point B){
if(sign(A.x-B.x)==0)return sign(A.y-B.y)==-1;
return sign(A.x-B.x)==-1;
}

也就是\(x\)相同比\(y\),否则比\(x\).

二维凸包

定义

包住平面上某个点集的周长最小的简单多边形,一定是凸多边形.

实现

用水平序排序,然后从左往右扫一遍得到上凸壳,从右往左扫一遍得到下凸壳.

用一下以下函数:

1
2
3
4
5
6
inline bool anticlock(const Point &A,const Point &B,const Point &C){
return sign((A-B)^(B-C))==-1;
}
inline bool isline(const Point &A,const Point &B,const Point &C){
return sign((A-B)^(B-C))==0;
}

前者判断是否\(ABC\)三点是一个上凸的(注意\(ABC\)三点横坐标应该不降).后者判断三点共线.

旋转卡壳

定义

定义凸包上的对踵点对,也就是拿两条平行直线卡着凸包转,这两条直线会卡住凸包的两个点,这些点对组成的集合就是对踵点对集合.

实现

逆时针枚举边,然后看对面有什么被卡住了.由于凸包的凸性,在边逆时针转的时候,另一边的对踵点也会逆时针转.只要找到距离这条边所在直线最远的点即可.但这样的点可能有俩.可以简单特判,也可以加上微小随机扰动量使得这种情况可以忽略.

闵可夫斯基和

一般只讨论凸包的闵可夫斯基和.

定义

两个区域\(A , B\)的闵可夫斯基和定义为\(\{ a + b \mid a \in A , b \in B \}\).

实现

事实上,新的区域所形成的凸包,一定是原本\(A , B\)的凸包的边按照某种顺序连接起来得到的结果.

我们考虑旋转一下\(A , B\),使得\(B\)有一条边成为最右边的直上直下的一条边,然后考虑答案区域的最右边的边,这条边一定是\(B\)这个边加上\(A\)的最右边的点.这样这条边必定还在最终的凸包上.就算\(A\)最右边的是一条边,你也会发现最终的凸包最右边也一定是由\(A\)的这条边和\(B\)的这条边拼起来的.

显然,逆时针转一遍整个凸壳,将每条边改为向量(按照逆时针转的方向)然后极角排序,最后顺次链接就是答案.

半平面交

定义

定义半平面为满足\(ax + by + c > 0\)\(ax + by + c \geq 0\)的点对\(( x , y )\)组成的集合,感性理解就是一条直线的一侧.

实现

首先直线不好描述左右侧,我们把直线改成向量,这样方便描述左右侧.并不妨假设所有的向量所表示的半平面在向量的左侧.如果两条向量方向相同,则取更靠左的那一条,也就是所在直线截距更大的那个,另一个直接删了就是了.当然你不想删可以把那个废物放前面,这样根据下面的操作过程中它会被弹掉.

我们这么实现:按照上面的顺序一个一个插入,维护一个单调队列.如果前两条向量的交点不在当前这条向量的控制范围,不难发现上一条向量是废物,弹掉它.这样做到最后,队首和队尾可能都有一些废物向量,把它们判掉弹掉即可.

三维计算几何

这一部分知识点比较困难,而几乎用不到,因此只讲简单知识点,就当是高中立体几何知识补档!

基本概念

直线

使用直线的方向向量\(\vec{ s } = ( n , m , p )\)和直线上一点\(M_0 = ( x_0 , y_0 , z_0 )\).那么方程显然为:

\[ \frac{ x - x_0 }{ n } = \frac{ y - y_0 }{ m } = \frac{ z - z_0 }{ p } \]

如果换元,我们还有参数方程:

\[ \begin{cases} x = x_0 + nt \\ y = y_0 + mt \\ z = z_0 + pt \end{cases} \]

平面

使用平面上的一点\(P_0 ( x_0 , y_0 , z_0 )\)和该平面的法向量\(\vec{ n }\)来表示一个平面,不妨设\(\vec{ n } = ( A , B , C )\),则该平面的方程显然为:

\[ A ( x - x_0 ) + B ( y - y_0 ) + C ( z - z_0 ) = 0 \]

如果我们令\(D = - ( Ax_0 + By_0 + Cz_)\),那么平面方程为:

\[ Ax + By + Cz + D = 0 \]

夹角

两直线夹角.

直接求方向向量的夹角,然后取正值.

对于方向向量分别是\(\vec{ s_1 } = ( n_1 , m_1 , p_1 ) , \vec{ s_2 } = ( n_2 , m_2 , p_2 )\),也就有\(\varphi = \arccos ( \frac{ | \vec{ s }_1 \cdot \vec{ s }_2 | }{ | \vec{ s }_1 | | \vec{ s }_2 | } ) \\\).

直线与平面的夹角

同样使用向量,不妨设方向向量\(\vec{ s } = ( n , m , p )\),法向量\(\vec{ f } = ( a , b , c )\),那么\(\varphi = \arcsin ( \frac{ | \vec{ s } \cdot \vec{ f } | }{ | \vec{ s } | | \vec{ f } | } )\).

另外,由上面这个式子,不难得到一些特殊情况下的判定标准:

  1. 若直线与平面平行,则\(am + bn + cp = 0\).

  2. 若直线与平面垂直,则\(\frac{ a }{ m } = \frac{ b }{ n } = \frac{ c }{ p }\).注意这里分母可能除以\(0\),我们实际上应该是三个形如\(a = mt\)的参数方程,这里简化了.

交点

联立方程硬解.

基本定理

参考:https://zhuanlan.zhihu.com/p/401766934

三余弦定理(最小角定理)

这个定理说明直线与平面的夹角,是所有包含直线的平面与这个平面形成的夹角中最小的那一个.并且偏移量决定了差距.

三正弦定理(最大角定理)

这个定理说明二面角是另一个平面上的直线与平面的夹角中最大的那个,并且偏移量决定了差距.

基础集合论

映射

\(A , B\)为两个集合,\(\varphi\)称为从\(A\)\(B\)的一个映射,如果对于任意\(a \in A\),\(\exists b \in B , b = \varphi ( a )\).此时\(b\)称为\(a\)\(\varphi\)下的像,\(a\)称为\(b\)\(\varphi\)下的原像或反像.一般地,这个定义可以拓展到\(S \subseteq A\),\(\varphi ( S ) = \{ \varphi ( a ) \mid a \in S \}\),定义\(\varphi^{ - 1 } ( T ) = \{ a | \varphi ( a ) \in T , a \in S \}\).

如果\(\forall a_1 , a_2 \in A , a_1 \ne a_2 , \varphi ( a_1 ) \ne \varphi ( a_2 )\),称\(\varphi\)单射.

如果\(\forall b \in B , \exists a \in A , \varphi ( a ) = b\).称\(\varphi\)满射.

如果\(\varphi\)既是单射又是满射,称其为双射一一映射.

如果\(A = B\),我们又称\(\varphi\)为一个变换.

\(f : A \rightarrow B , g : B \rightarrow A\),那么:

  1. 如果\(g \circ f = id_A\),称\(g\)\(f\)的一个左逆,不难发现\(f\)存在左逆当且仅当\(f\)是单射.

  2. 如果\(f \circ g = id_B\),称\(g\)\(f\)的一个右逆,不难发现\(f\)存在右逆当且仅当\(f\)是满射.

  3. 如果\(g\)既是\(f\)的左逆又是\(f\)的右逆,则称\(g\)\(f\),不难发现\(f\)存在逆当且仅当\(f\)是双射,并且逆唯一.

二元运算与二元关系

集合\(A , B\)笛卡尔积直积是指\(A\)的元素与\(B\)的元素构成的有序对的集合,即\(A \times B = \{ ( a , b ) \mid a \in A , b \in B \}\).可以推广到多元对.

集合\(A\)上的一个二元运算是由\(A \times A\)\(A\)的一个映射.对于定义在\(U\)上的一个二元运算,不妨用\(+\)来表示,集合\(A , B \subseteq U\)闵可夫斯基和定义为\(A + B = \{ a + b \mid a \in A , b \in B \}\).OI中常见的如取背包等算法,其实就是在做闵和后去除或合并若干点.

集合\(A\)上的一个二元关系\(R\)定义为\(A \times A\)的一个子集(可以理解为满足二元关系的解集),如果\(( a_1 , a_2 ) \in R\),就称\(a_1 , a_2\)有关系\(R\),记作\(a_1 Ra_2\),注意这里有序.

如果\(R\)满足以下三个性质:

  1. 反身性:\(\forall a \in A , aRa\).

  2. 对称性:\(a_1 Ra_2 \Leftrightarrow a_2 Ra_1\).

  3. 传递性:\(a_1 Ra_2 , a_2 Ra_3 \Leftrightarrow a_1 Ra_3\).

则称\(R\)是一个等价关系,不难发现满足等价关系的元素构成了若干个集合,称作等价类.等价关系通常记作\(\sim\).

如果将等价关系的(2)改作:

  1. 反对称性:\(a_1 Ra_2 , a_2 Ra_1 \Leftrightarrow a_1 = a_2\).

则称\(R\)是一个偏序关系,具有某种偏序关系的集合称为偏序集,如果任意两个元素都存在偏序关系,称作全序集.如果一个全序集的任意一个子集存在最小元,则称其为良序集.

偏序关系通常记作\(\leq\).

保序映射

对于映射\(f : A \rightarrow B\),如果\(\forall a , a ' \in A , a \leq a ' \Rightarrow f ( a ) \leq f ( a ' )\),则称其为保序的.

Dilworth定理

对于偏序集\(( A , R )\)来说,定义:

  1. 链:\(A ' \subseteq A , \forall x , y \in A ' , [ xRy \lor yRx ] = 1\).

  2. 反链:\(A ' \subseteq A , \forall x , y \in A ' , [ xRy \lor yRx ] = 0\).

  3. 链覆盖:挑出最少数量的链,使得其可重复覆盖了所有点.

Dilworth定理是说:一个偏序集的最长反链等于最小链覆盖.

考虑数学归纳,\(| A | \leq 3\)显然成立.

\(| A | > 3\)时,如果存在一个点和其它任何点都没有偏序关系,那显然把它删掉就可以数学归纳.

反之,设其最长反链数为\(d\),下面证明其最小链覆盖也是\(d\).

考虑取一条尽可能长的链\(A '\),设其中最大的为\(M\),最小的为\(m\)(如果有多个就任取一个).

考虑\(T = A \setminus A '\),如果\(T\)中的最长反链数小于\(d\),则数学归纳成立.

反之,则一定可以取出一个反链\(S\),使得\(S \cap A ' = \emptyset\).考虑设\(A^{ + } = \{ x | x \in A \land \exists s \in S , sRx \}\),\(A^{ - } = \{ x | x \in A \land \exists s \in S , xRs \}\).不难发现\(m\)一定不在\(| A^{ + } |\)中,不然取出的那条链\(A '\)可以更长.同理\(M\)一定不在\(| A^{ - } |\)中,也即\(| A^+ | , | A^- | < | A |\).

我们又发现\(A^+ \cup A^- = A\),原因是如果一个点不在这两个集合中,一定可以添加到最长反链中.

我们还发现由于偏序关系的反身性,\(S \subseteq A^{ + } \cap A^{ - }\).

由数学归纳,\(A^+\)\(A^-\)中的最小链覆盖均为\(d\),并且一个以\(S\)中元素开头,一个以\(S\)中元素结尾,我们把它俩拼起来就是一个大小为\(d\)的新的大小为\(d\)的链覆盖.而且显然不会有更优的结果了.

商集

考虑定义一种等价关系\(\sim\),我们可以在此基础上定义商集\(A / \sim = \{ [ a ] | a \in A \}\),其中\([ a ]\)\(a\)所在的等价类.

商群有一个很漂亮的应用是,通过\(\mathbb{ N }\)来定义\(\mathbb{ Z }\).(默认加法和乘法都存在幺元,结合律,消去律,交换律,分配律)

这个是怎么做呢?考虑定义一种等价关系\(\sim\),\(( n , m ) \sim ( n ' , m ' )\)当且仅当\(n + m ' = m + n '\).虽然我们手上没有加法逆元和乘法逆元,但我们有加法和乘法的消去律,这样可以验证该等价关系满足反身性,传递性,对称性.

然后我们将\(\mathbb{ N } / \sim\)定义为整数,更确切地,对于任意一组\(( n , m )\)其代表的就是\(n - m\)这个整数.

容易定义加法:\(( n , m ) + ( n ' , m ' ) = ( n + n ' , m + m ' )\),乘法\(( n , m ) \times ( n ' , m ' ) = ( mm ' + nn ' , mn ' + m ' n )\).也可以定义大小关系\(( n , m ) \leq ( n ' , m ' ) \Leftrightarrow n + m ' \leq m + n '\).

不过由于我们定义的是等价类,所以还要证明这样的定义是良定义的,这个是容易验证的.

还有相反数,定义\(- ( n , m ) = ( m , n )\)即可,容易验证二者之和处于\(( 0 , 0 )\)这个等价类,也容易验证相反数唯一.

同理可以用\(\mathbb{ Z }\)构造\(\mathbb{ Q }\),构造二元组\(\mathbb{ Z } \times \mathbb{ N }_+\),定义\(( r , s ) \sim ( r ' , s ' ) \Leftrightarrow rs ' = r ' s\),容易验证其满足等价关系的性质.实际上其对应的就是\(\frac{ r }{ s }\)这个有理数,对着构造四则运算即可.

ZFC公理体系

外延公理

\(A = B \Leftrightarrow ( A \subset B ) \land ( B \subset A )\).

配对公理

对于任意元素\(a , b\),存在集合\(\{ a , b \}\).特别地,当\(a = b\)的时候存在集合\(\{ a \}\).

值得一提的是可以将数对\(( a , b )\)定义为\(\{ \{ a \} , \{ a , b \} \}\),下面的幂集公理说明了数对属于\(2^{ 2^{ A \cup B } } , a \in A , b \in B\).

分离公理(模式)

对于一个集合\(A\),和一个性质\(P\),若\(\alpha\)满足性质\(P\)则称\(P ( \alpha )\).那么存在集合:

\[ \{ x | x \in A \land P ( x ) \} \]

注意全体集合并不构成集合(ZFC公理体系不提供一种方式生成全体集合的集合),因此分离公理避免了罗素悖论.

之所以称为模式,是因为其对于每个性质\(P\)都构造了相应的公理.

并集公理

允许将集合取并.

幂集公理

一个集合的所有子集构成一个新的集合(可以记作\(2^A\)).

无穷公理

称满足以下性质的集合为归纳集:

  1. \(\emptyset \in A\).

  2. \(\alpha \in A\),则\(\{ \alpha \} \cup \alpha \in A\).

则归纳集存在.

替换公理(模式)

对于集合\(A\)和一种定义在集合\(A\)上的映射\(F\),存在集合\(A '\)使得\(x \in A ' \Leftrightarrow x = F ( a ) , a \in A\).

用替换公理可以证明映射也是一种集合,并且从\(A \rightarrow B\)的所有映射可以构成集合,可以记作\(B^A\).

正则公理

对任何非空集合\(A\),存在\(a \in A\)使得\(\forall a ' \in A\),\(a ' \notin a\),也就是\(a \cap A = \emptyset\).

选择公理

说对于任何一族非空集\(A\),总能从其中的每个集合\(a\)选出一个元素.

选择公理独立于其它的集合公理,一些数学家好像还不愿意承认选择公理.

选择公理等价于另外两个命题:Zorn引理和良序定理.

Zorn引理

如果\(X\)上的一个偏序关系\(\leq\),满足其每条链\(A\)都存在上界(\(\exists x \in X , \forall a \in A , x \geq a\)),那么\(X\)存在极大元\(( \exists x \in X , \forall a \in X , a \geq x \Rightarrow a = x )\).

Zorn引理可以证明选择公理,简单来说就是定义偏序关系\(( A ' ' , g ' ' ) \leq ( A ' , g ' )\)当且仅当\(A ' ' \subseteq A '\)并且\(\forall x \in A ' ' , g ' ' ( x ) = g ' ( x )\).这样拿出来的极大元就是我们需要的\(A \rightarrow g ( A )\).

良序定理

所有的集合都可以被良序排列,或者说都存在一种偏序,使得其任意子集都是良序集.

良序定理的证明要用的Zorn引理,即考虑所有的二元对\(( S , R )\)组成的集合,其中满足\(S\)对于偏序关系\(R\)来说是良序的,我们定义两个二元对\(a , b\)满足\(a \leq b\)当且仅当它们的\(R\)相等并且\(S_a \subseteq S_b\).现在取出一个全序的子集并找到其中最大的集合(也就是其它所有集合的并)\(( S , R )\),注意到如果\(S\)是全集则证毕,如果不是,则取一个全集中不在\(S\)的元素\(x\)接到\(S\)的后面得到了一个更大的集合,这就产生了矛盾,具体细节过程可以参考下面关于集合基数的全序性的证明.

良序定理可以证明选择公理,因为只需每个集合选最小的元素再用替换公理模式换掉就行了.

集合的基数

如果存在单射\(\varphi : A \rightarrow B\),则称\(| A | \leq | B |\).如果存在双射,则称\(| A | = | B |\).

如果使用选择公理的话,可以说明如果存在满射\(\varphi : A \rightarrow B\),则称\(| A | \geq | B |\).

值得一提的是这种偏序关系是全序的,这个怎么证明呢?

考虑现在有\(A , B\)两个集合,接下来我们证明一定存在一个从\(A\)\(B\)的映射,且其要么为单射要么为满射.

我们记\(X\)为所有\(A\)的子集到\(B\)的单射组成的集合,并且我们定义这样一种偏序关系:若\(f : A_f \rightarrow B , g : A_g \rightarrow B , A_f \subseteq A_g , \forall a \in A_f , f ( a ) = g ( a )\).

这样的话,我们不妨取出\(X\)的一个全序的子集\(I\),显然其存在上界.

根据Zorn引理,\(X\)存在极大元\(g : A_g \rightarrow B\),此时我们开始讨论:

如果\(A_g = A\),那么找到了一个单射\(g : A \rightarrow B\).

反之,如果\(A_g \subsetneq A\),考虑如果\(g ( A_g ) = B\),也就是找到了一个满射;反之,考虑取\(a ' \in A \setminus A_g , b ' \in B \setminus g ( A_g )\),在\(g\)的基础上加上映射\(a ' \mapsto b '\),这是一个比\(g\)还要大的元,不符合Zorn引理.

Cantor-Bernstein定理

如果\(| A | \leq | B | \land | B | \leq | A |\),则\(| A | = | B |\).

不妨设\(f : A \rightarrow B , g : B \rightarrow A\)我们考虑一个感性的做法:考虑将这个东西画成二分图,然后要找它的完美匹配.我们不妨先把不同的连通块拆开,你会发现大部分的图都可以用\(f , f^{ - 1 }\)来构造双射,只有一种除外:那就是以一个\(B\)中节点开始不断延伸的无限的,我们在这里使用\(g , g^{ - 1 }\)来构造即可.

如果要把上面的东西写成形式化的东西,我们可以这么写:取\(C_0 = B \setminus f ( A )\),\(C_n = f ( g ( C_{ n - 1 } ) )\),那么对于\(C = \cup_{ n \geq 0 } C_n\),使用\(g , g^{ - 1 }\)构造双射,剩下的使用\(f , f^{ - 1 }\)构造双射.

可数无穷与不可数无穷

我们称集合\(A\)可数的,当且仅当\(| A | = | \mathbb{ N } |\).

我们可以发现可数个可数集合的并一定可数,因为你可以把这些位置全排列起来然后绕着数.

这样就可以发现,首先整系数多项式方程有可数个,因此整系数多项式方程的根也有可数个,我们将这些数称作代数数,其它实数称为超越数.

这又有一个结论是说,代数数对四则运算构成域.

首先一个代数数的加法逆元和乘法逆元(只要不是\(0\))肯定一定是代数数,你只需要对着原方程改一改就可以构造出新方程.

幺元肯定也是存在的,因为\(1\)\(0\)显然都是代数数.

我们接下来看两个代数数\(x , y\).考虑如何构造\(x + y\)作为根的方程.

下面是qyc老师给的做法,直接考虑有方程:

\[ \begin{aligned} X & = \sum_{ k = 0 }^n a_k x^k = 0 \\ Y & = \sum_{ k = 0 }^m b_k y^k = 0 \end{aligned} \]

对于加法,考虑:\(( x + y )^0 , ( x + y )^1 , \cdots\),这些东西,先把它们对\(X\)取膜再对\(Y\)取膜,得到的一定是\(nm\)维的,只需要取\(nm + 1\)个就会出现线性相关.乘法同理考虑\(( xy )^0 , ( xy )^1 , \cdots\)即可.

值得一提的是,\(| \mathbb{ R } | = 2^{ | \mathbb{ N } | }\).这个是怎么构造的呢?只需要证明\([ 0 , 1 ]\)上的实数和自然数集合能一一对应就可以了对吧,考虑将这些实数写成二进制下的形式,然后如果\(k\)在取出的自然数子集中,那么小数点后第\(k + 1\)位为\(1\)否则为\(0\),这样就构造了一组映射.

不过其实这样做有一点小问题,那就是\(0 . 1 = 0 . 0111 \cdots\),但这两个数字对应的集合并不相等.然而会出问题的点的个数是可数无穷个,因此其实差一下也没什么问题.如果或者可以反复来一下证明\(| \mathbb{ R } | \leq 2^{ | \mathbb{ N } | }\)并且\(| \mathbb{ R } | \geq 2^{ | \mathbb{ N } | }\),用上面的构造就行.

简单范畴论

范畴

一个范畴\(\mathcal{ C }\)应当包含以下:

  1. 一个类\(\rm{ Ob } ( \mathcal{ C } )\),其元素称作\(\mathcal{ C }\)对象.

  2. 对于\(X , Y \in \rm{ Ob } ( \mathcal{ C } )\)指定一个集合\(\text{ Hom }_{ \mathcal{ C } } ( X , Y )\),称作\(\mathcal{ C }\)中从\(X\)\(Y\)态射.

对于态射来说,其还应当具有以下特点:

  1. 对于\(X \in \text{ Ob } ( \mathcal{ C } )\)存在其到自身的恒等态射\(\text{ id }_X \in \text{ Hom }_{ \mathcal{ C } } ( X , X )\).

  2. 态射间可以进行合成,换言之存在合成映射\(\circ : \text{ Hom }_{ \mathcal{ C } } ( Y , Z ) \times \text{ Hom }_{ \mathcal{ C } } ( X , Y ) \to \text{ Hom }_{ \mathcal{ C } } ( X , Z ) , ( g , f ) \mapsto g \circ f\).

另外,合成映射还应当满足:

  1. 结合律:对于\(\mathcal{ C }\)中的态射\(h , g , f\),如果合成有意义,那么\(h ( gf ) = ( hg ) f\).

  2. 单位元:对于\(f \in \text{ Hom }_{ \mathcal{ C } } ( X , Y )\),\(f \circ \text{ id }_X = f = \text{ id }_Y \circ f\).

由上得知恒等态射的唯一性,因为如果存在两种恒等态射,必定有\(\text{ id }_X = \text{ id }_X \text{ id ' }_X = \text{ id ' }_X\).

在此基础上可以定义所谓交换图表,意味着态射的合成是所谓殊途同归的.例如,如果下面这个图表是交换的:

\[ \xymatrix{ R \ar[r]^u \ar[d]_x & S \ar[d]^v \\ T \ar[r]_y & U } \]

这意味着\(yx = vu\).

必须要指出的是,我们这里范畴所包含的对象并不是单指某一特定元素,而也有可能是某一数学结构(例如集合).

特别地,如果:

  1. 如果对于\(f \in \text{ Hom } ( X , Y )\),\(\exists g \in \text{ Hom } ( Y , X )\)使得\(gf = \text{ id }_X\),那么称\(g\)\(f\)的一个左逆,称\(f\)左可逆的或者是单态射.同理可以定义右逆以及所谓满态射.

  2. 如果\(f\)左右均可逆,易见左右逆相等,记作\(f^{ - 1 }\),易见\(f^{ - 1 }\)可逆而且\(( f^{ - 1 } )^{ - 1 } = f\).此时称\(f\)同构的.

同构还有以下性质:

  1. \(( \text{ id }_X )^{ - 1 } = \text{ id }_X\).

  2. 如果\(f\)\(g\)均为同构并且合成有意义,那么\(gf\)是同构并且\(( gf )^{ - 1 } = f^{ - 1 } g^{ - 1 }\).

于是在此基础上追加定义:

  1. 自同态幺半群:\(\text{ End }_{ \mathcal{ C } } ( X ) = \text{ Hom }_{ \mathcal{ C } } ( X , X )\).

  2. 自同构群:\(\text{ Aut }_{ \mathcal{ C } } ( X ) = ( \text{ End }_{ \mathcal{ C } } ( X ) )^\times\).

如此起名的原因是由抽象代数知识见到\(\text{ End }\)对二元运算\(\circ\)构成幺半群,\(\text{ Aut }\)则构成群.

我们还可以定义所谓子范畴.称\(\mathcal{ C } '\)\(\mathcal{ C }\)的子范畴当且仅当:

  1. \(\text{ Ob } ( \mathcal{ C } ' ) \subseteq \text{ Ob } ( \mathcal{ C } )\).

  2. \(\forall X , Y \in \text{ Ob } ( \mathcal{ C } ' )\)都有\(\text{ Hom }_{ \mathcal{ C } ' } ( X , Y ) \subseteq \text{ Hom }_{ \mathcal{ C } } ( X , Y )\).

  3. \(\forall X \in \text{ Ob } ( \mathcal{ C } ' )\),\(\text{ id }_X = \text{ id }_X '\).

  4. 态射在\(\mathcal{ C } '\)中的合成运算应从\(\mathcal{ C }\)中继承而来.

特别地,如果\(\forall X , Y \in \text{ Ob } ( \mathcal{ C } ' ) , \text{ Hom } ( X , Y )_{ \mathcal{ C } ' } = \text{ Hom }_{ \mathcal{ C } } ( X , Y )\),则称\(\mathcal{ C } '\)\(\mathcal{ C }\)的一个全子范畴.

泛性质初步

如果\(\mathcal{ C }\)是一个范畴,其中有一个元素\(X \in \mathrm{ Ob } ( \mathcal{ C } )\),如果\(\forall Y \in \mathrm{ Ob } ({ \mathcal{ C } } )\),\(| \mathrm{ Hom }_{ \mathcal{ C } } ( X , Y ) | = 1\),则称它是始(initial)的.类似地,如果对于\(Y \in \mathrm{ Ob } ( \mathcal{ C } )\),\(\forall X \in \mathrm{ Ob } ( \mathcal{ C } )\),\(| \mathrm{ Hom }_{ \mathcal{ C } } ( X , Y ) | = 1\),则称\(Y\)是终(terminal)的.

现在我们有以下结论:

  1. 如果\(X , X ' \in \mathrm{ Ob } ( \mathcal{ C } )\)都是initial的,则存在一个唯一的同构\(a : X \cong X '\).

  2. 如果\(Y , Y ' \in \mathrm{ Ob } ( \mathcal{ C } )\)都是terminal的,则存在一个唯一的同构\(b : Y \cong Y '\).

二者均是显然的,请自行检验.

这个结论是泛性质方法的基础.

函子

我们定义从\(\mathcal{ C } '\)\(\mathcal{ C }\)函子\(F\)需要有以下性质:

  1. \(\forall X \in \text{ Ob } ( \mathcal{ C } ' )\),指定一个\(\mathcal{ C }\)中的对象\(FX\).或记作\(F : \text{ Ob } ( \mathcal{ C } ' ) \to \text{ Ob } ( \mathcal{ C } )\).

  2. \(\forall X , Y \in \text{ Ob } ( \mathcal{ C } ' )\),对于态射\(f : X \to Y\)指定一个\(\mathcal{ C }\)中的对象\(Ff\).或记作\(F : \text{ Hom }_\mathcal{ C } ' ( X , Y ) \to \text{ Hom }_\mathcal{ C } ( FX , FY )\).

上述对态射的函子还应当满足以下性质:

  1. \(\forall g , f \in \text{ Hom }_{ \mathcal{ C } ' }\),它们的合成有意义,则\(F ( gf ) = F ( g ) F ( f )\).

  2. \(\forall X \in \text{ Ob } ( \mathcal{ C } ' )\),\(F ( \text{ id }_X ) = \text{ id }_{ FX }\).

我们一般也将上述函子记作\(F : \mathcal{ C } ' \to \mathcal{ C }\).这当然意味着函子是可以合成的并仍然满足结合律.

既然\(F\)可以在某种程度上看作映射,我们当然还可以引出以下定义:

  1. 如果\(\forall T \in \text{ Ob } ( \mathcal{ C } ) , \exists X \in \text{ Ob } ( \mathcal{ C } ' )\)使得\(T \cong FX\),则称\(F\)本质满的.

  2. 如果\(\forall X , Y \in \text{ Ob } ( \mathcal{ C } ' )\),\(F : \text{ Hom }_{ \mathcal{ C } ' } ( X , Y ) \to \text{ Hom }_{ \mathcal{ C } } ( FX , FY )\)均为单射,则称\(F\)忠实的.如果均为满射,则称其为的.如果均为双射,则称其为全忠实的.

回忆到Haskell语言中对函子的定义:

1
2
3
4
5
6
class Functor f where
fmap :: (a->b)->f a-> f b
(<$) :: b -> f a -> f b
(<$) = fmap.const
(<$>) :: Functor f => (a->b)->f a -> f b
(<$>) = fmap

回忆到Haskell语言中对函子的要求:

1
2
fmap id == id
fmap (f.g)==(fmap f).(fmap g)

容易见到其类似性.

函子的类型很多,比如最平凡的一类函子是所谓忘却函子.但我们在这里着重提所谓\(\text{ Hom }\)函子,其是Haskell语言中Curring化的基础:

对于范畴\(\mathcal{ C }\)以及其对象\(X\),我们定义函子\(\text{ Hom }_{ \mathcal{ C } } ( X , \cdot ) : \mathcal{ C } \to Set\),它映对象\(Y\)为集合\(\text{ Hom }_{ \mathcal{ C } } ( X , Y )\),映态射\(f : Y \to Z\)为映射\(\text{ Hom }_{ \mathcal{ C } } ( X , \cdot ) f : \text{ Hom }_{ \mathcal{ C } } ( X , Y ) \to \text{ Hom }_{ \mathcal{ C } } ( X , Z ) , h \mapsto f \circ h\).

同理可以定义函子\(\text{ Hom }_{ \mathcal{ C } } ( \cdot , X )\).

对于函子\(\text{ Hom }_{ \mathcal{ C } } ( X , \cdot )\),我们可以一窥其在Haskell中的具体定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
instance Functor ((->) a) where
-- fmap :: (b->c)->(a->b)->(a->c)
fmap fbc fab = fbc.fab

instance Applicative ((->) a) where
-- pure :: c->(a->c)
-- <*> :: (a->(b->c))->(a->b)->(a->c)
pure tb = \ta -> tb
(<*>) fabc fab = \ta -> ((fmap (fabc ta) fab) ta)

instance Monad ((->) r) where
-- (>>=) :: (r->a)->(a->(r->b))->(r->b)
(>>=) fra farb = \tr -> ( farb (fra tr) tr )

范畴实例

Kleisli范畴

简单理解Kleisli范畴的话就是,我们被允许给一个元素进行如下的操作:

  1. 加上修饰.

  2. 合并修饰.

Kleisili范畴在Haskell里的具体表现就是Monad.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Functor f where
fmap :: (a -> b) -> f a -> f b
(<$) :: a -> f b -> f a
(<$) = fmap . const

class Functor f => Applicative f where
pure :: a -> f a
(<*>) :: f (a -> b) -> f a -> f b

class Applicative m => Monad m where
return :: a -> m a
return = pure
join :: m(m a)-> m a
(>>=) :: m a -> (a -> m b) -> m b
ma >>= f = join (fmap f ma)
(>>) :: m a -> m b -> m b
m >> k = m >>= \_ -> k

二项式系数

上升幂和下降幂

定义下降幂\(x^{ \underline{ k } } = \prod_{ i = 0 }^{ k - 1 } ( x - i ) = \frac{ x ! }{ ( x - k ) ! }\).

定义上升幂\(x^{ \overline{ k } } \prod_{ i = 0 }^{ k - 1 } ( x + i ) = \frac{ ( x + k - 1 ) ! }{ ( x - 1 ) ! }\).

上升幂和下降幂的定义是可以引申到复数域的.

例如我们有加倍公式:\(r^{ \underline{ k } } ( r - 0 . 5 )^{ \underline{ k } } = \cfrac{ ( 2 r )^{ \underline{ 2 k } } }{ 2^{ 2 k } } , k \in \mathbb{ N }\).

他们之间存在转换:\(x^{ \underline{ n } } = ( - 1 )^n ( - x )^{ \overline{ n } }\).

同时存在大小关系:\(x^{ \underline{ n } } \leq x^n \leq x^{ \overline{ n } }\),其中\(0 \leq n < x\).

二项式系数的定义

考虑令\(\binom{ n }{ m }\)表示从一个大小为\(n\)的子集中选出大小为\(m\)的子集的方案数.第一次有\(n\)个选择,第二次有\(n - 1\)个选择……第m次有\(n - m + 1\)个选择.而由于可能可以选择重复的,但一个排列被重复选择的次数显然是\(m !\),因此显然有\(\binom{ n }{ m } = \cfrac{ n^{ \underline{ m } } }{ m ! }\).

如果我们把它的定义拓展到复数域,我们有:

\(\binom{ r }{ k } = \begin{cases}\cfrac{ r^{ \underline{ k } } }{ k ! } & k \geq 0 \\ 0 & k < 0\end{cases} , r \in \mathbb{ C } , k \in \mathbb{ Z }\).

值得一提的是,如果我们这么定义,本质上其实是把\(\binom{ r }{ k }\)看作了一个关于\(r\)\(k\)次多项式.

另外根据定义,\(r \in \mathbb{ Z } \land r < k\)时,该公式给出\(0\).

值得一提的是,为了使二项式系数在面对\(0\)的时候更加简洁,通常直接定义\(0 ! = 1 , 0^0 = 1\).

另外不难发现\(\binom{ 2 n }{ n }\)是所有\(\binom{ 2 n }{ k }\)中最大的.事实上我们有Wallis公式:\(\lim_{ n \rightarrow \infty } \frac{ ( \frac{ 2^{ 2 n } }{ \binom{ 2 n }{ n } } )^2 }{ 2 n + 1 } = \frac{ \pi }{ 2 }\).

基本的二项式恒等式

  1. 阶乘展开式:\(\binom{ n }{ k } = \cfrac{ n ! }{ k ! ( n - k ) ! } , n , k \in \mathbb{ N } , n \geq k \\\).

证明根据定义是显然的.

  1. 对称恒等式:\(\binom{ n }{ k } = \binom{ n }{ n - k } , n \in \mathbb{ N } , k \in \mathbb{ Z } \\\).

根据\(( 1 )\),\(0 \leq k \leq n\)时是显然的.而其他情况两边都会给出\(0\),因此也是成立的.

  1. 吸收恒等式:\(\binom{ r }{ k } = \cfrac{ r }{ k } \binom{ r - 1 }{ k - 1 } , k \in \mathbb{ Z } \land k \ne 0 \\\).

证明根据定义是显然的.

  1. 吸收恒等式的变式:\(k \binom{ r }{ k } = r \binom{ r - 1 }{ k - 1 } , k \in \mathbb{ Z } \\\).

根据\(( 3 )\),只需要验证\(k = 0\)的情况即可,也是显然的.

  1. 相伴恒等式:\(( r - k ) \binom{ r }{ k } = r \binom{ r - 1 }{ k } , k \in \mathbb{ Z } \\\).

证明如下:

\[ \begin{aligned} ( r - k ) \binom{ r }{ k } & = ( r - k ) \binom{ r }{ r - k } \\ & = r \binom{ r - 1 }{ r - k - 1 } \\ & = r \binom{ r - 1 }{ k } \end{aligned} \]

问题在于:我们在上述描述中并未提到\(r\)的范围,但是推导过程要求\(r \in \mathbb{ N }\).不过,我们已经说明了二项式系数是关于\(r\)\(k\)次多项式,因此只需要有\(k + 1\)\(r\)满足这个公式即可.而根据推导过程显然有无限个\(r\)满足,因此这个公式对\(r \in \mathbb{ C }\)也是成立的.

不过事实上,直接用吸收恒等式就可以证明:

\[ \begin{aligned} k \binom{ r }{ k } & = r \binom{ r - 1 }{ k - 1 } \\ ( r - k ) \binom{ r }{ r - k } & = r \binom{ r - 1 }{ r - k - 1 } \\ ( r - k ) \binom{ r }{ k } & = r \binom{ r - 1 }{ k } \end{aligned} \]

  1. 加法公式:\(\binom{ r }{ k } = \binom{ r - 1 }{ k } + \binom{ r - 1 }{ k - 1 } , k \in \mathbb{ Z } \\\).

证明可以使用定义,也可以先用\(r \in \mathbb{ N }\)的情况给出组合意义,再使用多项式推理法证明.

  1. \(\binom{ r }{ m } \binom{ m }{ k } = \binom{ r }{ k } \binom{ r - k }{ m - k } , n , k \in \mathbb{ Z } \\\).

证明可以使用组合意义和多项式推理法.

  1. 平行求和法:\(\sum_{ k \leq n } \binom{ r + k }{ k } = \binom{ r + n + 1 }{ n } , n \in \mathbb{ N } \\\).

我们不妨考虑不断使用加法公式:

\(\binom{ r + n + 1 }{ n } = \binom{ r + n }{ n } + \binom{ r + n }{ n - 1 } = \binom{ r + n }{ n } + \binom{ r + n - 1 }{ n - 1 } + \binom{ r + n - 1 }{ n - 2 } = . . . \\\),最终下标会减成负数,这样后面的项就全都是\(0\)了.

也可以考虑组合意义:如果\(r \in \mathbb{ N }\),那么我们考虑从右到左第一个没有被选上的数,假设它是\(r + k + 1\),那么在它右边的数全部选择了,一共是\(n - k\)个数,而还需要在左边的\(r + k\)中选择\(k\)个数.

  1. 上指标求和法:\(\sum_{ 0 \leq k \leq n } \binom{ k }{ m } = \binom{ n + 1 }{ m + 1 } , n , m \in \mathbb{ N } \\\).

可以组合意义解释:我们不妨假设选的最大数是\(k + 1\),接下来就还需要在\([ 1 , k ]\)中选择\(m\)个.

如果我们将这个公式两边同时乘以\(m !\),我们可以得到公式:\(\sum_{ 0 \leq k \leq n } k^{ \underline{ m } } = \cfrac{ ( n + 1 )^{ \underline{ m + 1 } } }{ m + 1 } , n , m \in \mathbb{ N } \\\),这也就是有限微积分的公式中的一个.

  1. 二项式定理:\(( x + y )^r = \sum_{ k } \binom{ r }{ k } x^k y^{ r - k } , r \in \mathbb{ N } \\\).

可以使用组合意义证明.

二项式定理有一些有用的特殊情况:

$$ \[\begin{aligned} \sum_{ 0 \leq k \leq n } \binom{ n }{ k } & = 2^n , n \in \mathbb{ N } \\ \end{aligned}\]

$$

在二项式定理中令\(x = y = 1\)即可证明.

$$ \[\begin{aligned} \sum_{ 0 \leq k \leq n } ( - 1 )^k \binom{ n }{ k } & = 0^n = [ n = 0 ] , n \in \mathbb{ N } \\ \end{aligned}\]

$$

在二项式定理中令\(x = - 1 , y = 1\)即可证明,值得一提的是,当\(n = 0\)的时候这个式子给出\(1\),并在其他情况下给出\(0\),这个式子是二项式反演的基础.

  1. 三项式定理:\(( x + y + z )^n = \sum_{ 0 \leq a , b , c \leq n } [ a + b + c = n ] \cfrac{ n ! }{ a ! b ! c ! } x^a y^b z^c , n \in \mathbb{ N } \\\).

证明与二项式定理类似.值得一提的是,\(\cfrac{ n ! }{ a ! b ! c ! } = \binom{ n }{ b + c } \binom{ b + c }{ c }\).

  1. 多项式定理:\(( \sum_{ i = 1 }^m x_i )^n = \sum_{ \forall i \in [ 1 , m ] , 0 \leq a_i \leq n } [ \sum_{ i = 1 }^m a_i = n ] \cfrac{ n ! }{ \prod_{ i = 1 }^m a_i ! } \prod_{ i = 1 }^m x_i^{ a_i } , n \in \mathbb{ N } \\\).

证明与二项式定理类似.

  1. 范德蒙德卷积:\(\sum_{ k } \binom{ r }{ m + k } \binom{ s }{ n - k } = \binom{ r + s }{ n + m } , n , m \in \mathbb{ Z } \\\).

证明可以使用组合意义和多项式推理法.

另外,这个式子可以直接使用生成函数证明.

  1. 范德蒙德卷积的变式:\(\sum_{ k } \binom{ l }{ m + k } \binom{ s }{ n + k } = \binom{ l + s }{ l - m + n } , l \in \mathbb{ N } , n , m \in \mathbb{ Z } \\\).

\(\binom{ l }{ m + k } = \binom{ l }{ l - m - k }\),然后运用范德蒙德卷积即可得到答案.

  1. 上指标反转公式:\(\binom{ r }{ k } = ( - 1 )^k \binom{ k - r - 1 }{ k } \\\).

根据定义显然.

扩展的二项式恒等式(整数范围内)

  1. \(\sum_{ k \leq m } \binom{ r }{ k } ( - 1 )^k = ( - 1 )^m \binom{ r - 1 }{ m } , m \in \mathbb{ Z } \\\).

证明如下:

\[ \begin{aligned} \sum_{ k \leq m } \binom{ r }{ k } ( - 1 )^k & = \sum_{ k \leq m } \binom{ k - r - 1 }{ k } \\ & = \binom{ - r + m }{ m } = ( - 1 )^m \binom{ r - 1 }{ m } \end{aligned} \]

  1. \(\sum_{ - q \leq k \leq l } \binom{ l - k }{ m } \binom{ q + k }{ n } = \binom{ l + q + 1 }{ m + n + 1 } , n , m \in \mathbb{ N } , l + q \geq 0 \\\).

可以组合意义与多项式推理法证明.

  1. \(\sum_{ k } \binom{ a + b }{ a + k } \binom{ a + b }{ b + k } ( - 1 )^k = \binom{ a + b }{ a } , a , b \in \mathbb{ N } \\\).

可以数学归纳证明.

  1. \(\sum_{ k = 0 }^m \cfrac{ \binom{ m }{ k } }{ \binom{ n }{ k } } = \cfrac{ n + 1 }{ n + 1 - m } , n , m \in \mathbb{ N } , n \geq m \\\).

我们有\(\binom{ n }{ m } \binom{ m }{ k } = \binom{ n }{ k } \binom{ n - k }{ m - k } \\\),两边同时除以\(\binom{ n }{ m } \binom{ n - k }{ m - k } \\\),于是我们得到了\(\cfrac{ \binom{ m }{ k } }{ \binom{ n }{ k } } = \cfrac{ \binom{ n - k }{ m - k } }{ \binom{ n }{ m } } \\\).

有:

\[ \begin{aligned} \sum_{ k = 0 }^m \cfrac{ \binom{ m }{ k } }{ \binom{ n }{ k } } & = \sum_{ k = 0 }^m \cfrac{ \binom{ n - k }{ m - k } }{ \binom{ n }{ m } } \\ & = \cfrac{ 1 }{ \binom{ n }{ m } } \sum_{ k = 0 }^m \binom{ n - k }{ m - k } \\ & = \cfrac{ 1 }{ \binom{ n }{ m } } \sum_{ k = 0 }^m \binom{ n - m + k }{ k } \\ & = \cfrac{ \binom{ n + 1 }{ m } }{ \binom{ n }{ m } } \\ & = \cfrac{ n + 1 }{ n + 1 - m } \end{aligned} \]

  1. \(( - 1 )^m \binom{ - n - 1 }{ m } = ( - 1 )^n \binom{ - m - 1 }{ n } , n , m \in \mathbb{ N } \\\).

根据上指标反转公式,这个公式两边都等于\(\binom{ n + m }{ m } \\\).

  1. \(\sum_{ k \leq m } \binom{ r }{ k } ( \cfrac{ r }{ 2 } - k ) = \cfrac{ m + 1 }{ 2 } \binom{ r }{ m + 1 } , m \in \mathbb{ Z } \\\).

可以使用归纳法证明这个公式.

  1. \(\sum_{ k \leq m } \binom{ m + r }{ k } x^k y^{ m - k } = \sum_{ k \leq m } \binom{ - r }{ k } ( - x )^k ( x + y )^{ m - k } , m \in \mathbb{ Z } \\\).

不妨令左边的值为\(S_m\),我们有:

\[ \begin{aligned} S_m & = \sum_{ k \leq m } \binom{ m + r }{ k } x^k y^{ m - k } = \sum_{ k \leq m } \binom{ m + r - 1 }{ k } x^k y^{ m - k } + \sum_{ k \leq m } \binom{ m + r - 1 }{ k - 1 } x^k y^{ m - k } \\ & = y \sum_{ k < m } \binom{ m - 1 + r }{ k } x^k y^{ m - 1 - k } + \binom{ m + r - 1 }{ m } x^m + x \sum_{ k \leq m } \binom{ m + r - 1 }{ k - 1 } x^{ k - 1 } y^{ m - k } \\ & = ( x + y ) S_{ m - 1 } + \binom{ m + r - 1 }{ m } x^m \\ & = ( x + y ) S_{ m - 1 } + \binom{ r }{ m } ( - x )^m \end{aligned} \]

左右两边满足相同递归式,通过数学归纳法不难证明二者相等.

  1. \(\sum_{ k \leq m } \binom{ m + k }{ k } 2^{ - k } = 2^m , m \in \mathbb{ N } \\\).

考虑\(( 7 )\),将\(x = y = 1 , r = m + 1\)带入,得到:

\[ \begin{aligned} \sum_{ k \leq m } \binom{ 2 m + 1 }{ k } & = \sum_{ k \leq m } \binom{ m + k }{ k } 2^{ m - k } \\ 2^{ 2 m } & = \sum_{ k \leq m } \binom{ m + k }{ k } 2^{ m - k } \\ 2^m & = \sum_{ k \leq m } \binom{ m + k }{ k } 2^{ - k } \end{aligned} \]

  1. \(\sum_{ k } \binom{ l }{ m + k } \binom{ s + k }{ n } ( - 1 )^k = ( - 1 )^{ l + m } \binom{ s - m }{ n - l } , l \in \mathbb{ N } , n , m \in \mathbb{ Z } \\\).

可以数学归纳证明.

  1. \(\sum_{ k \leq l } \binom{ l - k }{ m } \binom{ s }{ k - n } ( - 1 )^k = ( - 1 )^{ l + m } \binom{ s - m - 1 }{ l - n - m } , l , n , m \in \mathbb{ N } \\\).

可以数学归纳证明.

拓展的二项式恒等式(实数范围内)

  1. \(\binom{ r }{ k } \binom{ r - \cfrac{ 1 }{ 2 } }{ k } = \cfrac{ \binom{ 2 r }{ 2 k } \binom{ 2 k }{ k } }{ 2^{ 2 k } } , k \in \mathbb{ Z } \\\).

将加倍公式两边同时除以\(k !^2\)即可得到这个公式.

  1. \(\binom{ n - \cfrac{ 1 }{ 2 } }{ n } = \cfrac{ \binom{ 2 n }{ n } }{ 2^{ 2 n } } , n \in \mathbb{ Z } \\\).

\(( 1 )\)中令\(r = k = n\)即可得到这个公式.

  1. \(\binom{ - \cfrac{ 1 }{ 2 } }{ n } = ( \cfrac{ - 1 }{ 4 } )^n \binom{ 2 n }{ n } , n \in \mathbb{ Z } \\\).

\(( 2 )\)的变形.

  1. \(\sum_{ k } \binom{ n }{ 2 k } \binom{ 2 k }{ k } 2^{ - 2 k } = \binom{ n - \cfrac{ 1 }{ 2 } }{ \lfloor \cfrac{ n }{ 2 } \rfloor } , n \in \mathbb{ N } \\\)

首先根据\(( 1 )\),左边\(= \sum_{ k } \binom{ \cfrac{ n }{ 2 } }{ k } \binom{ \cfrac{ n - 1 }{ 2 } }{ k } \\\),而考虑到\(\cfrac{ n }{ 2 }\)\(\cfrac{ n - 1 }{ 2 }\)必有一个是自然数,因此可以直接用范德蒙德卷积的变形.

  1. \(\sum_{ k } \binom{ - \cfrac{ 1 }{ 2 } }{ k } \binom{ - \cfrac{ 1 }{ 2 } }{ n - k } = ( - 1 )^n , n \in \mathbb{ N } \\\).

直接使用范德蒙德卷积即可证明.

  1. \(\sum_{ k } \binom{ 2 k }{ k } \binom{ 2 n - 2 k }{ n - k } = 4^n , n \in \mathbb{ N } \\\).

\(( 5 )\)\(( 3 )\)不难推出.

  1. \(\sum_{ k } \binom{ n }{ k } \cfrac{ ( - 1 )^k }{ x + k } = x^{ - 1 } \binom{ x + n }{ n }^{ - 1 } , x \notin \{ 0 , - 1 , . . . , - n \} \\\).

\(f ( x ) = ( x - 1 )^{ \underline{ - 1 } }\),直接做高阶差分即可得到这个式子.

  1. \(\sum_{ k = 0 }^n \binom{ r }{ k } \binom{ r }{ n - k } ( - 1 )^k = [ n \ is \ \mathrm{ even } ] ( - 1 )^{ \cfrac{ n }{ 2 } } \binom{ r }{ \cfrac{ n }{ 2 } } \\\).

首先不难发现,\(( 1 - z )^r = \sum_{ k \geq 0 } ( - 1 )^k \binom{ r }{ k } \\\).

考虑\(( 1 - z )^r ( 1 + z )^r = ( 1 - z^2 )^r\).

我们有\([ z^n ] ( 1 - z )^r ( 1 + z )^r = [ z^n ] ( 1 - z^2 )^r\),不难发现即上式.

卡特兰数

卡特兰数\(f_n\)表示:长度为\(2 n\)的合法括号序列个数.

卡特兰数的前几项为\(1 , 1 , 2 , 5 , 14 , 42 , 132 \cdots\).

接下来,我们通过这个定义来证明以下其他定义方式.

递归定义:\(f_n = \sum_{ i = 0 }^{ n - 1 } f_i f_{ n - 1 - i }\).

不妨考虑枚举一个括号序列的第一个断点,则该括号序列应形如\(( A ) B\).

考虑将其删成\(A\)\(B\),则\(A\)一定合法,因为若\(A\)不合法,那么这里一定不是第一个断点.

通项公式:\(f_n = \frac{ 1 }{ n + 1 } C_{ 2 n }^n = C_{ 2 n }^n - C_{ 2 n }^{ n - 1 }\).

考虑平面直角坐标系,我们将’(‘认为是向右上走一单位长度,将’)’认为是向右下走一单位长度.

那么卡特兰数就相当于从\(( 0 , 0 )\)走到\(( 2 n , 0 )\)不经过第四象限的方案数.

考虑反射容斥,如果只是走到\(( 2 n , 0 )\)的方案数是\(C_{ 2 n }^n\).

而如果到达第四象限,说明在这条这线上存在一个点\(( x , - 1 )\).

考虑将\(x\)以后的折线以直线\(y = - 1\)为对称轴反转,那么终点到了\(( 2 n , - 2 )\).

不难发现,任意从\(( 0 , 0 )\)走到\(( 2 n , - 2 )\)的方案一定唯一对应了一种从\(( 0 , 0 )\)走到\(( 2 n , 0 )\)的不合法方案.因为从\(( 0 , 0 )\)走到\(( 2 n , - 2 )\)一定会经过直线\(y = - 1\),将后半部分对称后就是其对应方案.而从\(( 0 , 0 )\)走到\(( 2 n , - 2 )\)的方案数为\(C_{ 2 n }^{ n - 1 }\).

因而\(f_n = C_{ 2 n }^n - C_{ 2 n }^{ n - 1 } \\\).

\(C_{ 2 n }^n - C_{ 2 n }^{ n - 1 } = \frac{ ( 2 n ) ! }{ n ! n ! } - \frac{ ( 2 n ) ! }{ ( n - 1 ) ! ( n + 1 ) ! } = \frac{ ( 2 n ) ! }{ n ! ( n + 1 ) ! } = \frac{ C_{ 2 n }^n }{ n + 1 } \\\).

递推定义:\(f_n = \frac{ 4 n - 2 }{ n + 1 } f_{ n - 1 } \\\).

使用一下上一步的通项公式:

f_n=\

f_{n-1}=

\end{cases}\

不难发现\(f_n = \frac{ ( 2 n - 1 ) ( 2 n ) }{ n ( n + 1 ) } f_{ n - 1 } \\\).整理,得到\(f_n = \frac{ 4 n - 2 }{ n + 1 } f_{ n - 1 } \\\).

换个记号,设\(C_n\)为卡特兰数的第\(n\)项,卡特兰数有一个著名的结论是\(k\)次卷积:

\[ C^{ ( k ) }_n = \sum_{ \sum_{ j = 1 }^k a_j = n } \prod C_{ a_i } = \frac{ k }{ n + k } \binom{ 2 n + k - 1 }{ n } \]

我们可以这么理解它:它指的是一个长度为\(n + k - 1\)的括号序列,前\(k - 1\)个必须是左括号的方案数.为啥呢?因为这样这个括号序列必须写成\(( ( ( A ) B ) C ) D\)之类的形式,等价于卷积.

那么证明就很简单了,类似反射容斥,有:

\[ \begin{aligned} C^{ ( k ) }_n & = \binom{ 2 n + k - 1 }{ n } - \binom{ 2 n + k - 1 }{ n - 1 } \\ & = \frac{ k }{ n + k } \binom{ 2 n + k - 1 }{ n } \end{aligned} \]

Example([HNOI2009]有趣的数列)

首先,如果没有第三条限制,那显然奇数位置和偶数位置互不影响,直接随便选,答案就是\(\binom{ 2 n }{ n }\).

而有了限制呢,我们还是想随便选然后顺序排起来,但是这次不能排列的时候使奇数位置大于偶数位置,可以发现这就是括号序列需要满足的条件,于是答案就是卡特兰数.

至于处理,这题因为模数不是质数,需要做质因数分解来维护除法.

Example2([23省选10连测day7]b)

给定\(x , n\),对\(y \in [ 1 , n ]\),固定\(p_x = y\)做笛卡尔树的形态计数.\(n \leq 5 \times 10^5\).

由于是对树的形态计数,其实根本就不在乎每个点具体的取值,只要这个取值有解就行.事实上,容易发现\(a_x = y\)只要满足:

  1. \(x\)节点的祖先数量不超过\(y - 1\)个(深度小于等于\(y\)).

  2. \(x\)节点的子树大小不超过\(n - y + 1\).

发现合法不太好记,经典补集转化,然后两个不合法情况无关,分别算.

我们考虑直接算出\(f_p\)表示\(x\)的深度为\(p\)的答案,\(g_p\)表示\(x\)的子树大小为\(p\)的答案,然后就可以完成这个题.

这两部分怎么算呢?

先看深度:\(x\)的祖先有两种:一种在序列中在\(x\)的左边,一种在\(x\)的右边.我们设前者为\(0 = l_0 < l_1 < l_2 < \cdots l_p < l_{ p + 1 } = x\),设后者为\(n + 1 = r_0 > r_1 > r_2 > \cdots > r_{ q } > r_{ q + 1 } = x\).这么分类有什么用呢?我们考虑\(( l_{ i - 1 } , l_{ i } )\)这一段数能放在哪里,它只能是\(l_{ i }\)的左儿子,独立于整棵树,因此这一段的答案就是\(C_{ l_i - l_{ i - 1 } - 1 }\).

记:

$$ \[\begin{aligned} L_p & = \sum_{ l } \prod_{ i = 1 }^{ p + 1 } C_{ l_i - l_{ i - 1 } - 1 } \\ R_q & = \sum_{ r } \prod_{ i = 1 }^{ q + 1 } C_{ r_{ i - 1 } - r_i - 1 } \\ \end{aligned}\]

$$

注意到这等价于卡特兰数的\(k\)次卷积,有:

$$ \[\begin{aligned} L_p & = C_{ x - p - 1 }^{ ( p + 1 ) } \\ R_q & = C^{ ( q + 1 ) }_{ n - x - q } \\ \end{aligned}\]

$$

此时的答案自然是\(f_{ p + q + 1 } = L_p R_q \binom{ p + q }{ q }\),做卷积.

儿子怎么算呢?二叉搜索树有一个经典性质:确定根后每个点插在哪里是固定的.也就是说我们把\(x\)的子树从原树中删去,然后插入\(x\)一定会插回原位置,这是一个双射.而子树内随便做,设左子树大小为\(p\),右子树大小为\(q\),我们有\(g_{ p + q + 1 } = C_p C_q C_{ n - ( p + q + 1 ) } = C_{ n - 1 }^{ ( 3 ) }\),同样是简单的卷积.

二项式系数的处理

通过恒等式变形求解

Example1

\(\sum_{ k = 0 }^n k \binom{ m - k - 1 }{ m - n - 1 } , n , m \in \mathbb{ N } \land m > n \\\).

这个式子乘了个系数\(k\)导致很难处理,一个自然的想法是使用吸收恒等式将\(k\)消去,然后对后面的式子使用上指标求和.

于是:

\[ \begin{aligned} \sum_{ k = 0 }^n k \binom{ m - k - 1 }{ m - n - 1 } & = \sum_{ k = 0 }^n m \binom{ m - k - 1 }{ m - n - 1 } - \sum_{ k = 0 }^n ( m - k ) \binom{ m - k - 1 }{ m - n - 1 } \\ & = m \sum_{ k = 0 }^{ m - 1 } \binom{ m - k - 1 }{ m - n - 1 } - ( m - n ) \sum_{ k = 0 }^m \binom{ m - k }{ m - n } \end{aligned} \]

不妨令\(S_m = \sum_{ k = 0 }^m \binom{ m - k }{ m - n } \\\),不难发现我们有:

\[ S_m = \sum_{ k = 0 }^m \binom{ k }{ m - n } = \binom{ m + 1 }{ m - n + 1 } \]

于是原式\(= mS_{ m - 1 } - ( m - n ) S_m = \cfrac{ n }{ m - n + 1 } \binom{ m }{ m - n } \\\).

不过事实上,我们有另一种方式来处理这个等式,我们直接将\(k = \binom{ k }{ 1 }\)带入:

\[ \begin{aligned} \sum_{ k = 0 }^n k \binom{ m - k - 1 }{ m - n - 1 } & = \sum_{ k = 0 }^n \binom{ k }{ 1 } \binom{ m - k - 1 }{ m - n - 1 } \\ & = \binom{ m }{ m - n + 1 } \\ & = \cfrac{ n }{ m - n + 1 } \binom{ m }{ m - n } \end{aligned} \]

Example2

\(\sum_{ k } k \binom{ n }{ k } \binom{ s }{ k } , n \in \mathbb{ N } \\\).

第一反应仍然是使用吸收恒等式,但是注意到\(n\)\(s\)的范围不一样,由于吸收恒等式的范围很松,因此应选择一个范围更松的数吸收,这样才能保证另一个数范围的特殊性,于是有:

\[ \begin{aligned} \sum_{ k } k \binom{ n }{ k } \binom{ s }{ k } & = s \sum_{ k } \binom{ n }{ k } \binom{ s - 1 }{ k - 1 } \\ & = s \binom{ n + s - 1 }{ n - 1 } \end{aligned} \]

Example3

\(\sum_{ 0 \leq k } \binom{ n + k }{ 2 k } \binom{ 2 k }{ k } \cfrac{ ( - 1 )^k }{ k + 1 } , n \in \mathbb{ N } \\\).

我们有:

\[ \begin{aligned} \sum_{ 0 \leq k } \binom{ n + k }{ 2 k } \binom{ 2 k }{ k } \cfrac{ ( - 1 )^k }{ k + 1 } & = \sum_{ 0 \leq k } \binom{ n + k }{ k } \binom{ n }{ k } \cfrac{ ( - 1 )^k }{ k + 1 } , n \in \mathbb{ N } \\ & = \cfrac{ 1 }{ n + 1 } \sum_{ 0 \leq k } \binom{ n + k }{ k } \binom{ n + 1 }{ k + 1 }{ ( - 1 )^k } \\ & = \cfrac{ 1 }{ n + 1 } \sum_{ 0 \leq k } \binom{ - n - 1 }{ k } \binom{ n + 1 }{ k + 1 } \\ & = \cfrac{ 1 }{ n + 1 } \binom{ 0 }{ n } \\ & = [ n = 0 ] \end{aligned} \]

Example4

\(\sum_{ k \geq 0 } \binom{ n + k }{ m + 2 k } \binom{ 2 k }{ k } \cfrac{ ( - 1 )^k }{ k + 1 } , n , m \in \mathbb{ N_+ } \\\).

考虑恒等式扩展的二项式恒等式(整数范围内)的\(( 1 )\),我们有:

\[ \begin{aligned} \sum_{ k \geq 0 } \binom{ n + k }{ m + 2 k } \binom{ 2 k }{ k } \cfrac{ ( - 1 )^k }{ k + 1 } & = \sum_{ k \geq 0 } \sum_{ 0 \leq j \leq n + k - 1 } \binom{ n + k - 1 - j }{ 2 k } \binom{ j }{ m - 1 } \binom{ 2 k }{ k } \cfrac{ ( - 1 )^k }{ k + 1 } \\ & = \sum_{ 0 \leq j \leq n - 1 } \binom{ j }{ m - 1 } \sum_{ j + 1 - n \leq k , 0 \leq k } \binom{ n + k - 1 - j }{ 2 k } \binom{ 2 k }{ k } \cfrac{ ( - 1 )^k }{ k + 1 } \end{aligned} \]

注意到如果\(j + 1 - n \geq 0\),则\(\binom{ n + k - 1 - j }{ 2 k } \\\)应为\(0\).所以有:

\[ \begin{aligned} & \sum_{ 0 \leq j \leq n - 1 } \binom{ j }{ m - 1 } \sum_{ j + 1 - n \leq k , 0 \leq k } \binom{ n + k - 1 - j }{ 2 k } \binom{ 2 k }{ k } \cfrac{ ( - 1 )^k }{ k + 1 } \\ = & \sum_{ 0 \leq j < n } \binom{ j }{ m - 1 } [ n - 1 - j = 0 ] = \binom{ n - 1 }{ m - 1 } \end{aligned} \]

Example5

\(\sum_{ k = 0 }^n ( C_n^k )^2\).

\[ \sum_{ k = 0 }^n ( C_n^k )^2 = \sum_{ k = 0 }^n C_{ n }^k \times C_{ n }^{ n - k } = C_n^{ 2 n } \]

转化为递归式/和式求解

Example1

\(Q_n = \sum_{ k \leq 2^n } \binom{ 2^n - k }{ k } ( - 1 )^k , n \in \mathbb{ N } \\\).

如果要转化为递归式的话,我们所掌握的只有加法恒等式,但加法恒等式只给出了杨辉三角中相邻两行的关系.但由于\(Q_n\)的式子中实际上只与\(2^n\)有关,我们不妨令\(R_n = \sum_{ k \leq n } \binom{ n - k }{ k } ( - 1 )^k \\\),显然有\(Q_n = R_{ 2^n }\).

而我们有:

\[ \begin{aligned} R_n & = \sum_{ k \leq n } \binom{ n - 1 - k }{ k } ( - 1 )^k + \sum_{ k \leq n } \binom{ n - 1 - k }{ k - 1 } ( - 1 )^k \\ & = \sum_{ k \leq n } \binom{ n - 1 - k }{ k } ( - 1 )^k + \sum_{ k \leq n - 1 } \binom{ n - k - 2 }{ k } ( - 1 )^{ k + 1 } \\ & = \sum_{ k \leq n - 1 } \binom{ n - 1 - k }{ k } ( - 1 )^k + \binom{ - 1 }{ n } ( - 1 )^n - ( \sum_{ k \leq n - 2 } \binom{ n - 2 - k }{ k } ( - 1 )^k + \binom{ - 1 }{ n - 1 } ( - 1 )^{ n - 1 } ) \\ & = \sum_{ k \leq n - 1 } \binom{ n - 1 - k }{ k } ( - 1 )^k - \sum_{ k \leq n - 1 } \binom{ n - 2 - k }{ k } ( - 1 )^k \\ & = R_{ n - 1 } - R_{ n - 2 } \\ & = R_{ n - 2 } - R_{ n - 3 } - R_{ n - 2 } \\ & = - R_{ n - 3 } \\ & = R_{ n - 6 } \end{aligned} \]

也即\(R_n\)具有周期性,不难计算前几项答案,最后有\(Q_n \begin{cases}1 & n = 0 \\ 0 & n \ is \ \mathrm{ odd } \\ - 1 & n > 0 \land n \ is \ \mathrm{ even }\end{cases}\).

Example2

\(( \sum^{ + \infty }_{ i = 0 } C^{ ik + r }_{ nk } ) \mod p\).

考虑设\(f ( n , r ) = \sum^{ + \infty }_{ i = 0 } C^{ ik + r }_{ nk } \\\),则有:

$$ \[\begin{aligned} f ( n , r ) & = \sum^{ + \infty }_{ i = 0 } C^{ ik + r }_{ nk } \\ & = \sum_{ i = 0 }^{ + \infty } \sum_{ j = 0 }^k C_{ nk - k }^{ ik + r - j } \times C_k^j \\ & = \sum^k_{ j = 0 } C_k^j \sum_{ i = 0 }^{ + \infty } C_{ nk - k }^{ ik + r - j } \\ & = \sum_{ j = 0 }^k C_k^j f ( n - 1 , r - j ) \\ \end{aligned}\]

$$

整理上式,得到:\(f ( n , r ) = \sum_{ j = 0 }^k C_k^j f ( n - 1 , r - j ) \\\).

于是我们得到了关于\(f\)的转移方程,可以矩阵加速.

利用微积分求解

Example

\(\sum_{ k = 1 }^n k^2 C_n^k\).

$$ \[\begin{aligned} ( ( 1 + x )^n ) & = ( \sum_{ k = 0 }^n C_n^k x^{ k } ) \\ ( ( 1 + x )^n ) ' & = ( \sum_{ k = 0 }^n C_n^k x^{ k } ) ' \\ n ( 1 + x )^{ n - 1 } & = \sum_{ k = 0 }^n kC_n^k x^{ k - 1 } \\ nx ( 1 + x )^{ n - 1 } & = \sum_{ k = 0 }^n kC_n^k x^{ k } \\ ( nx ( 1 + x )^{ n - 1 } ) ' & = ( \sum_{ k = 0 }^n kC_n^k x^{ k } ) ' \\ n ( ( 1 + x )^{ n - 1 } + ( n - 1 ) x ( 1 + x )^{ n - 2 } ) & = \sum_{ k = 0 }^n k^2 C_n^k x^{ k - 1 } \\ \end{aligned}\]

$$

\(x = 1\),则原式\(= n ( n + 1 ) 2^{ n - 2 }\).

转化为二维平面

Example1

多次询问给定\(k , r\),\(\sum k \leq 2 n , r < 2 n - k\),求\(\sum_{ i = 0 }^{ r } \frac{ 1 }{ 2^i } \binom{ i }{ n - k }\),.

我们把模型抽象成:在二维平面上,从\(( 0 , 0 )\)随机游走到\(( n - k + 1 , r - n + k )\)正下方(包含这个点)的概率,容易发现此时向右走了\(n - k\)步,总共走了\(\leq r\)步,然后再向右走一步保证第一次走到了\(( n - k + 1 , r - n + k )\)下方.

因为是概率,所以当我们已经确定这个事会发生的时候可以多走几步,不难发现这里的概率等价于走到\(x + y = r + 1\)这条直线时横坐标\(\geq n - k + 1\)的概率.枚举一下总共向上走了几步,就得到\(\frac{ 1 }{ 2^{ r } } \sum_{ j = 0 }^{ r - n + k } \binom{ r + 1 }{ j }\),注意这里是\(\frac{ 1 }{ 2^r }\),因为从一开始钦定了一步,因此映射过来需要多乘个\(\frac{ 1 }{ 2 }\),反映射就要乘个\(2\).但是这个式子还是做不了,因为\(r\)并不满足\(\sum r \leq 2 n\).我们需要另辟蹊径.

做一下补集转化转化成走到上方的概率,这个概率就等价于\(1 - \frac{ 1 }{ 2^{ r } } \sum_{ i = 0 }^{ n - k } \binom{ r + 1 }{ i }\).我们考虑暴力预处理出\(f_r = \sum_{ i = 0 }^{ n } \binom{ r }{ i }\),每次删掉一个后缀的组合数就行.现在的问题在于\(f\)怎么做.

直接拆组合数,我们有:

\[ \begin{aligned} f_r & = \sum_{ i = 0 }^n \binom{ r }{ i } \\ & = \sum_{ i = 0 }^n \binom{ r - 1 }{ i - 1 } + \sum_{ i = 0 }^n \binom{ r - 1 }{ i } \\ & = 2 \sum_{ i = 0 }^n \binom{ r - 1 }{ i } - \binom{ r - 1 }{ n } \\ & = 2 f_{ r - 1 } - \binom{ r - 1 }{ n } \end{aligned} \]

Lucas定理

\(p\)是质数,则\(C_n^m \mod p = C_{ n \mod p }^{ m \mod p } \times C_{ \lfloor \frac{ n }{ p } \rfloor }^{ \lfloor \frac{ m }{ p } \rfloor } \mod p \\\).

或者说,将\(n\)\(m\)\(p\)进制下分解,再逐位求组合数并相乘.

证明:

首先,若\(i \ne 0\)\(i \ne p\),\(C_{ p }^i \equiv \frac{ p }{ i } C_{ p - 1 }^{ i - 1 } \equiv 0 ( \mod p ) \\\).

而根据二项式定理,\(( 1 + x )^p \equiv \sum_{ i = 0 }^p C_{ p }^i x^i = 1 + x^p ( \mod p ) \\\).

\(n = k_1 p + b_1\),\(m = k_2 p + b_2\),则\(( 1 + x )^n = ( 1 + x )^{ k_1 p } ( 1 + x )^{ b_1 } \\\).

\(( 1 + x )^{ k_1 p } \equiv ( 1 + x^p )^{ k_1 } ( \mod p ) \\\),有\(( 1 + x )^n \equiv ( 1 + x^p )^{ k_1 } ( 1 + x )^{ b_1 } \\\).

根据二项式定理,\(C_n^m \bmod p\)\(x^m\)项的系数.

我们可以得出,\(C_n^m x^m \equiv C_{ k_1 }^{ k_2 } x^{ k_2 p } C_{ b 1 }^{ b_2 } x^{ b_2 } \pmod{ p } \\\),那么有\(C_a^b \equiv C_{ k_1 }^{ k_2 } C_{ b_1 }^{ b_2 } \pmod{ p } \\\).

另外,Lucas定理有一个很重要的推论是:

\[ \binom{ n }{ m } \equiv [ m \subseteq n ] \pmod{ 2 } \]

Example1([CF1770F]Koxia and Sequence)

首先观察样例并思考,可以发现当\(n\)为偶数时,显然翻转整个序列就可以一一对应(除非翻转后与本身相同,但这种情况下异或值也是\(0\)),所以异或值为\(0\).不然,我们可以翻转\(a [ 2 . . . n ]\),得出答案应该是所有\(a_1\)的异或和.

问题在于接下来怎么做,我们考虑把按位或的那个东西容斥掉.现在问题转化为:对于所有\(y ' \subseteq y\),求出满足\(a_i \subseteq y ' , \sum a_i = x\)时,\(a_1\)异或和.接下来怎么做呢?我们考虑拆位,若\(2^k \subseteq y '\),假设\(a_1\)的第\(k\)位是\(1\),然后讨论此时它对答案是否会产生贡献.

我们不难发现,第\(k\)位贡献是:

\[ [ 2^k \subseteq y ' ] \bigoplus_{ \sum a = x } [ 2^k \subseteq a_1 ] \prod_{ i = 1 }^n [ a_i \subseteq y ' ] \]

这个东西看上去没办法做,但我们突然想到个事:Lucas定理的推论:\([ x \subseteq y ] \equiv \binom{ y }{ x } \pmod{ 2 }\).

所以原式化简为:

$$ \[\begin{aligned} & \binom{ y ' }{ 2^k } \sum_{ \sum a = x } \binom{ a_1 }{ 2^k } \prod_{ i = 1 }^n \binom{ y ' }{ a_i } \pmod{ 2 } \\ = & \binom{ y ' }{ 2^k } \sum_{ a_1 } \binom{ y ' - 2^k }{ a_1 - 2^k } \sum_{ \sum a = x - a_1 } \prod_{ i = 2 }^n \binom{ y ' }{ a_i } \pmod{ 2 } \\ \end{aligned}\]

$$

然后呢?不难发现后面那一串是范德蒙德卷积的形式,就可以写成:

\[ \begin{aligned} & \binom{ y ' }{ 2^k } \sum_{ a_1 } \binom{ y ' - 2^k }{ a_1 - 2^k } \binom{ ( n - 1 ) y ' }{ x - a_1 } \pmod{ 2 } \\ = & \binom{ y ' }{ 2^k } \binom{ ny ' - 2^k }{ x - 2^k } \pmod{ 2 } \\ = & [ 2^k \subseteq y ' ] [ ( x - 2^k ) \subseteq ( ny ' - 2^k ) ] \end{aligned} \]

扩展Lucas定理

\(p = \prod p_i^{ e_i }\),那我们只要对于每个\(i\)求出\(C_n^m \mod p_i^{ e_i }\),然后使用中国剩余定理合并即可.

那现在问题转化为要求\(C_n^m \mod p^k\),其中\(p \in \mathrm{ prime }\).

原式\(= \frac{ n ! }{ m ! ( n - m ) ! } \mod p^k = \frac{ \frac{ n ! }{ p^x } }{ \frac{ m ! }{ p^y } \frac{ ( n - m ) ! }{ p^z } } p^{ x - y - z } \mod p^k \\\).

现在问题转化为求\(\frac{ n ! }{ p^x } \mod p^k 以 及 p^x \\\).

注意到:

\[ \begin{aligned} n ! & = \prod_{ i = 1 } i \\ & = ( \prod_{ i = wp , w \in \mathbb{ Z } } i ) ( \prod_{ i \ne wp , w \in \mathbb{ Z } } i ) \\ & = p^{ \lfloor n p \rfloor } ( \lfloor n p \rfloor ! ) ( \prod_{ i \ne wp , w \in \mathbb{ Z } } i ) \\ & \equiv p^{ \lfloor \frac{ n }{ p } \rfloor } ( \lfloor \frac{ n }{ p } \rfloor ! ) ( \prod_{ i = 1 , i \ne wp , w \in \mathbb{ Z } }^{ p^k } i )^{ \lfloor \frac{ n }{ p^k } \rfloor } ( \prod^{ n \ \bmod{ p^k } }_{ i = p^k \lfloor \frac{ n }{ p^k } \rfloor , i \ne wp , w \in \mathbb{ Z } } i ) ( \mod p^k ) \end{aligned} \]

递归求解即可.

ps:

这样摆式子可能非常难以理解,我们考虑将\([ 1 , n ]\)的所有数全部排成一个宽为\(p^k\)的矩阵.

那右边第一项就是把那些\(p\)的倍数的列拿出来,第二项是那些填满的行,第三项是最后没填满的一行.

斯特林数

第一类斯特林数

\(n \brack k \\\):长度为\(n\)的排列划分成\(k\)个轮换的方案数.

考虑现在已经将\(n - 1\)个数分成了若干轮换,现在新加入第\(n\)个数.这个数要么和其他的数一起组成轮换,要么自己形成自环.

而由于它可以插入前面轮换的任意位置,显然\(\left [ \begin{array}{ c } n \\ k\end{array} \right ] = ( n - 1 ) \left [ \begin{array}{ c } n - 1 \\ k\end{array} \right ] + \left [ \begin{array}{ c } n - 1 \\ k - 1\end{array} \right ] \\\).

特别地,我们定义\(\left [ \begin{array}{ c } 0 \\ k\end{array} \right ] = [ k = 0 ] \\\).

由于所有的排列都由若干置换组成,因此我们有:\(\sum_{ k = 0 }^n \left [ \begin{array}{ c } n \\ k\end{array} \right ] = n !\).

第二类斯特林数

\(\left \{ \begin{array}{ c } n \\ k\end{array} \right \}\):将\(n\)个本质不同的物品划分成k个非空集合的方案数.

考虑现在已经放好\(n - 1\)个物品,正要放入第\(n\)个物品.那么这个物品要么单独放在一起,要么和其他物品放在一起.显然\(\left \{ \begin{array}{ c } n \\ k\end{array} \right \} = k \left \{ \begin{array}{ c } n - 1 \\ k\end{array} \right \} + \left \{ \begin{array}{ c } n - 1 \\ k - 1\end{array} \right \} \\\).

特别地,我们定义\(\left \{ \begin{array}{ c } 0 \\ k\end{array} \right \} = [ k = 0 ] \\\).

斯特林数的扩展

如果我们让斯特林数的定义式扩展到整数域,我们可以发现一个性质:\({ n \brack m } ={ - m \brace - n } \\\).

基本斯特林恒等式

  1. \(x^n = \sum_{ k = 0 }^n \left \{ \begin{array}{ c } n \\ k\end{array} \right \} x^{ \underline{ k } } = \sum_{ k = 0 }^n \left \{ \begin{array}{ c } n \\ k\end{array} \right \} ( - 1 )^{ n - k } x^{ \overline{ k } } \\\).

证明:先考虑前半段,不妨使用数学归纳.若\(x^{ n - 1 } = \sum_{ k = 0 }^{ n - 1 } \left \{ \begin{array}{ c } n - 1 \\ k\end{array} \right \} x^{ \underline{ k } } \\\),我们要证

\

$$ \[\begin{aligned} x \sum_{ k = 0 }^{ n - 1 } \left \{ \begin{array} { c } n - 1 \\ k \end{array} \right \} x^{ \underline{ k } } & = \sum_{ k = 0 }^{ n } \left \{ \begin{array} { c } n \\ k \end{array} \right \} x^{ \underline{ k } } \\ \end{aligned}\]

$$

考虑\(( x - k ) x^{ \underline{ k } } = x^{ \underline{ k + 1 } }\),所以\(x \cdot x^{ \underline{ k } } = x^{ \underline{ k + 1 } } + kx^{ \underline{ k } } \\\).那么左边即:

$$ \[\begin{aligned} & \sum_{ k = 0 }^{ n - 1 } \left \{ \begin{array} { c } n - 1 \\ k \end{array} \right \} x^{ \underline{ k + 1 } } + \sum_{ k = 0 }^{ n - 1 } \left \{ \begin{array} { c } n - 1 \\ k \end{array} \right \} kx^{ \underline{ k } } \\ = & \sum_{ k = 1 }^{ n } \left \{ \begin{array} { c } n - 1 \\ k - 1 \end{array} \right \} x^{ \underline{ k } } + \sum_{ k = 1 }^{ n } \left \{ \begin{array} { c } n - 1 \\ k \end{array} \right \} kx^{ \underline{ k } } \\ = & \sum_{ k = 0 }^n \left \{ \begin{array} { c } n \\ k \end{array} \right \} x^{ \underline{ k } } \\ \\ \end{aligned}\]

$$

至于后半段,由于\(x^{ \underline{ n } } = ( - 1 )^n ( - x )^{ \overline{ n } } \\\),所以\(x^n = \sum_{ k = 0 }^n \left \{ \begin{array}{ c } n \\ k\end{array} \right \} ( - 1 )^k ( - x )^{ \overline{ k } } \\\).

不妨用\(x\)来代替\(- x\),我们有:

\[ \begin{aligned} ( - x )^n & = \sum_{ k = 0 }^n \left \{ \begin{array} { c } n \\ k \end{array} \right \} ( - 1 )^k ( x )^{ \overline{ k } } \\ x^n & = \sum_{ k = 0 }^n \left \{ \begin{array} { c } n \\ k \end{array} \right \} ( - 1 )^{ n - k } x^{ \overline{ k } } \end{aligned} \]

  1. \(x^{ \overline{ n } } = \sum_{ k = 0 }^n \left [ \begin{array}{ c } n \\ k\end{array} \right ] x^k \\\).

  2. \(x^{ \underline{ n } } = \sum_{ k = 0 }^n \left [ \begin{array}{ c } n \\ k\end{array} \right ] ( - 1 )^{ n - k } x^k \\\).

证明:

先考虑前者,由于\(( x + n - 1 ) x^k = x^{ k + 1 } + ( n - 1 ) x^k \\\),所以类似于(1)前半段的推导即可得到,后者同样可以使用下降幂和上升幂的转化来得到.

  1. 反转公式:\(\sum_{ k = 0 }^n \left [ \begin{array}{ c } n \\ k\end{array} \right ] \left \{ \begin{array}{ c } k \\ m\end{array} \right \} ( - 1 )^{ n - k } = \sum_{ k = 0 }^n \left \{ \begin{array}{ c } n \\ k\end{array} \right \} \left [ \begin{array}{ c } k \\ m\end{array} \right ] ( - 1 )^{ n - k } = [ m = n ] \\\).

证明:

考虑先证明后半部分,将(3)带入(1),得到\(x^n = \sum_{ k = 0 }^n \left \{ \begin{array}{ c } n \\ k\end{array} \right \} x^{ \underline{ k } } = \sum_{ k = 0 }^n \sum_{ m = 0 }^k \left \{ \begin{array}{ c } n \\ k\end{array} \right \} \left [ \begin{array}{ c } k \\ m\end{array} \right ] ( - 1 )^{ n - k } x^m \\\).

由于这对任意\(x\)都成立,因此右边除了\(x^n\)以外的项系数均为\(0\),而\(x^n\)的系数为\(1\).前半部分是同理的.这个公式是斯特林反演的基础.

  1. \(\left \{ \begin{array}{ c } n + 1 \\ m + 1\end{array} \right \} = \sum_{ k = m }^n \left ( \begin{array}{ c } n \\ k\end{array} \right ) \left \{ \begin{array}{ c } k \\ m\end{array} \right \} \\\).

  2. \(\left [ \begin{array}{ c } n + 1 \\ m + 1\end{array} \right ] = \sum_{ k = m }^n \left ( \begin{array}{ c } n \\ k\end{array} \right ) \left [ \begin{array}{ c } k \\ m\end{array} \right ] \\\).

证明:对于前者,考虑组合意义,将\(n + 1\)个分为\(m + 1\)组,也就是先找一部分分成\(m\)组,再把剩下的分到一组.对于后者,也可以同样考虑组合意义.

补充斯特林恒等式

  1. \(\left \{ \begin{array}{ c } n \\ m\end{array} \right \} = \sum_{ k = m }^n \left ( \begin{array}{ c } n \\ k\end{array} \right ) \left \{ \begin{array}{ c } k + 1 \\ m + 1\end{array} \right \} ( - 1 )^{ n - k } \\\).

  2. \(\left [ \begin{array}{ c } n \\ m\end{array} \right ] = \sum_{ k = m }^n \left ( \begin{array}{ c } n \\ k\end{array} \right ) \left [ \begin{array}{ c } k + 1 \\ m + 1\end{array} \right ] ( - 1 )^{ n - k } \\\).

证明:由(5)(6),根据二项式反演可知.

  1. \(m ! \left \{ \begin{array}{ c } n \\ m\end{array} \right \} = \sum_{ k = 0 }^m C_m^k k^n ( - 1 )^{ m - k } \\\).

证明:首先有\(m^n = \sum_{ k = 0 }^m m^{ \underline{ k } } \left \{ \begin{array}{ c } m \\ k\end{array} \right \} = \sum_{ k = 0 }^m k ! C_m^k \left \{ \begin{array}{ c } m \\ k\end{array} \right \} \\\),对这个式子进行二项式反演即可.

  1. \(\left \{ \begin{array}{ c } n + 1 \\ m + 1\end{array} \right \} = \sum_{ k = 0 }^n \left \{ \begin{array}{ c } k \\ m\end{array} \right \} ( m + 1 )^{ n - k } \\\).

证明:

考虑组合意义,相当于先把前\(k\)个分为\(m\)组,把第\(k + 1\)个数放到第\(m + 1\)组.然后剩下\(( n + 1 ) - ( k + 1 ) = n - k\)个随便放.相当于我们按照每组所放的数的最小值区分每组.由于这么做,第\(m + 1\)组(最小值最大的那组)在\(k\)不同的时候最小值是不同的,因此一定不重不漏.

  1. \(\left [ \begin{array}{ c } n + 1 \\ m + 1\end{array} \right ] = \sum_{ k = 0 }^n \left [ \begin{array}{ c } k \\ m\end{array} \right ] C_{ n }^k ( n - k ) ! = n ! \sum_{ k = 0 }^n \frac{ \left [ \begin{array}{ c } k \\ m\end{array} \right ] }{ k ! } \\\).

证明:

先考虑前半部分,首先如果\(n > 0\),我们有\(\left [ \begin{array}{ c } n \\ 1\end{array} \right ] = ( n - 1 ) ! \\\).这个式子很显然,我们现在有一个长度为\(n - 1\)的环,想要往里插入第\(n\)个数有\(n - 1\)种选择,所以我们有:\(\left [ \begin{array}{ c } n \\ 1\end{array} \right ] = \left [ \begin{array}{ c } n - 1 \\ 1\end{array} \right ] ( n - 1 ) \\\),数学归纳一下即可.

那么前半部分的组合意义就是:考虑将\(n + 1\)个数划分成\(m + 1\)个环,我们先将其中\(k\)个数划分成\(m\)个环,剩下\(n + 1 - k\)个数划分成另一个环.但是这样算显然会算重,所以我们只需要勒令第\(n + 1\)个数在最后一个环里即可.该证明就显然了.

而由于\(C_n^k ( n - k ) ! = C_n^{ n - k } ( n - k ) ! = n^{ \underline{ n - k } } = \frac{ n ! }{ k ! } \\\).因此后半部分也得证.

  1. \(\left \{ \begin{array}{ c } n + m + 1 \\ m\end{array} \right \} = \sum_{ k = 0 }^m k \left \{ \begin{array}{ c } n + k \\ k\end{array} \right \} \\\).

  2. \(\left [ \begin{array}{ c } n + m + 1 \\ m\end{array} \right ] \sum_{ k = 0 }^m ( n + k ) \left [ \begin{array}{ c } n + k \\ k\end{array} \right ] \\\).

证明:

先考虑前者,我们将\(n + k\)个位置分到\(k\)个集合之后.还剩下\(( n + m + 1 ) - ( n + k ) = ( m - k + 1 )\)个数,剩下\(( m - k )\)个集合.

拿出来\(( n + k + 1 )\)这个数,剩下的数刚好够每个集合放一个.最后枚举一下把\(( n + k + 1 )\)放在哪里即可.由于每个划分一定存在一段(可能是\(0\))单独自己集合的后缀.所以这个递推成立.后者也可以同样证明.

  1. \(C_n^m ( n - 1 )^{ \underline{ n - m } } = \sum_{ k = m }^n \left [ \begin{array}{ c } n \\ k\end{array} \right ] \left \{ \begin{array}{ c } k \\ m\end{array} \right \} \\\).

证明:

考虑\(( n - 1 )^{ \underline{ n - m } } = \frac{ ( n - 1 ) ! }{ ( m - 1 ) ! } \\\),不妨设\(f ( n , m ) = \sum_{ k = m }^n \left [ \begin{array}{ c } n \\ k\end{array} \right ] \left \{ \begin{array}{ c } k \\ m\end{array} \right \} \\\),相当于将\(n\)个数分成非空\(m\)组,然后组内的数要形成若干轮换的方案数.那么知道\(f ( n , m ) = f ( n - 1 , m - 1 ) + ( n - 1 + m ) f ( n - 1 , m ) \\\).

\(g ( n , m ) = C_n^m \frac{ ( n - 1 ) ! }{ ( m - 1 ) ! } = \frac{ n ! ( n - 1 ) ! }{ m ! ( n - m ) ! ( m - 1 ) ! } \\\),那么知道:

$$ \[\begin{aligned} g ( n - 1 , m - 1 ) & = \frac{ ( n - 1 ) ! ( n - 2 ) ! }{ ( m - 1 ) ! ( n - m ) ! ( m - 2 ) ! } \\ g ( n - 1 , m ) & = \frac{ ( n - 1 ) ! ( n - 2 ) ! }{ m ! ( n - 1 - m ) ! ( m - 2 ) ! } \\ \end{aligned}\]

$$

显然\(g ( n , m ) = g ( n - 1 , m - 1 ) + ( n - 1 + m ) g ( n - 1 , m ) \\\),数学归纳即可.

  1. \(C_n^m = \frac{ n ! }{ m ! ( n - m ) ! } = \sum_{ k = m }^n \left \{ \begin{array}{ c } n + 1 \\ k + 1\end{array} \right \} \left [ \begin{array}{ c } k \\ m\end{array} \right ] ( - 1 )^{ m - k } \\\).

  2. \(n^{ \underline{ n - m } } = \frac{ n ! }{ m ! } = \sum_{ k = m }^n \left [ \begin{array}{ c } n + 1 \\ k + 1\end{array} \right ] \left \{ \begin{array}{ c } k \\ m\end{array} \right \} ( - 1 )^{ m - k } , 其 中 m \leq n \\\).

证明:考虑(5)(6),对其做一遍斯特林反演即可.

  1. \(\left \{ \begin{array}{ c } n \\ l + m\end{array} \right \} C_{ l + m }^l = \sum_{ k = l }^n \left \{ \begin{array}{ c } k \\ l\end{array} \right \} \left \{ \begin{array}{ c } n - k \\ m\end{array} \right \} C_n^k \\\).

  2. \(\left [ \begin{array}{ c } n \\ l + m\end{array} \right ] C_{ l + m }^l = \sum_{ k = l }^n \left [ \begin{array}{ c } k \\ l\end{array} \right ] \left [ \begin{array}{ c } n - k \\ m\end{array} \right ] C_n^k \\\).

证明:先考虑前者,左边即先将\(n\)个数分为\(l + m\)个集合,然后再挑出\(l\)个集合.那不妨枚举这\(l\)个集合中是哪些数,然后再进行分配.后者同理.

欧拉数

\(\left \langle \begin{array}\\ n \\ k\end{array} \right \rangle\)表示\(\{ 1 , 2 , . . . , n \}\)的排列\(a\)中满足这条性质的排列个数:存在且只存在\(k\)个升高,换句话说,存在且只存在\(k\)\(i\),满足\(1 \leq i < n\),\(a_i < a_{ i + 1 }\).不难发现\(\left \langle \begin{array}\\ n \\ k\end{array} \right \rangle = \left \langle \begin{array}\\ n \\ n - k - 1\end{array} \right \rangle\).

考虑在一个\(\{ 1 , 2 , . . . , n - 1 \}\)的排列中插入\(n\),设插入的位置是原本\(a_i\)的后面,那么要么原本\(a_i < a_{ i + 1 }\),要么反之.前者不会改变排列的升高的数量,后者则会增加\(1\).另外还有一种情况是插入到了序列最前面.于是我们自然得到:\(\left \langle \begin{array}\\ n \\ k\end{array} \right \rangle = ( k + 1 ) \left \langle \begin{array}\\ n - 1 \\ k\end{array} \right \rangle + ( n - k ) \left \langle \begin{array}\\ n - 1 \\ k - 1\end{array} \right \rangle\).

特别地,我们令\(\left \langle \begin{array}\\ 0 \\ k\end{array} \right \rangle = [ k = 0 ]\),若\(k < 0\),则\(\left \langle \begin{array}\\ n \\ k\end{array} \right \rangle = 0\).

欧拉数与二项式系数

我们有Worpitzky恒等式:

\[ x^n = \sum_{ k \geq 0 } \binom{ x + k }{ n } \left \langle \begin{array} \\ n \\ k \end{array} \right \rangle , n \in \mathbb{ N } \]

还有另一个恒等式:

\[ \left \langle \begin{array} \\ n \\ m \end{array} \right \rangle = \sum_{ k = 0 }^m \binom{ n + 1 }{ k } ( m + 1 - k )^n ( - 1 )^k \]

剩下的不会了.

伯努利数

定义\(B_j\)为第\(j\)个伯努利数,且满足\(\sum_{ j = 0 }^m \binom{ m + 1 }{ j } B_j = [ m = 0 ] , m \geq 0 \\\).

定义\(S_m ( n ) = \sum_{ i = 0 }^{ n - 1 } i^m\).

伯努利数满足公式:\(S_m ( n ) = \cfrac{ 1 }{ m + 1 } \sum_{ k = 0 }^m \binom{ m + 1 }{ k } B_k n^{ m + 1 - k } \\\).

证明如下:

\(S_{ m + 1 } ( n )\)使用扰动法,我们有:

$$ \[\begin{aligned} S_{ m + 1 } ( n ) + n^{ m + 1 } & = \sum_{ k = 0 }^{ n - 1 } ( k + 1 )^{ m + 1 } \\ & = \sum_{ k = 0 }^{ n - 1 } \sum_{ j = 0 }^{ m + 1 } \binom{ m + 1 }{ j } k^j \\ & = \sum_{ j = 0 }^{ m + 1 } \binom{ m + 1 }{ j } S_j ( n ) \\ & = \sum_{ j = 0 }^{ m } \binom{ m + 1 }{ j } S_j ( n ) + S_{ m + 1 } ( n ) \\ n^{ m + 1 } & = \sum_{ j = 0 }^m \binom{ m + 1 }{ j } S_j ( n ) \\ \end{aligned}\]

$$

接下来使用数学归纳,假设\(0 \leq j < m\)时该公式成立,并假设有\(S_m ( n ) = \cfrac{ 1 }{ m + 1 } \sum_{ k = 0 }^m \binom{ m + 1 }{ k } B_k n^{ m + 1 - k } + \Delta \\\),我们只需要证明\(\Delta = 0\).

\[ \begin{aligned} n^{ m + 1 } & = \sum_{ j = 0 }^m \binom{ m + 1 }{ j } \cfrac{ 1 }{ j + 1 } \sum_{ k = 0 }^j \binom{ j + 1 }{ k } B_k n^{ j + 1 - k } + ( m + 1 ) \Delta \\ & = \sum_{ 0 \leq k \leq j \leq m } \binom{ j + 1 }{ k } \binom{ m + 1 }{ j } \cfrac{ 1 }{ j + 1 } B_k n^{ j + 1 - k } + ( m + 1 ) \Delta \\ & = \sum_{ 0 \leq k \leq j \leq m } \binom{ j + 1 }{ j - k } \binom{ m + 1 }{ j } \cfrac{ 1 }{ j + 1 } B_{ j - k } n^{ k + 1 } + ( m + 1 ) \Delta \\ & = \sum_{ 0 \leq k \leq j \leq m } \binom{ j + 1 }{ k + 1 } \binom{ m + 1 }{ j } \cfrac{ 1 }{ j + 1 } B_{ j - k } n^{ k + 1 } + ( m + 1 ) \Delta \\ & = \sum_{ 0 \leq k \leq m } \cfrac{ n^{ k + 1 } }{ k + 1 } \sum_{ j = k }^m B_{ j - k } \binom{ m + 1 }{ j } \binom{ j }{ k } + ( m + 1 ) \Delta \\ & = \sum_{ 0 \leq k \leq m } \cfrac{ n^{ k + 1 } }{ k + 1 } \binom{ m + 1 }{ k } \sum_{ j = k }^m B_{ j - k } \binom{ m + 1 - k }{ j - k } + ( m + 1 ) \Delta \\ & = \sum_{ k = 0 }^m \cfrac{ n^{ k + 1 } }{ k + 1 } \binom{ m + 1 }{ k } \sum_{ j = 0 }^{ m - k } B_{ j } \binom{ m + 1 - k }{ j } + ( m + 1 ) \Delta \\ & = \sum_{ k = 0 }^m \cfrac{ n^{ k + 1 } }{ k + 1 } \binom{ m + 1 }{ k } [ m - k = 0 ] + ( m + 1 ) \Delta \\ & = n^{ m + 1 } + ( m + 1 ) \Delta \end{aligned} \]

显然\(\Delta = 0\),上式成立.

斐波那契数

定义斐波那契数\(F_n = \begin{cases}0 & n = 0 \\ 1 & n = 1 \\ F_{ n - 1 } + F_{ n - 2 } & n > 1\end{cases}\).

斐波那契数的扩展定义

首先根据数学归纳,不难证明卡西尼恒等式:

\[ F_{ n + 1 } F_{ n - 1 } - F_n^2 = ( - 1 )^n , n > 0 \]

事实上,如果我们将斐波那契数的递推式改写作:\(F_n = F_{ n + 2 } - F_{ n + 1 }\),我们可以在\(n \in \mathbb{ Z }\)的时候定义斐波那契数,同样也是满足上面的恒等式的,而且我们可以发现:

\[ F_{ - n } = ( - 1 )^{ n - 1 } F_n , n \in \mathbb{ Z } \]

斐波那契数与数论

如果我们考虑不断使用斐波那契递推式展开,不难发现:

\[ \begin{aligned} F_{ n + k } & = F_k F_{ n + 1 } + F_{ k - 1 } F_n \\ F_{ n + m + 1 } & = F_{ n + 1 } F_{ m + 1 } + F_n F_m \end{aligned} \]

另外,如果我们在上面这个式子中取\(k = wn , w \in \mathbb{ N }\)并使用归纳法,我们又可以得到一个性质:\(F_{ kn }\)\(F_n\)的倍数,\(k \in \mathbb{ Z }\).

再观察这个式子,使用归纳法可以证明\(\gcd ( F_{ n } , F_{ n - 1 } ) = 1\),进一步有:\(\gcd ( F_{ n + m } , F_m ) = \gcd ( F_n , F_m )\).

如果我们推广这个结论,就可以得到一个重要的性质:

\[ \gcd ( F_m , F_n ) = F_{ \gcd ( n , m ) } \]

如果我们再一次推广这个结论,可以得到马蒂亚舍维奇引理:

\[ F_n^2 | F_m \Leftrightarrow nF_n | m , n > 2 \]

这个引理的证明如下:

由于\(F_{ n + 1 } \equiv F_{ n - 1 } \pmod{ F_n }\).于是我们有:\(F_{ 2 n } = F_n F_{ n + 1 } + F_{ n - 1 } F_n\),也就是\(F_{ 2 n } \equiv 2 F_n F_{ n + 1 } \pmod{ F_n^2 }\).

另外我们有:\(F_{ 2 n + 1 } \equiv F_{ n + 1 }^2 \pmod{ F_n^2 }\).

同理,使用归纳法可以证明:\(F_{ kn } \equiv kF_n F_{ n + 1 }^{ k - 1 } \pmod{ F_n^2 } , F_{ kn + 1 } \equiv F_{ n + 1 }^k \pmod{ F_n^2 }\).

\(F_{ n + 1 } \bot F_n\),于是\(F_{ kn } \equiv 0 \pmod{ F_n^2 } \Leftrightarrow k \equiv 0 \pmod{ F_n } , n > 2\).

斐波那契数系

我们如果定义\(j \gg k \Leftrightarrow j \geq k + 2\),那么有齐肯多夫定理:

每个正整数都有唯一的表示方式满足:\(n = \sum_{ i = 1 }^r F_{ k_i } , \forall 1 \leq i < r , k_i \gg k_{ i + 1 } \gg 0\).

首先证明存在性:我们考虑数学归纳,对于一个数n,如果\(\exists k\)满足\(F_k = n\),则显然成立,不然,应\(\exists k\)满足\(F_k < n < F_{ k + 1 }\),而\(n - F_k\)的表示已经存在了.另外,由于\(n - F_k < F_{ k + 1 } - F_k = F_{ k - 1 }\),因此必定不可能出现选了\(F_k\)又选了\(F_{ k - 1 }\)的情况,存在性得证.

至于唯一性,如果我们不选择\(F_k\)而是选择\(F_{ k - 1 }\),那么显然接下来无论怎么选,它们的加和都不可能大于等于\(F_k\),因此一定是唯一的.

这样的话,我们可以将一个自然数\(n\)以斐波那契数的形式表示出来.

斐波那契数的封闭形式

使用生成函数,令\(F ( z ) = \sum_{ k \geq 0 } F_k z^k\).那么不难发现\(F ( z ) - zF ( z ) - z^2 F ( z ) = z\),也就是\(F ( z ) = \cfrac{ z }{ 1 - z - z^2 }\).

考虑这个形式一定可以分解为\(F ( z ) = \cfrac{ a }{ 1 - \alpha z } + \cfrac{ b }{ 1 - \beta z }\)的形式,而这两种形式对应的生成函数都很显然.

进行因式分解,如果令\(\phi = \cfrac{ 1 + \sqrt{ 5 } }{ 2 } , \hat \phi = \cfrac{ 1 - \sqrt{ 5 } }{ 2 }\),那么可以得到\(F_n = \cfrac{ 1 }{ \sqrt{ 5 } } ( \phi^n - \hat \phi^n )\).

另外,由于\(\hat \phi^n\)的影响很小,于是又有\(F_n = \lfloor \cfrac{ \phi^n }{ \sqrt{ 5 } } + 0 . 5 \rfloor\).

连项式

连项式多项式\(K_n ( x_1 , x_2 , . . . , x_n )\)定义为:\(K_n ( x_1 , x_2 , . . . , x_n ) = \begin{cases}1 & n = 0 \\ x_1 & n = 1 \\ x_n K_{ n - 1 } ( x_1 , x_2 , . . . x_{ n - 1 } ) + K_{ n - 2 } ( x_1 , x_2 , . . . , x_{ n - 2 } ) & n \geq 2\end{cases}\).

通过定义不难发现:\(K_n ( 1 , 1 , . . . , 1 ) = F_{ n + 1 }\).

继续观察式子,会发现它递归的过程相当于枚举是否消掉相邻的一对数\(( x_{ n - 1 } , x_n )\).我们考虑用这样一种形式的字符串来表示最后某一项的情况:‘.’为还没有消除掉的项,长度为\(1\);’-‘为已经消除了的两项,长度为\(2\).那么\(K_n ( x_1 , x_2 , . . . , x_n )\)就可以表示为一个长度为\(n\)的字符串,其中若有\(k\)个’-‘,有\(n - 2 k\)个’.’,则有\(\binom{ n - k }{ k }\)种不同的排列方式.

于是我们有:

$$ \[\begin{aligned} K_n ( z , z , . . . , z ) & = \sum_{ k = 0 }^n \binom{ n - k }{ k } z^{ n - 2 k } \\ \end{aligned}\]

$$

另外,这也导出:\(F_{ n + 1 } = \sum_{ k = 0 }^n \binom{ n - k }{ k } \\\).

考虑上面的构造过程,不难发现\(K_n ( x_1 , x_2 , . . . , x_n ) = K_n ( x_n , x_{ n - 1 } , . . . , x_1 )\).

于是递归式可以写成:\(K_n ( x_1 , x_2 , . . . , x_n ) = x_1 K_{ n - 1 } ( x_2 , x_3 , . . . x_{ n } ) + K_{ n - 2 } ( x_3 , x_4 , . . . , x_{ n } )\).

进一步地,不断展开后得到:

\[ \begin{aligned} K_{ m + n } ( x_1 , . . . , x_m , x_{ m + 1 } , . . . , x_{ n + m } ) & = \\ K_m ( x_1 , . . . , x_m ) K_n ( x_{ m + 1 } , . . . , x_{ n + m } ) + K_{ m - 1 } ( x_1 , . . . , x_{ m - 1 } ) K_{ n - 1 } ( x_{ m + 2 } , . . . , x_{ n + m } ) \end{aligned} \]

另外,根据连项式的定义,不难导出\(K_n ( x_1 , . . . , x_n + y ) = K_n ( x_1 , . . . , x_n ) + K_{ n - 1 } ( x_1 , . . . , x_{ n - 1 } ) y\).

由这个公式可以推出:\(\cfrac{ K_{ n + 1 } ( a_0 , . . . , a_n ) }{ K_n ( a_1 , . . . , a_n ) } = \cfrac{ K_n ( a_0 , . . . , a_{ n - 1 } + \cfrac{ 1 }{ a_n } ) }{ K_{ n - 1 } ( a_1 , . . . , a_{ n - 1 } + \cfrac{ 1 }{ a_n } ) }\).

不断做这个迭代,于是我们可以得到连项式与连分数之间的关系:

\[ \cfrac{ K_{ n + 1 } ( a_0 , . . . , a_n ) }{ K_n ( a_1 , . . . , a_n ) } = a_0 + \cfrac{ 1 }{ a_1 + \cfrac{ 1 }{ a_2 + \cfrac{ 1 }{ a_3 + . . . } } } \]

另外,这个与数论中的Stern-Brocot树有很大关系,暂略.

前言

这个博客是北京大学课程《音乐与数学》的相关笔记.然而我懒得画五线谱以及插入钢琴图片,所以这里我们只空谈理论.

本人在大学前并未学过相关乐理,所以下面的个人理解当然可能会出错.

泛音列

拍音理论

假设两个正弦单音的频率分别是\(\omega , \omega + \delta\),那么它们叠加后是:

\[ \begin{aligned} & \sin ( 2 \pi ( \omega + \delta ) t ) + \sin ( 2 \pi \omega t ) \\ = & 2 \sin \left ( 2 \pi ( \omega + \frac{ \delta }{ 2 } ) t \right ) \cos ( \pi \delta t ) \end{aligned} \]

注意到这个声音受到\(\cos ( \pi \delta t )\)的控制.因此会以\(\frac{ \delta }{ 2 }\)的频率振动,由于\(\delta\)应该远小于\(\omega\),这里就会产生\(\delta = | \omega_1 - \omega_2 |\)个拍音.

Mersenne定律

考虑弦乐的情况,将一根弦理想化后,可以只关注它的三个参数:

  1. 弦长\(L\).

  2. 张力\(T\).

  3. 线密度\(\rho\).

对于弦的振动解微分方程,这里我不是很想解了啊!所以我们直接放结论,对于弦上一个点\(u ( x , t )\),首先是一维振动方程:

\[ \frac{ \partial^2 u }{ \partial x^2 } = \frac{ \rho }{ T } \frac{ \partial^2 u }{ \partial t^2 } \]

最终得到的会是一个无穷级数,这个无穷级数的每一项都形如:

\[ u_n ( x , t ) = c_n \sin ( \omega_n t + \theta_n ) \sin ( \frac{ n \pi }{ L } x ) \]

其中第\(n\)项的频率满足:

\[ f_n = \frac{ n }{ 2 L } \sqrt{ \frac{ T }{ \rho } } \]

其中我们将\(f_1\)称为基频,相应的声音称为基音,而将剩下的频率对应的声音统称为泛音,其中\(f_n , n \geq 2\)对应的是第\(n - 1\)泛音.

特别地,如果我们干脆记\(f = f_1\),上述结果告诉我们弦的振动产生的一列频率是:

\[ f , 2 f , 3 f , \cdots \]

这个序列通常被称为泛音列.

特别地,上述的频率其实是固定了点来讨论的,实际上的泛音要更为复杂,会在一根弦上的不同位置处产生不同的加权.实际上对于不同的\(n\),它们的泛音列长这个样子:

其中标注的点(波节)在振动中均是固定不变的.

这其实是某些弦乐演奏中一些按弦技巧的基础.例如这里,如果我用手轻触中间点,我就可以消灭掉所有的\(f_{ 2 k + 1 }\),泛音列中只剩下\(2 f , 4 f , \cdots\).我们后面会再提这个事,这意味着我弹出的音高了八度.那如果我按\(\frac{ 1 }{ 3 }\)处呢?那泛音列中就会只剩下\(3 f , 6 f , 9 f , \cdots\),也就是先高一个纯八度,再高一个纯五度.

还有拨弦,如果我在中间拨弦会发生什么呢?由于我的拨动使得整个弦应该以中间为对称形成一个偶函数,中间的点一定在波动,因此泛音列中剩下的就会是\(f , 3 f , 5 f , \cdots\).

管乐器

管乐器中振动的变为空气柱,不过吧空气柱这个东西振动的时候会略微超出管口,因此会有管口矫正这个事存在.

再就是,管乐器其实分为两种:开管(两面开口)和闭管(单面开口).而且不像琴弦的两端是固定的.一个自然的想法是,根据上面我们放的那张图,开口的那个位置一定要振动,而闭口的那个位置一定被卡住不动.这意味着开管和闭管的泛音列天然不同.具体来说:

开管的泛音列:

\[ f , 2 f , 3 f , 4 f , \cdots \]

闭管的泛音列:

\[ f , 3 f , 5 f , 7 f \]

另外,相同长度的管,开管的基音比闭管高了一个八度.

管乐器有一种演奏方式是超吹.简单来说,当你用力吹的时候,直觉上随着你用力越大,你吹出来的音的频率应该是连续的.但实际上听感更接近于离散的.这是因为从一开始整个泛音列就都是存在的,只是当气流加快的时候,后面的音在某种程度上被”加强”了,所以对于开管来说,你会先听到一个高八度的音,再听到一个高五度的音.

泛音列重合理论

既然如此,我们可以见到,当两个音的基频的比较为简单的时候,它们产生的泛音列重合程度就会较高.例如:

\[ \begin{gathered} f , 2 f , 3 f , 4 f , \cdots \\ 2 f , 4 f , 6 f , 8 f , \cdots \end{gathered} \]

或是:

\[ \begin{gathered} f , 2 f , 3 f , 4 f , \cdots \\ \frac{ 3 }{ 2 } f , 3 f , \frac{ 9 }{ 2 } f , 6 f , \cdots \end{gathered} \]

这从相当的程度解释了为什么理想的音程全都是简单整数比.

律制

要讲律制,首先要知道从经验上来讲,人耳对于音乐的听觉其实并非线性.换言之,当你听两个音的时候,你关注的可不是它们之间的频率差值,而可能更关注它们之间的频率比值.类似地,其实人听声压的时候靠的也是比值,例如分贝的定义是\(L_p = 20 \log_{ 10 } ( \frac{ p }{ p_0 } )\),其中\(p_0 = 20 \mu Pa\).

音程

我们称两个音级之间的距离为音程,其中高的音称为冠音,而低的音被称为根音,一个音程应该由两个参数决定:度数半音数,简单来说,度数是跨越的音名数量,而半音数是跨越的半音数量.表格长这样:

度数 | 半音数 | 名称 |
—- | —— | —— |
一 | 0 | 纯一度 |
二 | 1 | 小二度 |
二 | 2 | 大二度 |
三 | 3 | 小三度 |
三 | 4 | 大三度 |
四 | 5 | 纯四度 |
四 | 6 | 增四度 |
五 | 6 | 减五度 |
五 | 7 | 纯五度 |
六 | 8 | 小六度 |
六 | 9 | 大六度 |
七 | 10 | 小七度 |
七 | 11 | 大七度 |
八 | 12 | 纯八度 |

从这套理论出发,毕达哥拉斯说我们找一下最简整数比:注意到:

音程 | 频率比 |
—— | —— |
纯八度 | \(2 : 1\) |
纯五度 | \(3 : 2\) |
纯四度 | \(4 : 3\) |
大三度 | \(5 : 4\) |
小三度 | \(6 : 5\) |

看上去太漂亮了对吧!但是就是这个规定出了大锅.

五度相生律

中国的三分损益法和毕达哥拉斯的五度相生法其实是类似的东西,我们这里只考虑五度相生律.

毕达哥拉斯学派说,我们这么干,规定\(C\)的频率(当时其实不存在频率的概念,但我们这里就为了方便这么说了)为\(1\),然后每次向上升一个纯五度,如果超出去了呢,那就降一个八度降回来.回忆到纯五度是七个半音,这相当于求\(\{ 7 k \} \pmod{ 12 }\)这个数列对吧,简单数论知识告诉我们它必然能遍历\(12\)种情况,具体而言:

$$ \[\begin{aligned} C \to & & G \to & & D \to & & A \to & & E \to & & B \to \\ 1 \to & & \frac{ 3 }{ 2 } \to & & \frac{ 3^2 }{ 2^3 } \to & & \frac{ 3^3 }{ 2^4 } \to & & \frac{ 3^4 }{ 2^6 } \to & & \frac{ 3^5 }{ 2^7 } \to \\ \\ \\ \# F \to & & \# C \to & & \# G \to & & \# D \to & & \# A \to & & \# E \\ \frac{ 3^6 }{ 2^9 } \to & & \frac{ 3^7 }{ 2^{ 11 } } \to & & \frac{ 3^8 }{ 2^{ 12 } } \to & & \frac{ 3^9 }{ 2^{ 14 } } \to & & \frac{ 3^{ 10 } }{ 2^{ 15 } } \to & & \frac{ 3^{ 11 } }{ 2^{ 17 } } \\ \end{aligned}\]

$$

我们是拿纯八度和纯五度生成的所有的音,因此纯五度肯定是准的,那么与之对应的纯四度肯定是准的.但是看三度音程就会发现问题,例如大三度\(CE\)的比是\(\frac{ 81 }{ 64 } > \frac{ 80 }{ 64 } = \frac{ 5 }{ 4 }\).

更难过的是就算我们按照纯八度和纯五度生成的,这个纯八度也有点难绷.具体而言这里的\(\# E \ne F\),你对着这个\(\# E\)往上再升一个音得到的理应是\(C ' = \frac{ 3^{ 12 } }{ 2^{ 18 } } > 2\),具体来说\(\frac{ 3^{ 12 } }{ 2^{ 19 } } \approx 1 . 013643\),这就出事了,这个东西转一圈并没有转到理想的纯八度音阶上,这个问题在中国古代的三分损益上也体现了,那里的名字叫旋宫不归,这里的话则是将这个略大于\(1\)的数叫做毕达哥拉斯音差.

仔细分析一下就会发现这个问题几乎是不可避免的,因为你上升\(12\)个纯五度,再下降\(7\)个纯八度理应回到原点,可是:

\[ ( \frac{ 3 }{ 2 } )^{ 12 } \times ( \frac{ 1 }{ 2 } )^7 > 1 \]

这下这下了.

纯律

其实我们刚才就能见到真正完美符合简单整数比的律根本调不出来.但是能不能让一些常用的音程(比如纯八度,纯五度,纯四度,大三度)尽可能准呢.这就是纯律在干的事.

还是规定\(C\)的频率为\(1\).接下来用正三和弦(一个大三度和一个小三度)\(I : C - E - G\),\(IV : F - A - C '\),\(V : G - B - D '\)的比例是\(4 : 5 : 6\)确定剩下的:

\[ \begin{aligned} C & & D & & E & & F & & G & & A & & B & & C ' & & D ' \\ 1 & & \frac{ 9 }{ 8 } & & \frac{ 5 }{ 4 } & & \frac{ 4 }{ 3 } & & \frac{ 3 }{ 2 } & & \frac{ 5 }{ 3 } & & \frac{ 15 }{ 8 } & & 2 & & \frac{ 9 }{ 4 } \end{aligned} \]

所以现在大三度和小三度都准了.但问题又来了:

  1. 五度音程\(D - A\)不协和,比例为\(\frac{ 80 }{ 54 } < \frac{ 81 }{ 54 } = \frac{ 3 }{ 2 }\).这直接导致了转调会出错.

  2. 有两种不同的大二度:音程\(C - D , F - G , A - B\)的比例是\(\frac{ 9 }{ 8 }\)而音程\(D - E , G - A\)的比例为\(\frac{ 10 }{ 9 }\).

  3. 谐调音差:从\(C\)出发升高四个纯五度,降低两个八度和一个大三度后,得到的是:\(( \frac{ 3 }{ 2 } )^4 \times ( \frac{ 1 }{ 2 } )^2 \times \frac{ 4 }{ 5 } = \frac{ 81 }{ 80 } = 1 . 0125 > 1\).

十二平均律

既然我们一开始就说了律是根据比值来定的,为什么不直接简单一点,干脆用\(\sqrt[12]{ 2 }\)来平均律制呢?于是将近五百年前就有了朱载堉这位手开十二次根号的神人.这也是所有律法中几乎最简单的一种了,以至于我到这里发现没啥可写的了.

但它的问题也是最一眼能看出来的,那就是除了纯八度,全都不准.

先在这里定义音分的概念,设两个声音的频率分别是\(f_1 , f_2\),则它们的音分数定义为\(1200 \log_2 ( \frac{ f_2 }{ f_1 } )\),容易见到十二平均律拿到的一个半音恰好是\(100\)音分.

用音分可以迅速确定一下,发现十二平均律这玩意准的离谱,虽然哪里都差一点,但哪里差的都不多.

调式

大小调

自然大调

就是我们最常用的\(CDEFGABC '\),用大二度和小二度组织调式.具体而言,以一个大二度分开了两组四声音阶(均为大大小),按顺序分别为:

  1. 主音

  2. 上主音

  3. 中音

  4. 下属音

  5. 属音

  6. 下中音

  7. 导音

用五度相生,下属音\(\rightarrow\)主音\(\rightarrow\)属音.

自然小调

以一个大二度分开了两组四声音阶(分别为大小大和小大大)

\(ABCDEFG\)用的调子,然而这里的问题是\(G\)作为导音却和\(A '\)差了个全音,导得不好.

和声小调

以一个大二度分开了两组四声音阶(分别为大小大和小增小)

将自然小调的导音升高一个半音.用\(A , B , C , D , E , F , (^\# G )\).

但是这样出了个增二度.

旋律小调

以一个大二度分开了两组四声音阶(分别为大小大和大大小)

把下中音也升上去,这样差的就小,用\(A , B , C , D , E , (^\# F ) , (^\# G )\).

可以见到小调改音的主要目的是为了调导音的作用,这种作用只有在上行音阶的时候才是需要人为更改的,因此下行音阶不改音,与自然小调的下行音阶保持一致.

升降号调

以五度相生:

\[ C \to G \to D \to A \to E \to B \to (^\# F ) \to (^\# C ) \]

依次考虑它们为主调的自然大调音阶.

大调音阶的前后是对称的全全半+全+全全半结构,跳一个五度刚好能从前半部分跳到后半部分,因此从\(C\)开始每次往后跳一次都要在一个音阶上增一个升号.从\(C\)大调提升到\(G\)大调的时候就是将\(C\)的下属音(也就是\(F\))升音.

对称地,反方向的五度相生:

\[ C \to F \to (^b B ) \to (^b E ) \to (^b A ) \to (^b D ) \to (^b G ) \to (^b C ) \]

那这个应该降什么呢?比如从\(C\)大调提升到\(F\)大调的时候就是将\(F\)的下属音\(B\)降一个音对吧.

所以最后的结果就是:

一个自然大调将主音向前挪小三度就得到了一个自然小调,它们称为一对关系大小调.

具有相同主音的大小调被称为平行大小调.其实也就是名字精确到大小写是一样的.

一个大调的下属音大调和属音大调以及对应的关系小调称为其近关系调.

和弦

三和弦

按照三度音程叠起来的三个音所构成的和弦被称为三和弦.其中最下面的音被称为根音,最上面的音被称为冠音或者五音,中间的被称为三音.

由于三度音程分大小,所以就有了四种不同的三和弦.

  1. 大三和弦:下面一个大三度,上面一个小三度,刚好形成\(4 : 5 : 6\)的频率关系.

  2. 小三和弦:下面一个小三度,上面一个大三度.

  3. 减三和弦:两个小三度.

  4. 增三和弦:两个大三度.

七和弦

按照三度音程叠四个音构成的和弦被称为七和弦.除去其中由三个大三度构成的(这样使得最上方的七音和最底下的根音形成了八度)以外,其余七种七和弦依照三和弦名称+七度音阶名称的原则命名,如下:

  1. 减减七和弦(减七和弦):小小小.

  2. 减小七和弦(半减七和弦):小小大.

  3. 小小七和弦(小七和弦):小大小.

  4. 小大七和弦:小大大.

  5. 大小七和弦(属七和弦):大小小.

  6. 大大七和弦(大七和弦):大小大.

  7. 增大七和弦:大大小.

很遗憾的是七和弦全部包含至少一个不协和音程,所以它们全都是不协和和弦.

和弦转位

以根音为低音的和弦为原位和弦,以三五七音为低音的则称为转位和弦.

对于三和弦来说:

  1. 以三音作为低音的称为第一转位,也称作六和弦.

  2. 以五音作为低音的称为第二转位,也称作四六和弦.

对于七和弦来说:

  1. 以三音作为低音的称为第一转位,也称作五六和弦.

  2. 以五音作为低音的称为第二转位,也称作三四和弦.

  3. 以七音作为低音的称为第三转位,也称作二和弦.

和弦的调性

在调式的主音,下属音,属音上的和弦分别被称为主和弦(I),下属和弦(IV),属和弦(V),它们被统称为正和弦,在C大调中体现为\(C - E - G\),\(F - A - C '\),\(G - B - D '\).其中主和弦一般比较稳定,属和弦则比较飘渺,下属和弦往往则起到过度作用.

一定范围内的和弦连接被称为和声进行,下面是三种基本形式:

  1. 正格进行:\(I \to V \to I\).

  2. 变格进行:\(I \to IV \to I\).

  3. 复式进行:\(I \to IV \to V \to I\).

对于大调来说,其不同的三和弦之间有更加复杂的关系.经验给出以下图表:

\[ \xymatrix{ & & & & I \\ & & IV \ar[r] \ar[d] \ar[dr] \ar[rru] & vii \degree \ar[ru] & \\ iii \ar[r] & vi \ar[r] \ar[ru] & ii \ar[r] \ar[ru] & V \ar[ruu] & } \]

其中\(I\)较为特殊,可以走向全部的和弦,这里略去不画.

新黎曼理论

引入以下三种对三和弦的变换(均会使得大和弦变小和弦,小和弦变大和弦):

  1. 平行变换\(P\):保持纯五度音阶不变,将三音切换.

  2. 关系变换\(R\):保持大三度音阶不变,补上剩下的一个(等价于大小调转换).

  3. 导音变换\(L\):保持小三度音阶不变,补上剩下的一个.

容易见到\(R \circ ( L \circ R )^3 = P\).

随机化算法

基本分析

Union Bound

即:\(Pr [ \bigcup_i X_i ] \leq \sum Pr [ X_i ]\),取等当且仅当所有\(X_i\)互斥.

Markov 不等式

\(X \geq 0\),则\(Pr [ X \geq t \mathbb{ E } [ X ] ] \leq \frac{ 1 }{ t }\).

Example(Max-Cut算法)

一个无向无权图,将点集划分成两个部分,使得跨越这两部分的边尽可能多.

直接随机划分,容易见到每条边有\(\frac{ 1 }{ 2 }\)的概率是割边,因此期望自然是\(\frac{ 1 }{ 2 } | E | \geq \frac{ 1 }{ 2 } | \text{ max - cut } |\).

由此立即见到,\(Pr [ | ans | \leq ( \frac{ 1 }{ 2 } - \epsilon ) | E | ] = Pr [ | E | - | ans | \geq ( \frac{ 1 }{ 2 } + \epsilon ) | E | ] \leq \frac{ 1 }{ 1 + 2 \epsilon }\).

由于每次独立操作,因此如果有\(P\)的概率失败,那么运行\(T\)次后至少成功一次的概率应当为\(1 - P^T\).从而\(T = O ( \log_P{ \delta } ) = O ( \cfrac{ \ln \frac{ 1 }{ \delta } }{ \ln ( 1 +{ 2 \epsilon } ) } ) \approx O ( \cfrac{ \ln \frac{ 1 }{ \delta } }{ \epsilon } )\)即可拿到\(\delta\)失败概率.

Chernoff Bound

\(X_1 , \cdots , X_n \in [ 0 , 1 ]\)是独立,同期望(期望为\(\mu \geq t\))的随机变量,令\(X = \frac{ \sum_k X_k }{ n }\),对于任何失败概率\(\delta \in ( 0 , 1 )\),应当有:

\[ Pr \left [ | X - \mu | \geq \sqrt{ \cfrac{ \log ( 1 / \delta ) }{ nt } } \mu \right ] \leq \delta \]

Example(Median Trick)

现在有一个黑盒能够以\(p > \frac{ 1 }{ 2 }\)的概率正确回答Yes或者No,问重复\(T\)选多少次能拿到\(1 - \delta\)的成功概率.

考虑重复\(T\)次后应当有期望\(pT\)个正确答案,因此直接取中位数.称此算法为Median Trick.

Chernoff Bound 告诉我们\(T = O ( \log \frac{ 1 }{ \delta } )\)足够.

Hoeffding 不等式

设独立随机变量\(x_1 , \cdots , x_m \in [ s , t ]\),令\(X = \sum_i x_i\),则:

\[ Pr [ X - E [ X ] \geq z ] \leq 2 \exp \left ( - \cfrac{ 2 z^2 }{ m ( t - s )^2 } \right ) \]

编程中的随机性

一般采用伪随机,也即是给定初值\(X_0\),通过某个确定性的函数来生成\(X_{ n + 1 } = f ( X_n )\)这样的.

数值概率算法

即通过随机选取元素从而求得在数值上的近似解.较之于传统算法,其运行速度更快,而且随着运行时间的增加,近似解的精度也会提高.在不可能或不必要求出问题的精确解时,可以使用其得到相当满意的近似解,如随机撒点法(近似求难以计算的图形面积).

Monte Carlo算法

总是能在确定的运行时间内出解,但是得到的解有一定概率是错的.通常出错的概率比较小,因此可以通过反复运行算法来得到可以接受的正确率.

求解最优化问题的Monte Carlo算法

事实上,大部分最优化问题都可以转化为判定性问题:也就是判定一个解是否是最优解,因此我们接下来基本都是讨论的求解判定性问题的Monte Carlo算法.

求解判定性问题的Monte Carlo算法
  1. 假倾向的Monte Carlo算法:当这类算法的返回值为假的时候,结果一定正确,但返回值为真的时候则有一定概率错误.

  2. 真倾向的Monte Carlo算法:当这类算法的返回值为真的时候,结果一定正确,但返回值为假的时候则有一定概率错误.

  3. 产生双侧错误的Monte Carlo算法:无论返回值为什么都有概率出错.基本不会使用.

以下讨论的Monte Carlo算法均为产生单侧错误的Monte Carlo算法.

正确率与复杂度

显然,如果我们有一个单词正确率为\(p\),时间复杂度为\(O ( f ( n ) )\)的算法,我们运行其\(k\)次,则正确率为\(1 - ( 1 - p )^k\),时间复杂度为\(O ( kf ( n ) )\).

算法设计思路1

我们来总结一下通常的Monte Carlo算法的设计思路:

设计一个能解决问题的确定性算法
  1. 这个算法需要枚举一些元素.

  2. 设这个算法的复杂度为\(O ( f ( n ) g ( n ) )\),其中\(f ( n )\)为枚举部分的复杂度,\(g ( n )\)为单词枚举中计算所需的复杂度.大部分情况下应保证\(g ( n )\)不会很大.

向算法引入随机化优化复杂度
  1. 随机化寻找元素来降低复杂度.

  2. 计算随机化情况下的正确率以及复杂度.

算法设计思路2
设计一个能解决问题的确定性算法
  1. 这个算法需要用到一个或多个传入的元素.

  2. 这个元素的值不应该依赖于输入数据.

  3. 我们可以通过check这个元素来得到与答案有关的信息.

向算法引入随机化优化复杂度
  1. 随机这个元素.

  2. 计算随机化情况下的正确率以及复杂度

Example
Example 1(Millar-Rabin算法)

Example2(CodeChef MSTONE)

平面上有\(n\)个互不重合的点,已知存在不超过\(7\)条直线可以覆盖全部的点,问在平面上作一条直线,最多能覆盖多少个点.\(n \leq 10000\).

考虑一个朴素的暴力:枚举两个点,确定一条直线,然后判断多少个点在这条直线上.但是这样复杂度是\(O ( n^3 )\)的.

考虑加入随机化.我们不妨每次随机两个点,注意到存在七条直线覆盖全部的点,那覆盖点最多的直线覆盖的点数一定不少于\(\lceil \frac{ n }{ 7 } \rceil\)个点.换句话说,我们随机一个点,这个点在这条直线上的概率是\(\frac{ 1 }{ 7 }\),因此随机两个点确定这条直线的概率为\(\frac{ 1 }{ 49 }\).随机\(1000\)次,错误概率为\(1 - ( \frac{ 48 }{ 49 } )^{ 1000 }\),是很小的.

Example3(CF364D Ghd)

给定一个长度为\(n\)的序列,要求找出一个长度大于等于\(\frac{ n }{ 2 }\)的子序列,使这个子序列中所有数的\(\gcd\)最大,求最大的\(\gcd\).\(n \leq 10^6\),\(a_i \leq 10^{ 12 }\).

注意到我们随机一个数,这个数在最终答案中的概率是\(\frac{ 1 }{ 2 }\).我们不妨直接随机这个数,然后枚举它的因子,判断每个因子在序列中的出现次数即可.但是这样单次复杂度\(O ( n \sqrt{ a } )\),好像不太能过.

冷静一下,我们不妨将这\(\sqrt{ a }\)个质因子全都存下来,然后将\(n\)个数也全都存下来,做狄利克雷后缀和即可.不过直接做可能还需要离散化/map,我们考虑先把所有数与我们随机到的那个数取一个\(\gcd\),这样所有数就都是这个数的因子,可以使用大小因子分别编号来实现.

Example4([POI2014]Couriers)

给定长度为\(n\)的序列\(a\),有\(m\)次询问,每次给定一个区间\([ l , r ]\),问\(a [ l , r ]\)中是否存在出现次数严格大于其它所有数出现次数之和的数,如果存在请输出.\(( n , m \leq 500000 , 1 \leq a_i \leq n )\).

先存下来每个位置的数是第几次出现,我们就可以利用二分快速找到一个区间内某个数出现次数.接下来只需要随机化找这个区间内某个数并判断是否满足条件即可.

Example5([NOI2013] 向量内积)

先考虑\(k = 2\)的情况:

首先,我们自然可以枚举一个向量\(A\)并判断它与其它向量的内积,这样复杂度为\(O ( n^2 d )\).

冷静一下,这个过程其实就是一个矩阵乘法的过程:我们设\(A = \begin{bmatrix}\vec{ a_1 } , \vec{ a_2 } , . . . , \vec{ a_n }\end{bmatrix}\),那我们要验证的无非是\(B = AA^T\)中是否存在一个不在主对角线上的元素\(B_{ i , j }\)\(\mod 2\)意义下为\(0\).

这咋做啊?我们冷静一下,构造一个矩阵\(C\),其中\(C\)的主对角线元素与\(B\)相同,而其他元素全是\(1\).接下来我们要做的无非是找到\(B\)\(C\)不同的地方.

这咋办呢?我们考虑这么一点:如果\(B = C\),那么对于任意一个\(X_{ m \times n }\)都应该满足\(XB = XC\),取\(m = 1\),我们的问题就转化为:是否能找到一个\(X\),使得\(XB \ne XC\)?这显然可以随机化.计算前者的复杂度为\(O ( nd )\),后者由于\(C\)很特殊,可以在\(O ( n )\)的时间内求出.这样我们就保证了算法复杂度上的合理性.

接下来,我们要证明其正确率上的合理性.这个算法显然是单侧错误的Monte Carlo算法.问题在于正确率:

\(D = B - C\),若返回相等但实际上不相等,则\(D\)中至少存在一个不为\(0\)的数字,假设\(D_{ i , j } \ne 0\).我们令\(E = X \times D\),那么只有当\(E\)是零向量时才会错误.而\(E_j = \sum_{ k } X_k D_{ k , j }\),不难解得:\(E_i = - \frac{ 1 }{ D_{ i , j } } \sum_{ k \ne i } X_k D_{ k , j }\),也就是说如果\(X\)的其它位置都确定了,那么\(E\)只有一种取值会返回错误.由于\(k\)一共就俩取值,所以正确率至少\(\frac{ 1 }{ 2 }\).

至于找到答案:我们找到一个不为\(0\)\(E_i\),那么一定存在一组解包含了第\(i\)个向量,只需枚举另一个向量检验就行,复杂度\(O ( nd )\).

\(k = 3\)的话,我们注意到\(\mod 3\)意义下,\(1\)\(2\)的平方都是\(1\).考虑\(\sum_{ j } B_{ i , j }^2 X_j = \sum_{ j } B_{ i , j } X_j B_{ h , i }^T\),大概做做.

Las Vegas算法(Sherwood算法)

总是能返回正确的结果,但是其运行时间不确定.对于一些平均时间复杂度优秀,但是最坏情况下复杂度较高的确定性算法,通过引入随机函数,尝试减小最坏情况的可能性,以在期望意义下达到优秀的时间复杂度.

算法设计思路
设计一个能解决问题的确定性算法
  1. 这个算法需要枚举全排列.

  2. 通常,问题问的是要么只是可行解而不是最优解,要么最优方案特别多,总之要保证有用的排列个数不会太少

向算法引入随机化优化复杂度
  1. 随机化寻找排列来降低复杂度.

  2. 通常证明复杂度和正确率巨大麻烦,这里建议直接实践证明.

Example
快速排序算法

我们试图计算它的期望时间复杂度:

不妨设\(T ( n )\)表示对长度为\(n\)的序列运行快速排序算法所需的期望时间,我们有:

\[ \begin{aligned} T ( 0 ) & = 0 \\ T ( n ) & = n + \frac{ 1 }{ n } \sum_{ i = 0 }^{ n - 1 } ( T_i + T_{ n - i - 1 } ) \end{aligned} \]

做放缩(可能有些地方需要\(+ 1\)或者\(- 1\)或者加取整,但是问题不大,反正是期望):

\[ \begin{aligned} T ( n ) & = n + \frac{ 1 }{ n } \sum_{ i = 0 }^{ n - 1 } ( T_i + T_{ n - i - 1 } ) \\ & = n + \frac{ 2 }{ n } \sum_{ i = \frac{ n }{ 2 } }^{ n - 1 } ( T_i + T_{ n - i - 1 } ) \\ & = n + \frac{ 2 }{ n } \sum_{ i = \frac{ n }{ 2 } }^{ \frac{ 3 n }{ 4 } } ( T ( i ) + T ( n - i - 1 ) ) + \frac{ 2 }{ n } \sum_{ i = \frac{ 3 n }{ 4 } }^{ n } ( T ( i ) + T ( n - i - 1 ) ) \end{aligned} \]

由于\(T ( n ) \geq n\),所以对于\(\frac{ n }{ 2 } \leq i \leq j\),我们显然有:\(T ( i ) + T ( n - i ) \leq T ( j ) + T ( n - j )\).

因此:

\[ \begin{aligned} T ( n ) & \leq n + \frac{ 2 }{ n } \sum_{ i = \frac{ n }{ 2 } }^{ \frac{ 3 n }{ 4 } } ( T ( \frac{ 3 n }{ 4 } ) + T ( \frac{ n }{ 4 } ) ) + \frac{ 2 }{ n } \sum_{ i = \frac{ 3 n }{ 4 } }^{ n } ( T ( n - 1 ) + T ( 0 ) ) \\ & \leq n + \frac{ 1 }{ 2 } ( T ( \frac{ 3 n }{ 4 } ) + T ( \frac{ n }{ 4 } ) + T ( n - 1 ) ) \end{aligned} \]

我们要证明\(\exists c\),\(T ( n ) \leq cn \log n\),考虑使用数学归纳法,则:

\[ \begin{aligned} T ( n ) & \leq n + \frac{ 1 }{ 2 } ( \frac{ 3 cn }{ 4 } \log ( \frac{ 3 n }{ 4 } ) + \frac{ cn }{ 4 } \log ( \frac{ n }{ 4 } ) + c ( n - 1 ) \log ( n - 1 ) ) \\ & \leq n + c ( \frac{ 3 n }{ 8 } \log n - \frac{ 3 n }{ 8 } \log \frac{ 4 }{ 3 } + \frac{ n }{ 8 } \log n - \frac{ n }{ 4 } + \frac{ n }{ 2 } \log n ) \\ & = cn \log n + n ( 1 - \frac{ 3 c }{ 8 } \log ( \frac{ 4 }{ 3 } ) - \frac{ c }{ 4 } ) \end{aligned} \]

于是显然存在,假设成立.

一类由Monte Carlo算法改造而成的算法

对于一类一定有解的构造性问题,假设我们有一个正确率为\(p\),时间复杂度为\(O ( f ( n ) )\)的产生单侧错误的Monte Carlo算法,我们时图将其改造为Las Vegas算法,我们现在想知道它的期望复杂度.

设其期望运行\(k\)次,则:

\[ \begin{aligned} k & = \sum_{ i = 1 }^{ \infty } p ( 1 - p )^{ i - 1 } i \\ ( 1 - p ) k & = \sum_{ i = 1 }^{ \infty } p ( 1 - p )^i i \\ pk & = \sum_{ i = 2 }^{ \infty } p ( 1 - p )^{ i - 1 } = p \sum_{ i = 0 }^{ \infty } ( 1 - p )^i \\ k & = \frac{ 1 }{ p } \end{aligned} \]

则期望复杂度为\(O ( \frac{ f ( n ) }{ p } )\).

Example3(CF329C Graph Reconstruction)
Example4([Petrozavodsk Summer-2015. Moscow IPT Contest B]Game With A Fairy)

首先注意到一个问题:操作能得到的信息太少了,应该是没有什么确定性算法.因此考虑随机化,那就肯定要先将整个序列random_shuffle一下.

然后呢?我们考虑之后随机选取新序列的一个前缀询问,只要有大致的正确性/复杂性估计应该就是很正确的.

这里有一种方式:考虑这个前缀中第一个有宝藏的位置\(x_1\)和第二个位置\(x_2\),显然只要问到\([ x_1 , x_2 )\)是正确的.

考虑因为是随机,所以\(x_1 \times 2 \leq x_2\)的概率应当是不低的(事实上约为\(\frac{ 1 }{ 2 }\)),而此时的\([ x_1 , x_2 )\)中必有一个位置是二的整数幂,因此我们查询一个等比数列:\(1 , 2 , 4 , . . .\).每次random_shuffle后就查一次,就可以得到一个正确性较高的Las Vegas算法.

爬山与模拟退火

爬山

也就是随机一个起始的解,然后走向与其相邻的较大的解.

但是这样会卡在一个局部最优解上而得不到全局最优解.

于是我们就有了模拟退火算法.

模拟退火

简而言之,模拟退火就是以一定的概率跳到随机的不优秀的点,这样就避免卡在了局部最优解上.不妨设我们想找到最大解,如果要最小解那就稍微改改.

下面给出这个概率的公式:

\[ P = \begin{cases} 1 & E_{ t + 1 } > E_t \\ e^{ \frac{ E_{ t + 1 } - E_t }{ T } } & E_{ t + 1 } \leq E_t \end{cases} \]

具体流程是,先设定一个初始温度\(T_0\),降温速度\(k \in ( 0 , 1 )\),以及终止温度\(T_k\),每次操作后让\(T = kT\),直到其小于终止温度.

离散概率

基本定义

概率空间\(\Omega\):在一个给定问题中可能发生的所有情况.

事件:\(\Omega\)的一个子集.

基本事件\(\omega\):\(\Omega\)中的单个元素,也可以看作集合大小为\(1\)的事件.

概率:若\(\omega \in \Omega\),我们称它发生的概率为\(\Pr ( \omega )\),有\(\Pr ( \omega ) \geq 0\)\(\sum_{ \omega \in \Omega } \Pr ( \omega ) = 1\).

随机变量:在概率空间的基本事件上定义的函数.

联合分布:如果两个随机变量\(X\)\(Y\)定义在同一个概率空间\(\Omega\)上,对于每一个在\(X\)取值范围内的\(x\)以及在\(Y\)取值范围内的\(y\),我们称\(\Pr ( X = x \land Y = y )\)为它们的联合分布.

独立:如果对于每一个在\(X\)取值范围内的\(x\)以及在\(Y\)取值范围内的\(y\),\(\Pr ( X = x \land Y = y ) = \Pr ( X = x ) \times \Pr ( Y = y )\),我们称\(X\)\(Y\)是独立的.

期望(均值)\(E X\):我们设概率空间上的随机变量\(X\)的期望\(EX = \sum_{ x \in X ( \Omega ) } x \times \Pr ( X = x ) = \sum_{ w \in \Omega } X ( \omega ) \Pr ( \omega )\).

中位数:我们设概率空间上的随机变量\(X\)的中位数为满足\(\Pr ( X \leq x ) \geq 0 . 5 \land \Pr ( X \geq x ) \geq 0 . 5\)\(x \in X ( \Omega )\)所组成的集合.

众数:我们设概率空间上的随机变量\(X\)的众数为满足\(\Pr ( X = x ) \geq \Pr ( X = x ' ) , \forall x ' \in X ( \Omega )\)\(x \in X ( \Omega )\)所组成的集合.

方差\(VX\):我们设概率空间上的随机变量\(X\)的方差\(VX = E ( ( X - EX )^2 )\).

标准差\(\sigma\):我们设概率空间上的随机变量\(X\)的标准差\(\sigma = \sqrt{ VX }\).

期望的简单运算

如果\(X , Y\)是定义在同一个概率空间上的两个随机变量,那么:

  1. \(E ( X + Y ) = EX + EY\).

  2. \(E ( \alpha X ) = \alpha EX\).

  3. 如果\(X\)\(Y\)互相独立,那么\(E ( XY ) = ( EX ) ( EY )\).

上述法则都可以通过期望的定义简单证明.

方差的简单运算

我们考虑方差的定义式:

\[ \begin{aligned} E ( ( X - EX )^2 ) & = E ( X^2 - 2 X ( EX ) + ( EX )^2 ) \\ & = E ( X^2 ) - 2 ( EX ) ( EX ) + ( EX )^2 \\ & = E ( X^2 ) - ( EX )^2 \end{aligned} \]

也即:方差等于随机变量平方的均值减均值的平方.

\(X\)\(Y\)为独立的随机变量时,我们有:

\[ \begin{aligned} V ( X + Y ) & = E ( ( X + Y )^2 ) - ( EX + EY )^2 \\ & = E ( ( X + Y )^2 ) - ( EX )^2 - 2 ( EX ) ( EY ) - ( EY )^2 \end{aligned} \]

而又有:

\[ \begin{aligned} E ( ( X + Y )^2 ) & = E ( X^2 + 2 XY + Y^2 ) \\ & = E ( X^2 ) + 2 ( EX ) ( EY ) + E ( Y^2 ) \end{aligned} \]

则:

\[ \begin{aligned} V ( X + Y ) & = E ( X^2 ) + 2 ( EX ) ( EY ) + E ( Y^2 ) - ( EX )^2 - 2 ( EX ) ( EY ) - ( EY )^2 \\ & = VX + VY \end{aligned} \]

即:独立随机变量之和的方差等于它们的方差之和.

接下来,我们可以得到切比雪夫不等式:

\[ \Pr ( ( X - EX )^2 \geq \alpha ) \leq \cfrac{ VX }{ \alpha } , \alpha > 0 \]

证明如下:

\[ \begin{aligned} VX & = \sum_{ \omega \in \Omega } ( X ( \omega ) - EX )^2 \Pr ( \omega ) \\ & \geq \sum_{ \omega \in \Omega } ( X ( \omega ) - EX )^2 \Pr ( \omega ) [ ( X ( \omega ) - EX )^2 \geq \alpha ] \\ & \geq \sum_{ \omega \in \Omega } \alpha \Pr ( \omega ) [ ( X ( \omega ) - EX )^2 \geq \alpha ] \\ & = \alpha \Pr ( ( X - EX )^2 \geq \alpha ) \end{aligned} \]

如果我们用\(c^2 VX\)代替\(\alpha\),我们就有:

\(\Pr ( | X - EX | \geq c \sigma ) \leq \cfrac{ 1 }{ c^2 }\).

简单来说,这个不等式说明:\(X\)落在\(( EX - c \sigma , EX + c \sigma )\)之外的概率至多为\(\cfrac{ 1 }{ c^2 }\).

另外,如果我们取\(n\)个独立的样本\(X_1 , X_2 , . . . , X_n\),令\(S = \sum_{ i = 1 }^n X_i\),那么它的均值是\(nEX\),标准差是\(\sqrt{ n } \sigma\),也就是说,\(\cfrac{ S }{ n }\)落在\(( EX - \cfrac{ c \sigma }{ \sqrt{ n } } , EX + \cfrac{ c \sigma }{ \sqrt{ n } } )\)之外的概率小于等于\(\cfrac{ 1 }{ c^2 }\).

随机抽样调查

如果我们随机取得了\(n\)个值\(X_1 , X_2 , . . . , X_n\),那么我们可以通过这些值来估计概率空间的期望和方差.

\(\hat EX = \cfrac{ \sum_{ i = 1 }^n X_i }{ n }\).

\(\hat VX = \cfrac{ \sum_{ i = 1 }^n X_i^2 }{ n - 1 } - \cfrac{ ( \sum_{ i = 1 }^n X_i )^2 }{ n ( n - 1 ) }\).

这里的\(\hat VX\)似乎与定义不是那么相符.但是它拥有更好的性质:\(E ( \hat VX ) = VX\).

证明如下:

\[ \begin{aligned} E ( \hat VX ) & = \cfrac{ 1 }{ n - 1 } E ( \sum_{ i = 1 }^n X_i^2 - \cfrac{ 1 }{ n } \sum_{ j = 1 }^n \sum_{ k = 1 }^n X_j X_k ) \\ & = \cfrac{ 1 }{ n - 1 } ( \sum_{ i = 1 }^n E ( X_i^2 ) - \cfrac{ 1 }{ n } \sum_{ i = 1 }^n \sum_{ j = 1 }^n E ( X_i X_j ) ) \\ & = \cfrac{ 1 }{ n - 1 } ( \sum_{ i = 1 }^n E ( X^2 ) - \cfrac{ 1 }{ n } \sum_{ i = 1 }^n \sum_{ j = 1 }^n ( ( EX )^2 [ j \ne k ] + E ( X^2 ) [ j = k ] ) ) \\ & = \cfrac{ 1 }{ n - 1 } ( nE ( X^2 ) - \cfrac{ 1 }{ n } ( nE ( X^2 ) + n ( n - 1 ) ( EX )^2 ) ) \\ & = E ( X^2 ) - ( EX )^2 \\ & = VX \end{aligned} \]

条件概率

已知事件B发生时事件A发生的概率为\(P ( A | B ) = \frac{ P ( AB ) }{ P ( B ) } \\\).

贝叶斯公式

贝叶斯公式:如果有\(\{ B_i \}\)是样本空间的一个划分,即\(\forall i , j\),有\(B_i \cap B_j = \emptyset\),并且有\(\bigcup_{ i = 1 }^n B_i = \Omega\).则有\(P ( B_i | A ) = \frac{ P ( AB_i ) }{ P ( A ) } = \frac{ P ( AB_i ) }{ P ( A ) \sum P ( B_j ) } = \frac{ P ( A B_i ) }{ \sum_{ j = 1 }^n P ( A B_j ) } = \frac{ P ( A | B_i ) P ( B_i ) }{ \sum_{ j = 1 }^n P ( A | B_j ) P ( B_j ) } \\\).

简化形式:\(P ( B | A ) = \frac{ P ( A | B ) P ( B ) }{ P ( A ) } \\\).

另外,我们考虑设\(O ( B ) = \cfrac{ P ( B ) }{ P ( \lnot B ) }\),称\(\cfrac{ P ( B | E ) }{ P ( \lnot B | E ) }\)为贝叶斯算子,则同理可得:

\[ O ( B | E ) = O ( B ) \cfrac{ P ( B | E ) }{ P ( \lnot B | E ) } \]

这个公式更加精准地分开了先验概率和后验概率,也表现了贝叶斯算子对先验概率的改变.

概率生成函数

如果\(X\)是定义在概率空间\(\Omega\)上的随机变量,那么它的概率生成函数为\(G_X ( z ) = \sum_{ k \geq 0 } \Pr ( X = k ) z^k = E ( z^X )\).

不难发现\(G_X ( z )\)需要满足的条件:所有系数都非负并且\(G_X ( 1 ) = 1\).

我们发现,当我们定义了概率生成函数后,期望和方差都可以使用它来表示:

\[ \begin{aligned} EX & = G_X ' ( 1 ) \\ E ( X^2 ) & = G ' '_X ( 1 ) + G_X ' ( 1 ) \\ VX & = G_X ' ' ( 1 ) + G_X ' ( 1 ) - ( G_X ' ( 1 ) )^2 \end{aligned} \]

通常,我们也可以将方差和均值的定义扩展到任意函数上,于是我们定义:

\[ \begin{aligned} Mean ( G ) & = G ' ( 1 ) \\ Var ( G ) & = G ' ' ( 1 ) + G ' ( 1 ) - ( G ' ( 1 ) )^2 \end{aligned} \]

不过,求导的过程可能会有些麻烦,但我们可以直接使用泰勒定理:

\[ G ( 1 + t ) = \sum_{ i \geq 0 } \cfrac{ G^{ ( i ) } ( 1 ) }{ i ! } t^i \]

另外,我们不难发现:\(G_{ X + Y } ( z ) = G_X ( z ) G_Y ( z )\).

根据前面的推导,我们有:

\[ \begin{aligned} Mean ( G_{ X + Y } ) & = Mean ( G_X ) + Mean ( G_Y ) \\ Var ( G_{ X + Y } ) & = Var ( G_X ) + Var ( G_Y ) \end{aligned} \]

换句话说,若\(G_X ( 1 ) = 1 , G_Y ( 1 ) = 1\),那么这个式子与直接对\(G_{ X + Y }\)使用求导的那个公式是等价的.注意,这里并没有要求这些生成函数的系数是非负的.

于是我们有了另一个法则:

\[ \begin{aligned} Mean ( G_X ) & = Mean ( G_{ X + Y } ) - Mean ( G_Y ) \\ Var ( G_X ) & = Var ( G_{ X + Y } ) - Var ( G_Y ) \end{aligned} \]

Example1

一枚硬币正面向上的概率为\(p\),反面向上的概率为\(q\),设硬币正面向上为H,反面向上为T,不断抛掷硬币直到抛掷出连续的THTTH为止,求期望次数.

考虑设\(N\)为所有不包含THTTH的硬币序列的生成函数,\(S\)为所有只有结尾为THTTH的硬币序列的生成函数,令\(H = pz , T = qz\),\(1\)为空集,我们显然有:

\[ \begin{aligned} 1 + N \times ( H + T ) & = N + S \\ N \times THTTH & = S + S \times TTH \end{aligned} \]

解方程即可.

另外不难发现,这种方法取决于字符串的所有border,显然是通用方法.

我们考虑扩展这个方法,设\(A\)是我们要找到的字符串,\(m\)是它的长度,令\(A^{ ( k ) }\)表示\(A\)字符串的前\(k\)个字符所组成的字符串,\(A_{ ( k ) }\)表示\(A\)字符串的后\(k\)个字符所组成的字符串.这样的形式与\(k\)阶导的形式可能会起冲突,但至少在接下来我们的式子中不会出现导数(好吧其实是因为《具体数学》上就这么写的我也懒得改了).

我们的方程将会变为:

\[ \begin{aligned} 1 + N ( H + T ) & = N + S \\ N \times A & = S ( \sum_{ k = 0 }^{ m - 1 } A^{ ( k ) } [ A^{ ( m - k ) } = A_{ ( m - k ) } ] ) \end{aligned} \]

如果我们设\(\tilde{ A }\)为将字符串\(A\)中的H替换成\(\cfrac{ 1 }{ p } z\),T替换成\(\cfrac{ 1 }{ q } z\)之后的值,那么显然有:

\[ \begin{aligned} N \times A & = A \times S \times ( \sum_{ k = 1 }^{ m } \tilde{ A }_{ ( k ) } [ A^{ ( k ) } = A_{ ( k ) } ] ) \\ N & = S \times ( \sum_{ k = 1 }^{ m } \tilde{ A }_{ ( k ) } [ A^{ ( k ) } = A_{ ( k ) } ] ) \\ \cfrac{ S - 1 }{ H + T - 1 } & = S \times ( \sum_{ k = 1 }^{ m } \tilde{ A }_{ ( k ) } [ A^{ ( k ) } = A_{ ( k ) } ] ) \\ S \times ( 1 + ( 1 - H - T ) \times ( \sum_{ k = 1 }^{ m } \tilde{ A }_{ ( k ) } [ A^{ ( k ) } & = A_{ ( k ) } ] ) ) = 1 \end{aligned} \]

这显然是一个卷积的形式.

\(w = \sum_{ k = 1 }^{ m } \tilde{ A }_{ ( k ) } [ A^{ ( k ) } = A_{ ( k ) } ]\).

\(H ( z ) = 1\),\(F ( z ) = ( 1 + ( 1 - z ) \times w )\),\(G ( z ) = S\).

那么我们显然可以直接求\(G ( z )\)的期望和方差,事实上:

\[ \begin{aligned} EX & = \sum_{ k = 1 }^{ m } \tilde{ A }_{ ( k ) } [ A^{ ( k ) } = A_{ ( k ) } ] \\ VX & = ( EX )^2 - \sum_{ k = 1 }^m ( 2 k - 1 ) \tilde{ A }_{ ( k ) } [ A^{ ( k ) } = A_{ ( k ) } ] \end{aligned} \]

如果硬币是均匀的(\(p = q = \cfrac{ 1 }{ 2 }\))我们引入另一个符号:我们设\(A : A = \sum_{ k = 1 }^m 2^{ k } [ A^{ ( k ) } = A_{ ( k ) } ]\).那么显然期望需要的抛硬币次数就是\(( A : A )\).

Example2(Penney游戏)

一枚均匀硬币,设硬币正面向上为H,反面向上为T.不断扔硬币直到扔出连续的HHT或HTT为止,求最后以HHT结尾的概率.

我们设\(S_A\)为所有以HHT结尾的硬币序列的生成函数,设\(S_B\)为所有以HTT结尾的硬币序列的生成函数.\(N\)为其它的硬币序列的生成函数,令\(H = T = 0 . 5 z\).

我们显然有:

\[ \begin{aligned} 1 + N ( H + T ) & = N + S_A + S_B \\ N \times HHT & = S_A \\ N \times HTT & = S_A \times T + S_B \end{aligned} \]

解方程并带入\(z = 1\),可以有得知以HHT结尾的概率为\(\cfrac{ 2 }{ 3 }\).

事实上,我们使用类似Example1的方法,设这两个硬币序列分别为\(A\)\(B\),那么可以求出:

\[ \cfrac{ S_A }{ S_B } = \cfrac{ B : B - B : A }{ A : A - A : B } \]

Example3([SDOI2017] 硬币游戏)

是Example2的超级加强版.

把上面的东西给形式化一下,不妨设\(g_i\)表示进行了\(i\)步还未结束的概率,\(f_{ k , i }\)为进行了\(i\)步恰好第\(k\)个人胜利的概率,\(F , G\)是它们的生成函数,我们自然有:

  1. \(1 + xG ( x ) = \sum_k F_k ( x ) + G ( x )\).

  2. \(( \frac{ 1 }{ 2 } x )^L G ( x ) = \sum_{ j = 1 }^n F_j ( x ) \sum_{ i = 0 }^{ L - 1 } ( \frac{ 1 }{ 2 } x )^i [ A_k^{ ( L - i ) } ={ A_j }_{ ( L - i ) } ]\).

第一个式子的用处在于带入\(x = 1\),发现\(\sum_{ k } F_k ( 1 ) = 1\).

把(2)化简一下,有:

\[ \begin{aligned} x^L G ( x ) & = \sum_{ j = 1 }^n F_j ( x ) \sum_{ i = 0 }^{ L - 1 } ( \frac{ 1 }{ 2 } x )^{ i - L } [ A_k^{ ( L - i ) } ={ A_j }_{ ( L - i ) } ] \\ x^L G ( x ) & = \sum_{ j = 1 }^n F_j ( x ) \sum_{ i = 1 }^{ L } ( \frac{ 1 }{ 2 } x )^{ - i } [ A_k^{ ( i ) } ={ A_j }_{ ( i ) } ] \end{aligned} \]

带入\(x = 1\),有:

\[ G ( 1 ) = \sum_{ j = 1 }^n F_j ( 1 ) \sum_{ i = 1 }^{ L } 2^i [ A_k^{ ( i ) } ={ A_j }_{ ( i ) } ] \]

不难发现对于不同的\(k\),(2)的右边不同,而左边一定相同,这样就给出了\(n\)个等式,算上(1)一共有\(n + 1\)个等式,可以算出\(G ( 1 ) , F_{ 1 \cdots n } ( 1 )\)\(n + 1\)个未知数.

二项式分布

现在有一个大小为\(n + 1\)的概率空间,其中\(\Pr ( \omega_k ) = \binom{ n }{ k } p^k q^{ n - k } \\\),我们把这样的概率序列称为二项式分布.

如果我们令\(H ( z ) = q + pz\),不难发现二项式分布的生成函数为\(H ( z )^n\).

不难发现,满足二项式分布的随机变量的均值是\(np\),方差是\(npq\).

与二项式分布相对应的还有负二项式分布,它的生成函数形如:\(G ( z )^n = ( \cfrac{ p }{ 1 - qz } )^n = \sum_{ k } \binom{ n + k - 1 }{ k } p^n q^k z^k\).

我们考虑如何求\(G ( z )\)的方差和均值,不妨设\(F ( z ) = \cfrac{ 1 - qz }{ p } = \cfrac{ 1 }{ p } - \cfrac{ q }{ p } z\),则\(G ( z )^n = F ( z )^{ - n }\).

不难发现\(F ( z )\)满足二项式分布.也就是说,以\(( n , p , q )\)为参数的负二项式分布也就是以\(( - n , - \cfrac{ q }{ p } , \cfrac{ 1 }{ p } )\)为参数的二项式分布.

模型

树上随机游走

随机游走指每次从相邻的点中随机选一个走过去, 重复这样的过程若干次.

Example1

给一棵所有边长都为\(1\)\(n\)个点的树,问所有点对\(( i , j ) ( 1 \leq i , j \leq n )\)中,从\(i\)走到\(j\)的期望距离的最大值是多少.

由于树上简单路径唯一,我们考虑设\(f_u\)表示\(u\)随机走到它父亲的期望,\(g_v\)表示\(v\)的父亲(假设是\(u\))走到\(v\)的期望.

对于\(f_u\),我们有:

\[ \begin{aligned} f_u & = \cfrac{ \sum_{ u \rightarrow v } ( f_v + f_u ) }{ \deg_u } + 1 \\ f_u & = \deg_u + \sum_{ u \rightarrow v } f_v \end{aligned} \]

对于\(g_v\),我们有:

\[ \begin{aligned} g_v & = \cfrac{ g_u + g_v + \sum_{ u \rightarrow w , w \ne v } ( g_v + f_w ) }{ \deg_u } + 1 \\ g_v & = g_u + \sum_{ u \rightarrow w , w \ne v } f_w + \deg_u \end{aligned} \]

Example2

给出一棵\(n\)个节点的树,每个点有可能是黑白两种颜色的一种.

现在从\(1\)号点开始随机游走(即走这个点的每条出边的概率是相同的),每到一个点,如果这个点是黑点,或者这是白点并且这个点第一次经过,那么答案\(+ 1\).当走到度数为\(1\)的节点时游走停止.

注意到黑白点对答案的贡献是互相独立的,所以分开讨论:

如果只有黑点,那么显然答案就是路径的期望长度,我们设\(f_u\)表示以\(u\)为起点的路径的期望长度,不难注意到\(f_{ leaf } = 1\)\(f_u = 1 + \cfrac{ 1 }{ \deg_u } \sum_{ u \rightarrow v \lor v \rightarrow u } f_v\).这个dp转移显然是有后效性的,可以使用高斯消元做,但有一个经典做法:我们求得\(f_u = k_u f_{ fa } + b_u\),然后就可以采取带入化简的方法做了.

如果只有白点,考虑每个点只会贡献一次,所以我们要求出的就是每个点被走到的概率.注意到一个点被走到一定是从它父亲走来的,于是我们需要求出\(g_v\)表示从\(v\)的父亲(假设是\(u\))走到\(v\)的概率,再令\(f_u\)表示从\(u\)走到父亲的概率,类似Example1,我们有:

\[ \begin{aligned} f_u & = \cfrac{ 1 }{ \deg_u } ( 1 + \sum_{ u \rightarrow v } f_v f_u ) \\ g_v & = \cfrac{ 1 }{ \deg_u } ( 1 + g_v g_u + \sum_{ u \rightarrow w , w \ne v } f_w g_v ) \end{aligned} \]

最后把两部分答案合起来就好.

计数与期望的转换

Example(CodeChef Secplayer)

冷静一下,如果我们直接计数的话会发现巨大难做,因为项太多了,直接乘起来也太麻烦了.

这启发我们:当我们注意到一个计数题的各种情况相乘很麻烦的时候,我们不妨只考虑一种情况并计算期望,然后拿期望和总数反推计数.注意到权值最小的人最危险,他不能和其他任何一个人匹配到,不然就死了.那不难求得此时他作为次大值存活的概率为\(\frac{ 1 }{ \binom{ n }{ 2 } }\).

把所有人权值从大到小排序,设\(f_i\)表示只考虑前\(i\)个人的时候的期望,不难发现:\(f_{ i } = \frac{ 1 }{ \binom{ i }{ 2 } } v_i + ( 1 - \frac{ 1 }{ \binom{ i }{ 2 } } ) f_{ i - 1 }\).

一些小技巧

Example1(CF865C)

首先写出转移式子,但是存在后效性.如果我们设\(f_{ i , j }\)表示过了\(i\)关,花费为\(j\)的期望,不难发现所有的\(f\)都需要与\(f_{ 0 , 0 }\)\(\min\),这咋办?

我们考虑二分这个\(f_{ 0 , 0 }\),做的时候直接取\(\min\),这样最后还会求出一个\(f_{ 0 , 0 }\),比较一下大小然后继续做二分.

等一下,为撒子这样是收敛的呢?

首先,根据这个题,期望肯定是存在的.

我们注意到我们一开始二分的\(f_{ 0 , 0 }\)越大,最后的答案就越大,但是增长的一定会变慢.换句话说,最后的答案关于我们二分的值的关系应该是一个上凸的函数(增长的时候会被取\(\min\)的另一项限制住,但原本应该是没被限制的),于是这个时候得到的答案如果比二分的答案更小,那我们就应该调小一点.

换句话说,当我们二分答案的时候,应该判断函数凸性.wqs二分也是这个道理:二分答案并判断答案是否满足条件.

Example2(猎人杀)

先做一步转化:如果做期望的时候,会有一些操作变得不能做,那我们改为:先随便选,如果选到不合法的操作就跳过,概率和期望都不会变.

offline

Example3(AGC019F)

人类智慧题…

首先注意到策略显然是每次选剩下最多的答案.

我们画一张\(n \times m\)的图(假设\(n \geq m\)),其中格点\(( a , b )\)表示现在还剩\(a\)个Yes,\(b\)个No.我们再把我们的策略用图上的有向边表示.我们先考虑转化为计数问题,那答案显然就是所有从\(( n , m )\)走到\(( 0 , 0 )\)的路径与我们图上有向边的交的大小总和.

然后咧?

我们注意到这张图长得太规律了,换句话说,如果我们把图的左半部分沿着直线\(y = x\)翻折(路径也跟着翻折),注意到对着这张图做仍然是一样的!

所以呢?由于从\(( n , m )\)走到\(( 0 , 0 )\)一定会经过\(n\)条有向边,所以期望贡献一定要加上一个\(n\).而如果我走到了直线\(y = x\)上,那接下来的贡献是\(\frac{ 1 }{ 2 }\).我们只需要枚举一下走到了多少次即可.

数据随机下的性质

  1. 随机树树高为\(\sqrt{ n }\).

  2. 点的度数期望为\(\log n\).

  1. 数字的期望因数个数为\(\log V\).

序列

  1. 随机序列的LIS长度期望为\(O ( \sqrt{ n } )\).

随机化算法的分类

数值概率算法

即通过随机选取元素从而求得在数值上的近似解.较之于传统算法,其运行速度更快,而且随着运行时间的增加,近似解的精度也会提高.在不可能或不必要求出问题的精确解时,可以使用其得到相当满意的近似解,如随机撒点法(近似求难以计算的图形面积).

Monte Carlo算法

总是能在确定的运行时间内出解,但是得到的解有一定概率是错的.通常出错的概率比较小,因此可以通过反复运行算法来得到可以接受的正确率.

求解最优化问题的Monte Carlo算法

事实上,大部分最优化问题都可以转化为判定性问题:也就是判定一个解是否是最优解,因此我们接下来基本都是讨论的求解判定性问题的Monte Carlo算法.

求解判定性问题的Monte Carlo算法
  1. 假倾向的Monte Carlo算法:当这类算法的返回值为假的时候,结果一定正确,但返回值为真的时候则有一定概率错误.

  2. 真倾向的Monte Carlo算法:当这类算法的返回值为真的时候,结果一定正确,但返回值为假的时候则有一定概率错误.

  3. 产生双侧错误的Monte Carlo算法:无论返回值为什么都有概率出错.基本不会使用.

以下讨论的Monte Carlo算法均为产生单侧错误的Monte Carlo算法.

正确率与复杂度

显然,如果我们有一个单词正确率为\(p\),时间复杂度为\(O ( f ( n ) )\)的算法,我们运行其\(k\)次,则正确率为\(1 - ( 1 - p )^k\),时间复杂度为\(O ( kf ( n ) )\).

算法设计思路1

我们来总结一下通常的Monte Carlo算法的设计思路:

设计一个能解决问题的确定性算法
  1. 这个算法需要枚举一些元素.

  2. 设这个算法的复杂度为\(O ( f ( n ) g ( n ) )\),其中\(f ( n )\)为枚举部分的复杂度,\(g ( n )\)为单词枚举中计算所需的复杂度.大部分情况下应保证\(g ( n )\)不会很大.

向算法引入随机化优化复杂度
  1. 随机化寻找元素来降低复杂度.

  2. 计算随机化情况下的正确率以及复杂度.

算法设计思路2
设计一个能解决问题的确定性算法
  1. 这个算法需要用到一个或多个传入的元素.

  2. 这个元素的值不应该依赖于输入数据.

  3. 我们可以通过check这个元素来得到与答案有关的信息.

向算法引入随机化优化复杂度
  1. 随机这个元素.

  2. 计算随机化情况下的正确率以及复杂度

Example
Example 1(Millar-Rabin算法)

Example2(CodeChef MSTONE)

平面上有\(n\)个互不重合的点,已知存在不超过\(7\)条直线可以覆盖全部的点,问在平面上作一条直线,最多能覆盖多少个点.\(n \leq 10000\).

考虑一个朴素的暴力:枚举两个点,确定一条直线,然后判断多少个点在这条直线上.但是这样复杂度是\(O ( n^3 )\)的.

考虑加入随机化.我们不妨每次随机两个点,注意到存在七条直线覆盖全部的点,那覆盖点最多的直线覆盖的点数一定不少于\(\lceil \frac{ n }{ 7 } \rceil\)个点.换句话说,我们随机一个点,这个点在这条直线上的概率是\(\frac{ 1 }{ 7 }\),因此随机两个点确定这条直线的概率为\(\frac{ 1 }{ 49 }\).随机\(1000\)次,错误概率为\(1 - ( \frac{ 48 }{ 49 } )^{ 1000 }\),是很小的.

Example3(CF364D Ghd)

给定一个长度为\(n\)的序列,要求找出一个长度大于等于\(\frac{ n }{ 2 }\)的子序列,使这个子序列中所有数的\(\gcd\)最大,求最大的\(\gcd\).\(n \leq 10^6\),\(a_i \leq 10^{ 12 }\).

注意到我们随机一个数,这个数在最终答案中的概率是\(\frac{ 1 }{ 2 }\).我们不妨直接随机这个数,然后枚举它的因子,判断每个因子在序列中的出现次数即可.但是这样单次复杂度\(O ( n \sqrt{ a } )\),好像不太能过.

冷静一下,我们不妨将这\(\sqrt{ a }\)个质因子全都存下来,然后将\(n\)个数也全都存下来,做狄利克雷后缀和即可.不过直接做可能还需要离散化/map,我们考虑先把所有数与我们随机到的那个数取一个\(\gcd\),这样所有数就都是这个数的因子,可以使用大小因子分别编号来实现.

Example4([POI2014]Couriers)

给定长度为\(n\)的序列\(a\),有\(m\)次询问,每次给定一个区间\([ l , r ]\),问\(a [ l , r ]\)中是否存在出现次数严格大于其它所有数出现次数之和的数,如果存在请输出.\(( n , m \leq 500000 , 1 \leq a_i \leq n )\).

先存下来每个位置的数是第几次出现,我们就可以利用二分快速找到一个区间内某个数出现次数.接下来只需要随机化找这个区间内某个数并判断是否满足条件即可.

Example5([NOI2013] 向量内积)

先考虑\(k = 2\)的情况:

首先,我们自然可以枚举一个向量\(A\)并判断它与其它向量的内积,这样复杂度为\(O ( n^2 d )\).

冷静一下,这个过程其实就是一个矩阵乘法的过程:我们设\(A = \begin{bmatrix}\vec{ a_1 } , \vec{ a_2 } , . . . , \vec{ a_n }\end{bmatrix}\),那我们要验证的无非是\(B = AA^T\)中是否存在一个不在主对角线上的元素\(B_{ i , j }\)\(\mod 2\)意义下为\(0\).

这咋做啊?我们冷静一下,构造一个矩阵\(C\),其中\(C\)的主对角线元素与\(B\)相同,而其他元素全是\(1\).接下来我们要做的无非是找到\(B\)\(C\)不同的地方.

这咋办呢?我们考虑这么一点:如果\(B = C\),那么对于任意一个\(X_{ m \times n }\)都应该满足\(XB = XC\),取\(m = 1\),我们的问题就转化为:是否能找到一个\(X\),使得\(XB \ne XC\)?这显然可以随机化.计算前者的复杂度为\(O ( nd )\),后者由于\(C\)很特殊,可以在\(O ( n )\)的时间内求出.这样我们就保证了算法复杂度上的合理性.

接下来,我们要证明其正确率上的合理性.这个算法显然是单侧错误的Monte Carlo算法.问题在于正确率:

\(D = B - C\),若返回相等但实际上不相等,则\(D\)中至少存在一个不为\(0\)的数字,假设\(D_{ i , j } \ne 0\).我们令\(E = X \times D\),那么只有当\(E\)是零向量时才会错误.而\(E_j = \sum_{ k } X_k D_{ k , j }\),不难解得:\(E_i = - \frac{ 1 }{ D_{ i , j } } \sum_{ k \ne i } X_k D_{ k , j }\),也就是说如果\(X\)的其它位置都确定了,那么\(E\)只有一种取值会返回错误.由于\(k\)一共就俩取值,所以正确率至少\(\frac{ 1 }{ 2 }\).

至于找到答案:我们找到一个不为\(0\)\(E_i\),那么一定存在一组解包含了第\(i\)个向量,只需枚举另一个向量检验就行,复杂度\(O ( nd )\).

\(k = 3\)的话,我们注意到\(\mod 3\)意义下,\(1\)\(2\)的平方都是\(1\).考虑\(\sum_{ j } B_{ i , j }^2 X_j = \sum_{ j } B_{ i , j } X_j B_{ h , i }^T\),大概做做.

Las Vegas算法(Sherwood算法)

总是能返回正确的结果,但是其运行时间不确定.对于一些平均时间复杂度优秀,但是最坏情况下复杂度较高的确定性算法,通过引入随机函数,尝试减小最坏情况的可能性,以在期望意义下达到优秀的时间复杂度.

算法设计思路
设计一个能解决问题的确定性算法
  1. 这个算法需要枚举全排列.

  2. 通常,问题问的是要么只是可行解而不是最优解,要么最优方案特别多,总之要保证有用的排列个数不会太少

向算法引入随机化优化复杂度
  1. 随机化寻找排列来降低复杂度.

  2. 通常证明复杂度和正确率巨大麻烦,这里建议直接实践证明.

Example
快速排序算法

我们试图计算它的期望时间复杂度:

不妨设\(T ( n )\)表示对长度为\(n\)的序列运行快速排序算法所需的期望时间,我们有:

\[ \begin{aligned} T ( 0 ) & = 0 \\ T ( n ) & = n + \frac{ 1 }{ n } \sum_{ i = 0 }^{ n - 1 } ( T_i + T_{ n - i - 1 } ) \end{aligned} \]

做放缩(可能有些地方需要\(+ 1\)或者\(- 1\)或者加取整,但是问题不大,反正是期望):

\[ \begin{aligned} T ( n ) & = n + \frac{ 1 }{ n } \sum_{ i = 0 }^{ n - 1 } ( T_i + T_{ n - i - 1 } ) \\ & = n + \frac{ 2 }{ n } \sum_{ i = \frac{ n }{ 2 } }^{ n - 1 } ( T_i + T_{ n - i - 1 } ) \\ & = n + \frac{ 2 }{ n } \sum_{ i = \frac{ n }{ 2 } }^{ \frac{ 3 n }{ 4 } } ( T ( i ) + T ( n - i - 1 ) ) + \frac{ 2 }{ n } \sum_{ i = \frac{ 3 n }{ 4 } }^{ n } ( T ( i ) + T ( n - i - 1 ) ) \end{aligned} \]

由于\(T ( n ) \geq n\),所以对于\(\frac{ n }{ 2 } \leq i \leq j\),我们显然有:\(T ( i ) + T ( n - i ) \leq T ( j ) + T ( n - j )\).

因此:

\[ \begin{aligned} T ( n ) & \leq n + \frac{ 2 }{ n } \sum_{ i = \frac{ n }{ 2 } }^{ \frac{ 3 n }{ 4 } } ( T ( \frac{ 3 n }{ 4 } ) + T ( \frac{ n }{ 4 } ) ) + \frac{ 2 }{ n } \sum_{ i = \frac{ 3 n }{ 4 } }^{ n } ( T ( n - 1 ) + T ( 0 ) ) \\ & \leq n + \frac{ 1 }{ 2 } ( T ( \frac{ 3 n }{ 4 } ) + T ( \frac{ n }{ 4 } ) + T ( n - 1 ) ) \end{aligned} \]

我们要证明\(\exists c\),\(T ( n ) \leq cn \log n\),考虑使用数学归纳法,则:

\[ \begin{aligned} T ( n ) & \leq n + \frac{ 1 }{ 2 } ( \frac{ 3 cn }{ 4 } \log ( \frac{ 3 n }{ 4 } ) + \frac{ cn }{ 4 } \log ( \frac{ n }{ 4 } ) + c ( n - 1 ) \log ( n - 1 ) ) \\ & \leq n + c ( \frac{ 3 n }{ 8 } \log n - \frac{ 3 n }{ 8 } \log \frac{ 4 }{ 3 } + \frac{ n }{ 8 } \log n - \frac{ n }{ 4 } + \frac{ n }{ 2 } \log n ) \\ & = cn \log n + n ( 1 - \frac{ 3 c }{ 8 } \log ( \frac{ 4 }{ 3 } ) - \frac{ c }{ 4 } ) \end{aligned} \]

于是显然存在,假设成立.

一类由Monte Carlo算法改造而成的算法

对于一类一定有解的构造性问题,假设我们有一个正确率为\(p\),时间复杂度为\(O ( f ( n ) )\)的产生单侧错误的Monte Carlo算法,我们时图将其改造为Las Vegas算法,我们现在想知道它的期望复杂度.

设其期望运行\(k\)次,则:

\[ \begin{aligned} k & = \sum_{ i = 1 }^{ \infty } p ( 1 - p )^{ i - 1 } i \\ ( 1 - p ) k & = \sum_{ i = 1 }^{ \infty } p ( 1 - p )^i i \\ pk & = \sum_{ i = 2 }^{ \infty } p ( 1 - p )^{ i - 1 } = p \sum_{ i = 0 }^{ \infty } ( 1 - p )^i \\ k & = \frac{ 1 }{ p } \end{aligned} \]

则期望复杂度为\(O ( \frac{ f ( n ) }{ p } )\).

Example3(CF329C Graph Reconstruction)
Example4([Petrozavodsk Summer-2015. Moscow IPT Contest B]Game With A Fairy)

首先注意到一个问题:操作能得到的信息太少了,应该是没有什么确定性算法.因此考虑随机化,那就肯定要先将整个序列random_shuffle一下.

然后呢?我们考虑之后随机选取新序列的一个前缀询问,只要有大致的正确性/复杂性估计应该就是很正确的.

这里有一种方式:考虑这个前缀中第一个有宝藏的位置\(x_1\)和第二个位置\(x_2\),显然只要问到\([ x_1 , x_2 )\)是正确的.

考虑因为是随机,所以\(x_1 \times 2 \leq x_2\)的概率应当是不低的(事实上约为\(\frac{ 1 }{ 2 }\)),而此时的\([ x_1 , x_2 )\)中必有一个位置是二的整数幂,因此我们查询一个等比数列:\(1 , 2 , 4 , . . .\).每次random_shuffle后就查一次,就可以得到一个正确性较高的Las Vegas算法.

爬山与模拟退火

爬山

也就是随机一个起始的解,然后走向与其相邻的较大的解.

但是这样会卡在一个局部最优解上而得不到全局最优解.

于是我们就有了模拟退火算法.

模拟退火

简而言之,模拟退火就是以一定的概率跳到随机的不优秀的点,这样就避免卡在了局部最优解上.不妨设我们想找到最大解,如果要最小解那就稍微改改.

下面给出这个概率的公式:

\[ P = \begin{cases} 1 & E_{ t + 1 } > E_t \\ e^{ \frac{ E_{ t + 1 } - E_t }{ T } } & E_{ t + 1 } \leq E_t \end{cases} \]

具体流程是,先设定一个初始温度\(T_0\),降温速度\(k \in ( 0 , 1 )\),以及终止温度\(T_k\),每次操作后让\(T = kT\),直到其小于终止温度.

0%