简单的介绍一下以下几种数列极限的计算方法:
- 1.Toeplitz定理
- 2.Stolz定理
- 3.Wallis公式
- 4.Stirling公式
更新:
删去了其他比较trivial的排序,留下了算法竞赛中用的略微多的排序思维。
删掉了useless的排序方法(希尔等等)。
修正了代码语言,Java语言由于当时第一版所写的错误过多,因而删除,再加上在运行速度上不及C++。
是一种基于分治的排序方法。
对需要排序的区间[l,r]进行下面的操作:
(1) 如果区间长度小于等于1直接退出,否则在区间中选择一个数字x作为比较元素。
(2) 将大于x的数字放右边,小于x的数字放左边,等于x的可左可右,将x放在两组数字中间。
**(3)**此时x的位置确认,对其左右两边的区间分别进行递归即可。
1 | void quicksort(int l,int r) { |
是一种基于分治的排序方法。
对需要排序的区间[l,r]进行下面的操作:
(1) 如果区间长度小于等于1直接退出,否则将区间分为[l,m],[m + 1,r]两个部分,其中 m = (l + r) / 2。
(2) 递归对两个子区间进行归并排序。
(3) 将两个已经排好序的子区间进行合并。
1 | void mergesort(int l,int r) { |
计数排序适合于值域范围校的数字排序
(1) 统计每个数字出现了几次。
(2) 统计完每个元素的出现次数后,求一边前缀和,我们就知道了每个数字在排完序后的序列中出现位置的范围。
(3) 把数字填入对应的位置即可。
1 | #define endl "\n" |
将每个待排序的元素拆分成m个关键字,然后从后往前依次对这m个关键字进行排序。
特别的
(基数排序经常被用于进行字符串的排序,比如说后缀数组的核心就是基数排序)。
(1) 我们只要把数字按第 i 个及以后的关键字从小到大的顺序放到数组里,再做一次计数排序就好。
1 | int n, m, a[N + 1], sa[N + 1], v[N + 1], r[N + 1], c[10]; |
题目引入
$$\displaystyle\lim_{x\to0} \frac{1-\cos x \sqrt{\cos 2x}\sqrt[3]{\cos 3x}}{x^2}$$
(题源:2018年第十届非数竞赛第一大题第4小题)
首先预备知识:
$$1-\cos x \sim \frac{1}{2}x^2$$
$$\sqrt[n]{1+x}-1 \sim \frac{x}{n} $$
问题(欧拉-泊松积分): $$\int_0^{+\infty}{\mathrm{e}^{-x^2}}\mathrm{d}x$$
方法
1.极坐标变换
2.几何做法
3.几何做法(二)
4.不等式放缩+Wallis
5.变量代换