每日一题: 一个组合恒等式和数列通项公式的证明

Posted IhopeIdieyoung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题: 一个组合恒等式和数列通项公式的证明相关的知识,希望对你有一定的参考价值。

快速求\\(1^2 + 2^2 + 3^2 + \\dotsb + n^2\\)模11的余数


我们来证明一下\\(1^2 + 2^2 + 3^2 + \\dotsb + n^2\\)的通项公式是\\(\\fracn(n+1)(2n+1)6\\), 然后就可以\\(O(1)\\)直接算这个式子:

Lemma 1: 对于任意的\\(n \\geqslant 2\\) 恒有 \\(\\tbinom22 + \\tbinom32 + \\tbinom42 + \\dotsb + \\tbinomn2 = \\tbinomn + 13\\)

Proof:
\\(n = 2\\)时显然成立,
假设当\\(n = k\\)时也成立, 当\\(n = k + 1\\)时,

\\[LHS = \\tbinom22 + \\dotsb + \\tbinomk2 + \\tbinomk+12 = \\tbinomk + 13 + \\tbinomk + 12 = \\tbinomk + 23\\]

(由帕斯卡恒等式得来), 证毕

Proof2:
由Lemma 1中式子, 直接展开, 有

\\[LHS = \\frac2^2-22 + \\frac3^2-32 + \\dotsb + \\fracn^2 - n2 = \\frac(n+1)(n-1)n6 = RHS\\]

式子变换就有,

\\[\\frac12 (2^2 + 3^2 + \\dotsb + n^2) = \\frac(n+1)(n-1)n6 + \\frac12(2 + 3 + \\dotsb + n)\\]

代数运算, 即可得到最终公式

[每日一题2020.06.14]leetcode #70 爬楼梯 斐波那契数列 记忆化搜索 递推通项公式

题目链接

题意 : 求斐波那契数列第n项

很简单一道题, 写它是因为想水一篇博客 勾起了我的回忆

首先, 求斐波那契数列, 一定 不 要 用 递归 ! 依稀记得当年校赛, 我在第一题交了20发超时, 就是因为用了递归, 递归时大量的出入栈操作必然比循环时间来得久

这题估摸着是每个测试样例就一个数, 记忆化的优势显示不出来, 但还是要认真看题 严格要求自己

  1. 记忆化搜索

vector<int> dp;
int climbStairs(int n) {
        if (dp.size() <= 2) {
            dp.push_back(1);
            dp.push_back(1);
        }
        if (n < dp.size())
            return dp[n];
        else {
            for (int i = dp.size(); i <= n; ++i) {
            	dp.push_back(dp[i-1] + dp[i-2]);
        	}
        }
        return dp[n];
}

定义一个外部变量保存dp的值, 这样做的好处是只有当n > 目前数组的长度后才需要考虑继续添加新项

  1. 通项公式

交完题去看题解发现居然有这种骚操作

首先, 斐波那契数列的递推方程是差分方程 :

[fleft( n ight) -fleft( n-1 ight) -fleft( n-2 ight) =0 ag{1} ]

其特征方程为 :

[oldsymbol{x}^2-oldsymbol{x}-1=0 ag{2} ]

解得 :

[oldsymbol{x}_1=frac{1+sqrt{5}}{2}, oldsymbol{x}_2=frac{1-sqrt{5}}{2} ag{3} ]

写出通解, 代入初值, 求得通项公式 :

[oldsymbol{f}left( oldsymbol{n} ight) =frac{1}{sqrt{5}}left[ left( frac{1+sqrt{5}}{2} ight) ^{oldsymbol{n}}-left( frac{1-sqrt{5}}{2} ight) ^{oldsymbol{n}} ight] ag{4} ]

然后直接输出就可了

int climbStairs(int n) {
        return (int)((double)1/(sqrt(5)) * (pow((1 + sqrt(5))/2, n + 1) - pow((1 - sqrt(5))/2, n + 1)));
}

以上是关于每日一题: 一个组合恒等式和数列通项公式的证明的主要内容,如果未能解决你的问题,请参考以下文章

斐波那契数列的通项公式及证明

斐波那契数列的通项公式及证明

数学归纳法

使用数学归纳法证明斐波那契数列通项公式

简单数学(组合数+求数列通项公式)

程序员的数学