数学
快速幂
定义
快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。
原理
比如说计算2的13次方,常见的方法是连续乘2 13次,时间复杂度为O(n);
但是快速幂算法可以压缩到O(log₂N)。
具体算法是这样的 将13化成二进制数 即1101(8421就是这么皮)我们可以一眼看出来,但计算机就不行了,得帮它算。转过来一想,不就是要知道二进制每一位的值吗,话不多说看代码(talk is cheaper,show me your code)
int b=13;
while(b>0){
//判断b的最后一位
if(b&1) {
}
b=b>>1;//右移一位
}
那么知道每一位又有什么用呢,下面的公式就是快速幂的原理
比如说求a的b次方
//快速幂算法,代码虽短,技术含量不低哦
int quickpower(int a,int b){
int ans=1,base=a;
while(b>0){
if(b&1) ans=ans*base;
base=base*base;//基数自乘
b=b>>1;/右移一位
}
return 0;
}
调和级数
公式
欧拉推导过求调和级数有限多项式和的表达式为
已知
显然对于任意一个整数 k,当n足够大的时候Sn>k。
组合数学
数论
卡特兰数
卡特兰数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | … |
---|---|---|---|---|---|---|---|---|---|---|
值 | 1 | 1 | 2 | 5 | 14 | 42 | 132 | 429 | 1430 | … |
递推式
Catalan 数的常见公式:
常见问题
- 排队买票问题
有 2n个人排成一行进入剧场。入场费 5 元。其中只有 个人有一张 5 元钞票,另外 人只有 10 元钞票,剧院无其它钞票,问有多少中方法使得只要有 10 元的人买票,售票处就有 5 元的钞票找零? - 上班问题
一位大城市的律师在她住所以北 n个街区和以东 n个街区处工作。每天她走 2n个街区去上班。如果他从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路? - 出栈序列问题
一个栈(无穷大)的进栈序列为 有多少个不同的出栈序列?
洛谷 P1044 栈
#include <iostream>
using namespace std;
int n;
long long f[25];
int main() {
f[0] = 1;
cin >> n;
for (int i = 1; i <= n; i++)
f[i] = f[i - 1] * (4 * i - 2) / (i + 1);//卡特兰公式
cout << f[n] << endl;
return 0;
}
来源:CSDN
作者:Yun102400
链接:https://blog.csdn.net/qq_42188312/article/details/104218803