zoukankan      html  css  js  c++  java
  • 「学习笔记

    数学作业,要求我们写一篇数学读物的观后感(zzsz,OI-Wiki 他也是一本读物,对吧?)


    在这个寒假,我在网上阅读了 OI-Wiki 的数学数论部分(Link:https://oi-wiki.org/math/),对此深有感悟,因此来写一篇观后感。

    注:本文可能有些地方不严谨,因此如果错误请您谅解。

    贝尔数

    贝尔数又称作集合划分计数,oeis 中 有此记录(Link:https://oeis.org/A000110)。

    问题 求有多少种划分基数为 (n) 的集合的方法。

    贝尔数的定义如上所述,上面这个问题的答案即为 (B_n),第 (n) 个贝尔数。

    那么我们尝试来求解贝尔数。

    一个一个元素分开考虑,假设我们要分的集合是集合 (S),他的元素分别为 ({s_1,s_2,cdots,s_t})(t) 即为 (|S|)),那么考虑将新的元素 (s_{t+1}) 加入到这个集合时,对集合 (S) 划分个数的影响即为:

    • (s_{t+1}) 被单独划分时,剩下 (n) 个元素可以任意划分,套上贝尔数的定义,对答案的贡献即为:

    [inom n n B_t ]

    • (s_{t+1})(1) 个元素划分到一块时,剩下 (n-1) 个元素可以任意划分,对答案的贡献即为:

    [inom n{n-1} B_{t-1} ]

    • ……
    • (s_{t+1})(k) 个元素划分到一块时,剩下 (n-k) 个元素可以任意划分,对答案的贡献即为:

    [inom n{n-k} B_{t-k} ]

    如果我们把反过来的再正过来归纳为一个式子的话,那么 (B_n) 的推导结果也就出来了:

    [B_n=sumlimits_{i=0}^n inom n i B_i ]

    根据定义,(B_0=1),因为划分一个基数为 (0) 的集合只有一种方式。

    OI-Wiki 上还介绍了一种神奇的通过构建 Bell Triangle 的方式来求贝尔数。

    Bell Triangle 类似杨辉三角,假设第 (i) 行第 (j) 列的数为 (b_{i,j}),那么构建 Bell Triangle 的方式是:

    • (b_{1,1}=1)(b_{n,1}=b_{n-1,n-1} (n>1))
    • (b_{n,m}=b_{n,m-1}+b_{n-1,m} (m,n > 1))

    第一列的数即为贝尔数。

    类欧几里得算法

    类欧几里得算法致力于解决直线下整点个数问题,这种问题又能转化为一个固定的式子模式。

    问题 1 给定 (n,a,b,c),求 (f(n,a,b,c)),其中 (f) 函数定义为:

    [f(n,a,b,c)=sumlimits_{i=0}^n leftlfloordfrac{ai+b}{c} ight floor ]

    首先介绍一种 升维转换,比如说对于下面这个求和:

    [sumlimits_{i=1}^n p(i) ]

    当我们发现这个式子很难求的时候,可以把 (p(i)) 单独作为一维进行升维,即:

    [sumlimits_{i=1}^nsumlimits_{j=1}^{p(i)}1 ]

    那么我们将 (f) 函数也这么代入:

    [egin{aligned}f(n,a,b,c)&=sumlimits_{i=0}^nsumlimits_{j=0}^{leftlfloorfrac{ai+b}{c} ight floor-1}1end{aligned} ]

    然后我们将其进行 限制转换(又称 放缩),限制转换就是说比如说你有下面这个求和式子:

    [sumlimits_{i=1}^nsumlimits_{j=1}^i p(i,j) ]

    第二个求和有一个隐藏限制就是 (j le i)

    那么当我们交换两个求和时:

    [sumlimits_{j=1}^nsumlimits_{i=1}^n p(i,j) ]

    这个值就肯定和原来的值不相同,因为 (j) 的限制从 (j le i) 变成了 (j le n),因此如果想让上面两个式子相等,需要加一步进行限制:

    [sumlimits_{j=1}^nsumlimits_{i=1}^n p(i,j) imes[j le i] ]

    那么我们也将我们化简后的式子如此代入一下:

    [=sumlimits_{j=0}^{leftlfloorfrac{an+b}{c} ight floor-1}sumlimits_{i=0}^n left[j<leftlfloordfrac{ai+b}{c} ight floor ight] ]

    我们把限制条件 (j<leftlfloordfrac{ai+b}{c} ight floor) 尝试进行一下推导:

    [egin{aligned}j<leftlfloordfrac{ai+b}{c} ight floor& o j+1 le leftlfloordfrac{ai+b}{c} ight floor\& o j +1 le dfrac{ai+b}{c}\& o jc+c le ai+b\& o jc+c-b-1 < ai\& o leftlfloordfrac{jc+c-b-1}{a} ight floor<iend{aligned} ]

    将限制条件代入原式继续化简(即试着把第二个循环处理掉):

    [egin{aligned}sumlimits_{j=0}^{leftlfloorfrac{an+b}{c} ight floor-1}sumlimits_{i=0}^n left[leftlfloordfrac{jc+c-b-1}{a} ight floor<i ight]&=sumlimits_{j=0}^{leftlfloorfrac{an+b}{c} ight floor-1}n-leftlfloordfrac{jc+c-b-1}{a} ight floor\&=nleftlfloordfrac{an+b}{c} ight floor-fleft(leftlfloorfrac{an+b}{c} ight floor,c,c-b-1,a ight)end{aligned} ]

    回观原来的式子,我们需要用 (mathcal O(n)) 的时间复杂度求解,然而这个我们只需要用 (mathcal O(log n)) 的时间复杂度求解即可。

    问题 2 给定 (n,a,b,c),求 (f_1(n,a,b,c),f_2(n,a,b,c)),其中 (f_1,f_2) 函数定义为:

    [f_1(n,a,b,c)=sumlimits_{i=0}^nileftlfloordfrac{ai+b}{c} ight floor ]

    [f_2(n,a,b,c)=sumlimits_{i=0}^nleftlfloordfrac{ai+b}{c} ight floor^2 ]

    为了方便,(k_1=leftlfloordfrac{an+b}{c} ight floor)(k_2=leftlfloordfrac{ai+b}{c} ight floor)(k_3=leftlfloordfrac{jc+c-b-1}{a} ight floor)

    因为上面已经把具体步骤说的比较详细明白了,所以此处只把推导的结果给出。

    (f_1) 的推导过程:

    [egin{aligned}sumlimits_{i=0}^nileftlfloordfrac{ai+b}{c} ight floor & =sumlimits_{j=0}^{k_1-1}sumlimits_{i=0}^n (j<k_2) i\& = sumlimits_{j=0}^{k_1-1}sumlimits_{i=0}^n (i>k_3) i\& = sumlimits_{j=0}^{k_1-1}sumlimits_{i=k_3+1}^n i\& =sumlimits_{j=0}^{k_1-1}sumlimits_{i=1}^n i - sumlimits_{i=1}^{k_3}i\&=sumlimits_{j=0}^{k_1-1}dfrac{1}{2}n(n+1) - dfrac{1}{2}k_3(k_3+1)\& =dfrac{1}{2}left[k_1n(n+1)-sumlimits_{j=0}^{k_1-1}k_3^2-sumlimits_{j=0}^{k_1-1}k_3 ight]\& =dfrac{1}{2}[k_1n(n+1)-f_2(k_1-1,c,c-b-1, a)-f(k_1-1,c,c-b-1,a)]end{aligned} ]

    (f_2) 的推导过程:

    [egin{aligned}sumlimits_{i=0}^nleftlfloordfrac{ai+b}{c} ight floor^2&=sumlimits_{i=0}^nleft[left(2sumlimits_{j=1}^{k_2}j ight)-k_2 ight]\&=left(2 sumlimits_{i=0}^nsumlimits_{j=1}^{k_2}j ight)-f(n,a,b,c)\&=left[2left(dfrac{1}{2}nk_1(k_1+1)-sumlimits_{j=0}^{k_1-1}(j+1)k_3 ight) ight]-f(n,a,b,c)\&=nk_1(k_1+1)-2f_1(k_1-1,c,c-b-1,a)-2f(k_1-1,c,c-b-1,a)-f(n,a,b,c)end{aligned} ]

    (f_2) 的推导有一个公式需要使用:

    [egin{aligned}n^2&=2 imes dfrac{n(n+1)}{2} -n\&=left(2 sumlimits_{i=0}^ni ight)-nend{aligned} ]

    至此,(f,f_1,f_2) 的公式已推导完毕,这即为类欧几里得算法的具体内容(这三个函数可以互相递归,(mathcal O(log n)) 的时间复杂度),当然有一个拓展形式:

    问题 3 给定 (n,a,b,c,u,v),求 (f_3(n,a,b,c,u,v)),其中 (f_3) 函数定义为:

    [f_3(n,a,b,c,u,v)=sumlimits_{i=0}^ni^uleftlfloordfrac{ai+b}{c} ight floor^v ]

    这个内容需要用万能欧几里得算法进行解决,笔者实力 & 时间有限,因此只介绍到这里。


    Thanks for Watching!!

  • 相关阅读:
    生成word附件和word域动态赋值
    查询结果用Object类或其数组的List接收
    mustache多次渲染和多个赋值
    规范必备:枚举类型
    使用HttpClient发送请求、接收响应
    java接口对接——别人调用我们接口获取数据
    java接口对接——调用别人接口推送数据
    mustache语法
    Confluence 6 空间标识
    Confluence 6 从一个模板中创建一个空间
  • 原文地址:https://www.cnblogs.com/Shu-chong/p/14305397.html
Copyright © 2011-2022 走看看