Zhang's Wikipedia

玩就玩大的

斐波那契 —— 矩阵形式推导

https://blog.csdn.net/lanchunhui/article/details/50569311 1. 矩阵形式的通项 (Fn+2Fn+1)=(1,1,10)⋅(Fn+1Fn)(Fn+2Fn+1)=(1,11,0)⋅(Fn+1Fn) \begin{pmatrix} F_{n+...

2018-07-07 17:16:40

阅读数:1724

评论数:0

数学归纳法证明时间复杂度

1. T(n)=1+∑j=0n−1T(j)T(n)=1+\sum\limits_{j=0}^{n-1}T(j)欲证明 T(n)=2nT(n)=2^n(为了简化问题的方便,这里忽略了问题的背景信息,边界条件:T(0)=1T(0)=1)。已知边界条件:T(0)=20=1T(0)=2^0=1,由数学归纳...

2017-07-26 14:33:10

阅读数:474

评论数:0

中位数与顺序统计量

1. 基本定义在一个由 nn 个元素组成的集合中,第 ii 个顺序统计量(order statistic)是该集合中第 ii 小的元素。如,在一个元素集合中,最小值是第一个顺序统计量(i=1i=1),最大值是第 nn 个顺序统计量(i=ni=n)。用非形式化的描述来说,一个中位数(median)是...

2017-07-20 09:12:09

阅读数:308

评论数:0

渐进记号的相关证明(使用极限的方式)

极限的方式对渐进记号的相关证明方式更为直观简洁。

2017-02-28 22:14:42

阅读数:510

评论数:0

算法 Tricks(六)—— 判断一个数是否为完全平方数

int(sqrt(n)) * int(sqrt(n)) == n ? 1:0;

2016-11-17 17:29:32

阅读数:2652

评论数:0

算法 Tricks(五)—— 二进制逻辑运算

判断某数的二进制形式的某位(第 k 位)是否为 1,将其与 2k2^k 相与; 将某数的二进制形式的某位(第 k 位)置 1,将其与 2k2^k 相或;

2016-09-22 08:29:12

阅读数:635

评论数:0

算法 Tricks(四)—— 获取一个数二进制形式第一个不为 0 的位置

int n = ...; int flag = 1; while ((flag & n) == 0) flag <<= 1; // & 运算时,其实判断的是二者的二进制形式;

2016-09-21 23:33:50

阅读数:618

评论数:0

算法 Tricks(三)—— 判断序列是否为等差数列

判断一个数列不是等差数列,要比判断一个数列是等差数列比较容易。bool progressive = true; for (int i = 0; i < A.size() - 1; ++i){ if (A[i+1] - A[i] != A[1] - A[0]) prog...

2016-09-09 10:52:50

阅读数:1983

评论数:0

数的分解、分解质因数

def primes(n): x, l = 2, [] while True: if x > n: break if n % x == 0: n //= x l.appen...

2016-06-29 22:17:30

阅读数:704

评论数:0

二分法的常见应用

1. 计算 ana^n (数的幂)2. 计算 AnA^n (矩阵的幂)由于矩阵乘法具有结合律,因此 A4=A∗A∗A∗A=(A∗A)∗(A∗A)=A2∗A2A^4 = A * A * A * A = (A*A) * (A*A) = A^2 * A^2 我们可以得到这样的结论: 当n为偶数时,A...

2016-06-23 12:49:07

阅读数:1198

评论数:0

辗转相除将分数化为连分数形式

# 这里只考虑分子小于分母的情形, # 分子大于分母,也极为简单 def frac2continued(num, den): l = [] den, num = num, den while True: l.append(num // den) ...

2016-06-20 11:53:14

阅读数:1333

评论数:0

排列(permutation)的末尾 0 的个数

Anm A_m^n 套路还是一样,计算参与连乘的几个数(Anm=m⋅(m−1)⋯(m−n+1)A_m^n=m\cdot (m-1)\cdots (m-n+1))关于 5 这个因子的个数。那么又该如何计算呢?这里提供一个思路:就是把 m!m! 关于5 这个因子的个数减去 (m−n)!(m-n)! 关...

2016-06-19 22:14:08

阅读数:405

评论数:0

阶乘末尾 0 的个数

如求 100 的阶乘末尾 0 的个数;思路:一个数 n 的阶乘末尾有多少个 0 取决于从 1 到 n 的各个数的因子中 2 和 5 的个数, 而 2 的个数是远远多余 5 的个数的(每 5 个连续的数,如 3,4,5,6,7,当然会有 1 个是 5 的倍数,会有两个是 2 的倍数,), 因此求出 ...

2016-06-19 11:21:43

阅读数:540

评论数:0

二分查找 —— 有序数组不小于(不大于)某数的第一个(最后一个)元素

def bisearch(l, e, lo, hi): while lo < hi: mi = (lo + hi)//2 if e > l[mi]: lo = mi + 1 else: hi = mi return hi注...

2016-06-08 12:43:00

阅读数:2037

评论数:0

算法常用结论

1. 子序列(Subsequence)问题首先需要明确的是:问题求解的对象是否是连续子序列;序列,当然在具体编程实现时,就是数组,或者更高级一点的容器。已知,长度为 NN 的序列:1.1 要求连续长度为1 + 长度为 2 + 长度为 3 + … + 长度为 N1+2+3+⋯+N=N(1+N)2 1...

2016-06-08 09:37:32

阅读数:388

评论数:0

二分查找 —— 从三分支到二分支

二分查找,三分支向二分支的转变,降低的是时间复杂度的常系数。

2016-06-06 22:46:02

阅读数:499

评论数:0

算法 Tricks(二) —— 大数的处理

大数显然不能直接使用 int、long 等存储,会溢出。一种典型的大数的处理手段是使用数组模拟。int num[5] = {1, 2, 3, 4, 5}; int carrier = 0; int n = 6; // 12345 * 6 for (int i = 4; i >= 0...

2016-06-01 10:38:10

阅读数:322

评论数:0

算法 Tricks(一)—— 字符串和数组的翻转

所谓字符串和数组的翻转,其实是对应位的交换,考察的是下标之间的关系,要交换的下标的关系为: swap(s[i],s[n−1−i]) swap(s[i], s[n-1-i]) 也即下标之和为数组的长度减1,而与数组的长度为奇数还是偶数无关。void ReverseArray(int *A, i...

2016-06-01 10:11:21

阅读数:419

评论数:0

二分查找的变体 —— Fibnaccian Search

二分查找首先来看二分查找的基础版本:template <typename T> static int fibSearch(T *A, int lo, int hi, T const& e){}

2016-05-28 18:10:17

阅读数:749

评论数:0

斐波那契数列(面向对象版)

class Fib{ private: int f, g; public: Fib(int n){ f = 1; g = 0; while (g < n) next(); } int get() { ret...

2016-05-27 20:13:01

阅读数:623

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭