英文缩写
%
计算机辅助制造(CAM,Computer Aided Manufacturing)
计算机辅助设计(Computer Aided Design)
计算机辅助教学(Computer Aided Instruction)
进制
%
x
B
=
(
x
)
2
x\ B=(x)_2
x B=(x)2
x
O
=
(
x
)
8
x\ O=(x)_8
x O=(x)8
x
D
=
(
x
)
10
x\ D=(x)_{10}
x D=(x)10
x
H
=
(
x
)
16
x\ H=(x)_{16}
x H=(x)16
排序
%
选择排序不稳定 ,希尔排序的时间复杂度为
Θ
(
n
1.3
)
∼
Θ
(
n
2
)
\Theta(n^{1.3})\sim\Theta(n^2)
Θ(n1.3)∼Θ(n2)。
给
n
n
n 个数排序的最坏情况下的最少比较次数为
⌈
log
2
n
!
⌉
\lceil\log_2 n!\rceil
⌈log2n!⌉。
给
n
n
n 个数排序的最坏情况下的最少交换次数为
n
−
1
n-1
n−1。
二叉树
%
由于度数=节点数-1
因而有
2
∗
n
2
+
n
1
=
n
2
+
n
1
+
n
0
−
1
2*n_2+n_1 = n_2 + n_1 + n_0 - 1
2∗n2+n1=n2+n1+n0−1
n
2
=
n
0
−
1
n_2 = n_0 -1
n2=n0−1
例 已知完全二叉树有
n
n
n 个点,求其叶子结点数量。
解 我们有
n
2
=
n
0
−
1
n_2=n_0-1
n2=n0−1 若
n
n
n 为奇数,则
n
1
=
0
n_1=0
n1=0,否则
n
1
=
1
n_1=1
n1=1。
因此当且仅当
n
n
n 为奇数时,叶子结点数量等于
n
+
1
2
\frac{n+1}{2}
2n+1。
当
n
n
n 为偶数时,叶子结点数量等于
n
2
\frac{n}{2}
2n。
卡特兰数
%
令
h
(
0
)
=
h
(
1
)
=
1
h(0)=h(1)=1
h(0)=h(1)=1,则卡特兰数第
n
n
n 项为
h
(
n
)
=
∑
i
=
0
n
−
1
h
(
i
)
h
(
n
−
i
−
1
)
=
∑
i
=
1
n
h
(
i
−
1
)
h
(
n
−
i
)
h(n)=\sum_{i=0}^{n-1}h(i)h(n-i-1)=\sum_{i=1}^nh(i-1)h(n-i)
h(n)=i=0∑n−1h(i)h(n−i−1)=i=1∑nh(i−1)h(n−i)
%
用生成函数等方法很容易推倒得到其另类递推式
h
(
n
)
=
C
2
n
n
n
+
1
h(n)=\frac {C_{2n}^n}{n+1}
h(n)=n+1C2nn
%
同理,递推关系的另类解为
h
(
n
)
=
C
2
n
n
−
C
2
n
n
−
1
h(n)=C_{2n}^n-C_{2n}^{n-1}
h(n)=C2nn−C2nn−1
出入栈问题
问 一个足够大的栈的进栈序列为 1 , 2 , 3 , ⋯ , n 1,2,3,⋯,n 1,2,3,⋯,n 时有多少个不同的出栈序列?
解 令答案为
h
(
n
)
h(n)
h(n),显然
h
(
0
)
=
h
(
1
)
=
1
h(0)=h(1)=1
h(0)=h(1)=1(没有元素时有一种方案,即出栈序列为空),不妨假设最后一个出栈的元素为
k
k
k,则可以发现,元素
1
∼
(
k
−
1
)
1\sim (k-1)
1∼(k−1) 在
k
k
k 元素进栈前就进栈并出栈,元素
(
k
+
1
)
∼
n
(k+1)\sim n
(k+1)∼n 在
k
k
k 元素进栈后出栈前,完成了进栈和出栈。
那么前
k
−
1
k-1
k−1 个元素进栈并出栈共有
h
(
k
−
1
)
h(k-1)
h(k−1) 种方案,后
n
−
k
n-k
n−k 个元素进栈共有
h
(
n
−
k
)
h(n-k)
h(n−k) 种方案,因而总共有
h
(
n
−
k
)
h
(
k
−
1
)
h(n-k)h(k-1)
h(n−k)h(k−1) 种方案,由于每个元素作为最后一个出栈的元素时,产生的出栈序列互不相同,因而有
h
(
n
)
=
∑
i
=
1
n
h
(
i
−
1
)
h
(
n
−
i
)
=
C
2
n
n
n
+
1
h(n)=\sum_{i=1}^nh(i-1)h(n-i)=\frac{C_{2n}^n}{n+1}
h(n)=i=1∑nh(i−1)h(n−i)=n+1C2nn
变1 比如 n n n 个人拿 5 5 5 元、 n n n 个人拿 10 10 10 元买物品,物品 5 5 5 元,老板没零钱,问有几种排队方式,使得店主能够完成找零?
解 处理拿着五元的人看做元素进栈,处理拿着十元的人当做出栈,那么原问题变成了经典的出入栈问题,那么对于同样的
n
n
n 个拿着5元的人,同样的
n
n
n 个拿着10元的人,共有
h
(
n
)
h(n)
h(n) 种排列方式。
特别地,对于不同的
n
n
n 个拿着
5
5
5 元的人,不同的
n
n
n 个拿着10元的人,共有
h
(
n
)
×
n
!
×
n
!
h(n)\times n!\times n!
h(n)×n!×n! 种排队方案。
变2 在n*n的格子中,只在下三角行走,每次横或竖走一格,有多少中走法?
解 可以发现,能向上走 i i i 步的条件是已经向右走了 i i i 步,因此将向右走看做入栈,向上走看成出栈,问题转换为出入栈问题,因而答案为卡特兰数。
二叉树构成问题
问 有 n n n 个结点,问总共能构成几种不同的二叉树。
解 令答案为
h
(
n
)
h(n)
h(n),枚左子树的节点数,得
h
(
n
)
=
∑
i
=
0
n
−
1
h
(
i
)
h
(
n
−
i
−
1
)
h(n)=\sum_{i=0}^{n-1}h(i)h(n-i-1)
h(n)=i=0∑n−1h(i)h(n−i−1) 因此
h
(
n
)
h(n)
h(n) 即为卡特兰数。
其他
区位码
区位码(10)=区号(10)*100+位号(10)
国标码=区位码+2020H
内码=国标码+8080H
内码=区位码+A0A0H
区号:30
位号:63
区位码:3063
国标码:9EBF
内码:bedF
IP地址分类
A类地址(可以在internet上跑):0开头
B类地址(可以在internet上跑):10开头
C类地址(局域网):110开头
D类地址(局域网):1110开头
二次探测法
第 i i i 次冲突寻找 i 2 i^2 i2
信号采样、量化
A/D转换器:模拟信号转换成数字信号
D/A转换器:数字信号转换成模拟信号
错排问题
设
f
(
n
)
f(n)
f(n) 为对
n
n
n 个元素的一个排列重新排列,每个元素都不在其原来的位置上的方案数量,则:
f
(
n
)
=
(
n
−
1
)
(
f
(
n
−
1
)
+
f
(
n
−
2
)
)
f(n)=(n-1)(f(n-1)+f(n-2))
f(n)=(n−1)(f(n−1)+f(n−2))(感性)证明:
设我们把第
n
n
n 个元素放在了第
k
k
k 个位置,有
n
−
1
n-1
n−1 种情况.
然后考虑放元素
k
k
k 。
- 把元素 k k k 放在位置 n n n,则由剩余元素的错排组成,即 f ( n − 2 ) f(n-2) f(n−2)
- 把元素 k k k 不放在位置 n n n,则对于元素 i ( i ≠ k ) i(i\not=k) i(i=k),不能放在位置 i i i,对于元素 k k k,不能放在位置 n n n,相当于 n − 1 n-1 n−1 个元素的错排问题,即 f ( n − 1 ) f(n-1) f(n−1)。
递归方程求解
% 一般地,形如 T ( n ) = a T ( n b ) + f ( n ) T(n)=aT\left(\frac{n}{b}\right)+f(n) T(n)=aT(bn)+f(n)
% 的方程为最基本的递归方程。
主定理
以下为假的主定理。
1. 若 $f(n)<n^{\log_b a}$,则 $T(n)=\Theta(n^{\log_b a})$。
2. 若 $f(n)>n^{\log_b a}$,且 $af\left(\dfrac nb\right)\leqslant cf(n)$,则 $T(n)=f(n)$。
3. 若 $f(n)=n^{\log_b a}$,则 $T(n)=\Theta(n^{\log_b a}\log n)$
4. 若 $f(n)$ 为非多项式,且不等于 $n^{\log_b a}$,则主定理不适用。
- 若存在常数 ϵ > 0 \epsilon>0 ϵ>0,使得 f ( n ) = O ( n ( log b a ) − ϵ ) f(n)=\text{O}(n^{(\log_b a)-\epsilon}) f(n)=O(n(logba)−ϵ),则 T ( n ) = Θ ( n log b a ) \text{T}(n)=\Theta(n^{\log_ba}) T(n)=Θ(nlogba)
- 若存在常数 k ⩾ 0 k\geqslant 0 k⩾0,使得 f ( n ) = Θ ( n log b a log 2 k n ) f(n)=\Theta(n^{\log_b a}\log^k_2 n) f(n)=Θ(nlogbalog2kn),则 T ( n ) = Θ ( n log b a log 2 k + 1 n ) \text{T}(n)=\Theta(n^{\log_b a}\log^{k+1}_2 n) T(n)=Θ(nlogbalog2k+1n)。
- 若存在常数 ϵ > 0 \epsilon>0 ϵ>0,使得 f ( n ) = Θ ( n ( log b a ) + ϵ ) f(n)=\Theta(n^{(\log _ba)+\epsilon}) f(n)=Θ(n(logba)+ϵ),同时存在常数 c < 1 c<1 c<1 和充分大的 n n n 使得 a f ( n b ) ⩽ c f ( n ) af\left(\dfrac nb\right)\leqslant cf(n) af(bn)⩽cf(n),则 T ( n ) = Θ ( f ( n ) ) \text{T}(n)=\Theta(f(n)) T(n)=Θ(f(n))。
例1 考虑二分的时间复杂度
T
(
n
)
=
T
(
n
2
)
+
Θ
(
1
)
\text{T}(n)=\text T\left(\frac n2\right)+\Theta(1)
T(n)=T(2n)+Θ(1)
解 考虑 Θ ( 1 ) = Θ ( n log 2 1 log 2 0 n ) \Theta(1)=\Theta(n^{\log_2 1}\log_2^0 n) Θ(1)=Θ(nlog21log20n),因而有 T ( n ) = Θ ( log 2 n ) \text T(n)=\Theta(\log_2 n) T(n)=Θ(log2n)
例2 考虑二叉树遍历的时间复杂度
T
(
n
)
=
2
T
(
n
2
)
+
Θ
(
1
)
\text{T}(n)=2\text T\left(\frac n2\right)+\Theta(1)
T(n)=2T(2n)+Θ(1)
解 考虑 Θ ( 1 ) = Θ ( n log 2 2 − 1 ) \Theta(1)=\Theta(n^{\log_2 2-1}) Θ(1)=Θ(nlog22−1),因而有 T ( n ) = Θ ( n ) \text T(n)=\Theta(n) T(n)=Θ(n)
例3 考虑多项式求逆的时间复杂度
T
(
n
)
=
T
(
n
2
)
+
Θ
(
n
log
2
n
)
\text{T}(n)=\text T\left(\frac n2\right)+\Theta(n\log_2 n)
T(n)=T(2n)+Θ(nlog2n)
解 考虑 Θ ( n log 2 n ) > Θ ( n log 2 1 ) \Theta(n\log_2 n)>\Theta(n^{\log_2 1}) Θ(nlog2n)>Θ(nlog21),且对于任意 c < 1 c<1 c<1 和足够大的 n n n,都有 Θ ( n 2 log 2 n 2 ) = Θ ( n 2 log 2 n − n 2 ) ⩽ c Θ ( n log 2 n ) \Theta\left(\frac n2\log_2 \frac n2\right)=\Theta(\frac n2\log_2 n-\frac n2)\leqslant c\Theta(n\log_2 n) Θ(2nlog22n)=Θ(2nlog2n−2n)⩽cΘ(nlog2n) 因而有 T ( n ) = Θ ( n log 2 n ) \text T(n)=\Theta(n\log_2 n) T(n)=Θ(nlog2n)。
例4 考虑分治FFT的时间复杂度
T
(
n
)
=
2
T
(
n
2
)
+
Θ
(
n
log
2
n
)
\text{T}(n)=2\text T\left(\frac n2\right)+\Theta(n\log_2 n)
T(n)=2T(2n)+Θ(nlog2n)
解 考虑
Θ
(
n
log
2
n
)
=
Θ
(
n
log
2
2
log
2
1
n
)
\Theta(n\log_2 n)=\Theta(n^{\log_2 2}\log_2^1 n)
Θ(nlog2n)=Θ(nlog22log21n),因而有
T
(
n
)
=
Θ
(
n
log
2
1
log
2
2
n
)
=
Θ
(
n
log
2
2
n
)
\text T(n)=\Theta(n^{\log_2 1}\log_2^2 n)=\Theta(n\log_2^2 n)
T(n)=Θ(nlog21log22n)=Θ(nlog22n)
期望
问 在一条长度为1的线段上任取两个端点,求线段长度的期望。(NOIP2018提高)
解 解法1:设线段端点的位置分别为
x
,
y
x, y
x,y,则线段的长度的期望等于在原线段上再取一点
z
z
z,使得
z
∈
[
x
,
y
]
z\in[x,y]
z∈[x,y] 的概率。
考虑
x
,
y
,
z
x,y,z
x,y,z 的排列,共有
3
!
3!
3! 种方案,由于
x
,
y
x,y
x,y 在线段上等概率取点,因此这些方案的概率也相等,其中
z
z
z 排在中间的方案有两种,因而答案为
2
/
(
3
!
)
=
1
/
3
2/(3!)=1/3
2/(3!)=1/3。
解法2:随机取
x
∈
[
0
,
L
]
x\in[0,L]
x∈[0,L],则线段0到
x
x
x 的长度期望为
∫
0
L
x
d
x
L
=
1
2
L
2
−
1
2
0
2
L
=
L
2
\frac{\int_0^Lx\ \text dx}{L}=\frac{\frac 12L^2-\frac 12 0^2}{L}=\frac L2
L∫0Lx dx=L21L2−2102=2L 然后我们考虑原问题的答案,在
[
0
,
1
]
[0,1]
[0,1] 上枚举断点
t
t
t,在前面的
0
∼
t
0\sim t
0∼t 之间选一个点
x
x
x,则
x
x
x 到
t
t
t 的期望等于0到
x
x
x 的答案,为
x
2
\frac {x}2
2x,出现概率为
x
1
\frac x1
1x,然后考虑在
t
∼
1
t\sim 1
t∼1 之间选右端点
y
y
y,则
t
t
t 到
y
y
y 的期望长度为
1
−
x
2
\frac {1-x}2
21−x,出现概率为
1
−
x
2
\frac {1-x}2
21−x,因而
x
x
x 到
y
y
y 的期望长度为
L
e
n
=
[
∫
0
1
(
x
2
×
x
1
+
1
−
x
2
×
1
−
x
1
)
d
x
]
÷
1
=
∫
0
1
(
x
2
−
x
−
1
2
)
d
x
=
(
1
3
×
1
3
−
1
2
×
1
2
−
1
2
)
=
1
3
\begin{aligned} Len&= \left[\int_0^1\left(\frac x2\times \frac x1+\frac {1-x}2\times\frac{1-x}1\right)\text dx\right]\div 1\\ &=\int_0^1 \left(x^2-x-\frac 12\right)\text dx\\ &=\left(\frac 13\times 1^3-\frac 12\times 1^2-\frac 12\right)\\ &=\frac 13 \end{aligned}
Len=[∫01(2x×1x+21−x×11−x)dx]÷1=∫01(x2−x−21)dx=(31×13−21×12−21)=31
康托展开
%
对于第
k
k
k 小的
n
n
n 个数的全排列,其康托展开值定义为
X
=
∑
i
=
1
n
a
i
(
i
−
1
)
!
X=\sum_{i=1}^na_i(i-1)!
X=i=1∑nai(i−1)! 可以证明,在数值上有
k
−
1
=
X
k-1=X
k−1=X。
%
如此,我们可以通过其康托展开值求出原来的排列。
例 求排列 1 5 3 4 2 6 的下 200 个排列。
解 首先求出给定排列的康托展开值,为 80,这说明这是第 81 个小的排列,换言之,我们需要求出第 200+81=281 小的排列,因此,其康托展开值位280.
先考虑第一位,
280
÷
(
5
!
)
=
2
…
…
40
280\div(5!)=2……40
280÷(5!)=2……40,因此说明第一位后面有2个比第一位小的数,因此第一位为3。
然后第二位,
40
÷
(
4
!
)
=
1
…
…
16
40\div(4!)=1……16
40÷(4!)=1……16,因此说明第二位后面有1个比第二位小的数,因此第二位为2。
第三位,
16
÷
(
3
!
)
=
2
…
…
4
16\div(3!)=2……4
16÷(3!)=2……4,因此说明第三位后面有2个比第三位小的数,因此第三位为5(2,3前面有了,后面有1,4 比 5 小,所以这一位是5)
第四位,
4
÷
(
2
!
)
=
2
…
…
0
4\div (2!)=2……0
4÷(2!)=2……0,因此说明第四位后面有两个比第四位小的数,因此第四位为6(2,3,5前面有了,后面必须有1,4两个比这个位置大,所以是6)
第五位,
0
÷
(
1
!
)
=
0
…
…
0
0\div (1!)=0……0
0÷(1!)=0……0,因此这一位是没有被填上的数中最小的那一个,所以为 1。
第六位,
0
÷
(
0
!
)
=
0
…
…
0
0\div (0!)=0……0
0÷(0!)=0……0,因此这一位是没有被填上的数中最小的那一个,所以为 4。
因此,求排列 1 5 3 4 2 6 的下 200 个排列为 3 2 5 6 1 4。
C++运算符优先级
大致等级划分:括号运算符
=
=
= 成员运算符
>
>
> 单目运算符
>
>
> 双目运算符
>
>
> 三目运算符
>
>
> 赋值运算符
>
>
> 逗号运算符。
双目运算符内部等级:
-
*
,/
,%
。乘除模。 -
+
,-
。加减。 -
<<
,>>
。位移。 -
>
,<
,>=
,<=
比较大小。 -
==
,!=
。判断相等。 -
&
。按位与。 -
^
。按位异或。 -
|
。按位或。 -
&&
。逻辑与。 -
||
。 逻辑或。
结合顺序:仅有双目运算符、括号运算符、成员运算符为从左向右,其余均为从右向左。
注意重载时逻辑与和逻辑或后,该运算符不再拥有短路的特性。
离散数学逻辑运算
A
∧
B
A∧B
A∧B,合取,等价于逻辑与。
A
∨
B
A∨B
A∨B,析取,等价于逻辑与。
¬
A
\neg A
¬A,表示逻辑非。
A
→
B
A→B
A→B,
A
A
A 蕴含
B
B
B,即
A
A
A 的正确必然导致
B
B
B 的正确。
图像存储
%
真彩色:一般占32位/像素,也叫全彩色,指的是RBG 8:8:8的图像。
伪彩色:将颜色做成颜色表,读取时直接读取对应信息,颜色会有所损失。
直接色:仍然使用查找表,但使用直接色在显示器上显示的彩色图像看起来更加真实自然。
排列组合
% 从 n n n 个数中选 k k k 个数(可以重复选)的方案数为 C ( n + r − 1 , r ) C(n+r-1,r) C(n+r−1,r)
第三代移动通信技术标准
- 中国移动发展产业化程度低的TD-SCDMA
- 中国联通合并中国网通发展WCDMA
- 中国电信收购联通CDMA网络后主力发展CDMA2000。
数据库
数据库有层次型数据库、关系型数据库、网状数据库。
层次数据库中数据的逻辑结构是树。
关系数据库中数据的逻辑结构是二维表。
网状数据库中数据的逻辑结构是链接指针。