12.1_数论总结

来源:互联网 发布:马云在贵州大数据 编辑:程序博客网 时间:2024/05/19 12:14

(这周的题解周末补)
规划上所有的知识点都浅浅地过了一遍。

挑几点重要的写吧,知识点的笔记和重要的东西都记在自己的小本本上了,这里就给自己提一些容易混淆的问题。

线性基: 定义与其性质息息相关。
消成上三角(方便,简单)vs 消成对角线(逐位、互不影响)
贪心的原理:拟阵的证明。

集合S,若某个S的子集r不存在任何一个非空子集异或和0,则r∈I.下面我们证明二元组M=(S,I)是一个拟阵。
遗传性:设A∈I,则A是S的线性无关组,则A的任意非空子集均线性无关,即对A的任意子集B,B均线性无关,因此B∈I,证毕。
交换性:设A,B∈I,且|A|<|B|,我们要证明存在x∈B,使得A∪{x}∈I.利用反证法,假设对于任意x∈B-A,均有A∪{x}不属于I,则B-A中的元素均在A的异或空间中,可由A的子集异或和表示。
因此B中的元素都在A的异或空间中。那么必然有B的异或空间包含于A的异或空间。由|A|<|B|且A,B线性无关,显然矛盾。因此交换性存在,证毕。
从而我们可以使用贪心算法确定最优解。
——wyfcyx大佬博客

发现好像没有理解的太清楚,UPD一发:
以下是自己的证明,可能不是很严谨。
首先引用线性基的一些性质:

线性基能相互异或得到原集合的所有相互异或得到的值。
线性基是满足性质1的最小的集合
线性基没有异或和为0的子集。

证明是显然的:
1.相互异或不改变其异或出的值域。
2.考虑构造线性基的过程,当一个数不能被已有的基底异或出时,才把它加入线性基,这样就保证了第三点。
3.当且仅当一个数不能被表示时,才会被加入,这样能够保证是最小的集合。

首先,明确原来的S,是原来的数的集合,而r不存在任何一个非空子集异或和0,才有r∈I。
这样,对于上述假设,对于任意x∈B-A,均有A∪{x}不属于I,那么B-A中的元素均在A的异或空间中,可由A的子集异或和表示。
由于B与A的交集本身就可以由A表示,于是,B的异或空间被A的异或空间包含。
因为A,B本身就是不存在任何一个非空子集异或和0,可以由上述证明得知他们是最小的,
又因为B的异或空间被A的异或空间包含,且A,B线性无关,推出|A|>|B|,与|A|<|B|矛盾,于是原命题得证。

应用待补。

各种基础知识的扩展(exlucas,excrt…):
思考问题的转化,利用消去律等一些基础操作来把它变成熟悉的模型。
(必须要把这些东西的运用变得像呼吸一样自然啊…)

FFT:
感谢从多项式乘法到快速傅里叶变换
(顺便复习了矩阵乘法,矩阵乘法是个好东西)
式子要会手推。
注意精度,四省五入+0.5。

void FFT(Virt *f,int opt){    Virt* w; if(opt==1) w=omg; else w=_omg;    for(int i=0;i<len;i++) if(i<R[i]) swap(f[i],f[R[i]]);    for(int i=2;i<=len;i<<=1)    {        int l=i>>1;        for(int j=0;j<len;j+=i)        {            for(int k=0;k<l;k++)            {                Virt z=f[j+k+l]*w[len/i*k];                f[j+k+l]=f[j+k]-z;                f[j+k]=f[j+k]+z;            }        }    }    if(opt==-1) for(int i=0;i<len;i++) f[i].r=f[i].r/(double)len;}

杜教筛:
感谢浅谈一类积性函数的前缀和
前面的预备知识帮助我复习了很多关于卷积和反演的知识。
利用这些东西把之前不清不楚的东西都手动证明了一遍。
目前没有动手实际地A掉一道题,只是手推式子,于是题目待补。
然后很多基础的常用式子和转化技巧都不是很熟,于是还是做不来,做题做得头昏昏。

群论:浅浅地过基础知识

母函数还是没有去搞它。

旧知各自做了一道题左右,以回忆代码为主。

这一周学新东西还是学得非常开心。
手推一些东西是有相当的乐趣,
但是这周来说题目还是做少了,记录的一些题也只停留在看看推推的地步,觉得数论这一块还是需要更多时间。
周末还打算A两道左右杜教筛/反演的题,然后再看看FNT,然后线性基可以尝试一下难一点的题。

于是,结束。

原创粉丝点击