文章目录
常见的渐进时间复杂度
O(1) < O( log 2 \log_2 log2n) < O(n) < O(n log 2 \log_2 log2n) < O( n 2 n^2 n2) < O( n 3 n^3 n3) < O( 2 n 2^n 2n) < O(n!) < O( n n n^n nn)
顺序表插入操作平均情况
- 因插入的位置有n + 1个,故插入一个元素的概率 p i p_i pi为 1 n + 1 \frac{1}{n + 1} n+11
- 移动的元素范围从第i个到第n个,总共要移动(n - i + 1)个元素,将其向后移动一个单位空间
∑ i = 1 n + 1 p i ( n − i + 1 ) \displaystyle\sum_{i=1}^{n+1}p_i(n-i+1) i=1∑n+1pi(n−i+1) = ∑ i = 1 n + 1 1 n + 1 ( n − i + 1 ) \displaystyle\sum_{i=1}^{n+1}\frac{1}{n + 1}(n-i+1) i=1∑n+1n+11(n−i+1) = 1 n + 1 ∑ i = 1 n + 1 ( n − i + 1 ) \frac{1}{n + 1}\displaystyle\sum_{i=1}^{n+1}(n-i+1) n+11i=1∑n+1(n−i+1) = 1 n + 1 n ( n + 1 ) 2 \frac{1}{n + 1}\frac{n(n+1)}{2} n+112n(n+1) = n 2 \frac{n}{2} 2n
顺序表删除操作平均情况
- 因总元素的个数位n,故删除一个元素的概率 p i p_i pi为 1 n \frac{1}{n} n1
- 移动的元素范围从第i + 1个到第n个(不包括要被删除的第i个元素),总共要移动(n - (i + 1)+ 1)个元素,将其向前移动一个单位空间
∑ i = 1 n p i ( n − i ) \displaystyle\sum_{i=1}^{n}p_i(n-i) i=1∑npi(n−i) = ∑ i = 1 n 1 n ( n − i ) \displaystyle\sum_{i=1}^{n}\frac{1}{n}(n-i) i=1∑nn1(n−i) = 1 n ∑ i = 1 n ( n − i ) \frac{1}{n}\displaystyle\sum_{i=1}^{n}(n-i) n1i=1∑n(n−i) = 1 n n ( n − 1 ) 2 \frac{1}{n}\frac{n(n-1)}{2} n12n(n−1) = n − 1 2 \frac{n - 1}{2} 2n−1
顺序表按值操作平均情况
- 最好时,一次就查询完毕;最坏时,n次才查询完毕
- 查询次数为 1, 2, 3, ⋯ \cdots ⋯, n-1,n;形成等差数列
∑ i = 1 n p i × i \displaystyle\sum_{i=1}^{n}p_i \times i i=1∑npi×i = ∑ i = 1 n 1 n × i \displaystyle\sum_{i=1}^{n}\frac{1}{n} \times i i=1∑nn1×i = 1 n n ( n + 1 ) 2 \frac{1}{n}\frac{n(n+1)}{2} n12n(n+1) = n + 1 2 \frac{n+1}{2} 2n+1
卡特兰数
- 通过入栈的不同元素总个数计算不同出栈序列的情况的个数
1 n + 1 C 2 n n \frac{1}{n+1} C_{2n}^n n+11C2nn
-如输入三个不同元素依次进栈,可以得到5个不同出栈序列的情况
对称矩阵压缩存储的首地址公式
按行优先 矩阵下标从1
- n阶矩阵,其下标范围为(1, n)
- 当 i ≥ \ge ≥ j 时 即在下三角区和主对角线上
- 第一行有1个,第二行有两个,第 i-1 行有 i-1 个
- 从1行到第i-1行个共有(i - 1 - 1 + 1)= (i - 1)行
- 等差公式:首项加末项乘项数除以2
- 因 a i , j a_i,_j ai,j在第i行上第j个,首地址需要减一,故 (j - 1 + 1 - 1) = j - 1
- L为单位空间大小,下同
- k表示为存放在一维数组第k个,下同
address( a i , j a_i,_j ai,j) = address( a 0 , 0 a_0,_0 a0,0) + k × \times × L
k = ( i − 1 ) ( 1 + i − 1 ) 2 + ( j − 1 ) \frac{(i-1)(1+i-1)}{2} + (j - 1) 2(i−1)(1+i−1)+(j−1) = i ( i − 1 ) 2 + ( j − 1 ) \frac{i(i-1)}{2} + (j - 1) 2i(i−1)+(j−1)
- 应对称关系, 当 i < j 时,将i与j对调就行
k = j ( j − 1 ) 2 + ( i − 1 ) \frac{j(j-1)}{2} + (i - 1) 2j(j−1)+(i−1)
按行优先 矩阵下标从0
- n阶矩阵,其下标范围为(0, n-1)
- 当 i ≥ \ge ≥ j 时 即在下三角区和主对角线上
- 第零行有1个,第一行有两个,第 i-1行有 i 个
- 从第0行到第i-1行个共有(i - 1 - 0 + 1)= i 行
- 因 a i , j a_i,_j ai,j在第i行上第j个,首地址需要减一,故 (j - 0 + 1 - 1) = j
address( a i , j a_i,_j ai,j) = address( a 0 , 0 a_0,_0 a0,0) + k × \times × L
k = i ( 1 + i ) 2 + j \frac{i(1+i)}{2} + j 2i(1+i)+j = i ( i + 1 ) 2 + j \frac{i(i+1)}{2} + j 2i(i+1)+j
- 应对称关系, 当 i < j 时,将i与j对调就行
k = j ( j + 1 ) 2 + i \frac{j(j+1)}{2} + i 2j(j+1)+i
下三角矩阵压缩存储的首地址公式
按行优先 矩阵下标从1
address( a i , j a_i,_j ai,j) = address( a 0 , 0 a_0,_0 a0,0) + k × \times × L
- 当 i ≥ \ge ≥ j 时 即在下三角区和主对角线上
k = i ( i − 1 ) 2 + ( j − 1 ) \frac{i(i-1)}{2} + (j - 1) 2i(i−1)+(j−1)
- 当 i < j 时 为同一常数,故在一维数组最后开辟一个单位空间,来存储常数
k = n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1)
按行优先 矩阵下标从0
address( a i , j a_i,_j ai,j) = address( a 0 , 0 a_0,_0 a0,0) + k × \times × L
- 当 i ≥ \ge ≥ j 时 即在下三角区和主对角线上
k = i ( i + 1 ) 2 + j \frac{i(i+1)}{2} + j 2i(i+1)+j
- 当 i < j 时 为同一常数,故在一维数组最后开辟一个单位空间,来存储常数
k = n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1)
上三角矩阵压缩存储的首地址公式
按行优先 矩阵下标从1
- n阶矩阵,其下标范围为(1, n)
- 第一行n个元素,第二行n-1个元素,第 i-1 行n-(i-1)+1个元素
- 从第1行到第i-1行,共i-1行
address( a i , j a_i,_j ai,j) = address( a 0 , 0 a_0,_0 a0,0) + k × \times × L
- 当 i ≤ \le ≤ j 时 即在下三角区和主对角线上
k = ( i − 1 ) ( 2 n − i + 2 ) 2 + ( j − i ) \frac{(i-1)(2n - i + 2)}{2} + (j - i) 2(i−1)(2n−i+2)+(j−i)
- 当 i > j 时 为同一常数,故在一维数组最后开辟一个单位空间,来存储常数
k = n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1)
按行优先 矩阵下标从0
- n阶矩阵,其下标范围为(0, n-1)
- 第零行n个元素,第一行n-1个元素,第 i-1 行(n-1)-(i-1)+1个元素
- 从第0行到第i-1行,共ii行
- 当 i ≤ \le ≤ j 时 即在下三角区和主对角线上
k = i ( 2 n − i + 1 ) 2 + ( j − i ) \frac{i(2n-i+1)}{2} + (j - i) 2i(2n−i+1)+(j−i)
- 当 i > j 时 为同一常数,故在一维数组最后开辟一个单位空间,来存储常数
k = n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1)
树
节点数
- 树的节点数 等于 树所有度的节点之和 等于 所有节点的度数之和加一 等于 分支数加一
- 度为m的树第 i 层最多 m i − 1 m^{i - 1} mi−1个节点
- 高度为h的m叉树至多有 m h − 1 m − 1 \frac{m^h - 1}{m - 1} m−1mh−1个节点
∑ i = 1 n m i − 1 \displaystyle\sum_{i=1}^{n} m^{i - 1} i=1∑nmi−1 = m 0 m^0 m0 + m 1 m^1 m1 + m 2 m^2 m2 + ⋯ \cdots ⋯ + m n − 1 m^{n-1} mn−1 = m 0 ( 1 − m h ) 1 − m \frac{m^0(1 - m^h) }{1 - m} 1−mm0(1−mh) = m h − 1 m − 1 \frac{m^h - 1}{m - 1} m−1mh−1
- 具有n个节点的m叉树的最小高度为[ log m ( n ( m − 1 ) ) + 1 \log_m{(n(m-1)) + 1} logm(n(m−1))+1] ,[]为取整符号
m h − 1 m − 1 \frac{m^h - 1}{m - 1} m−1mh−1 = n 求h
m h m^h mh = n(m-1) + 1 => log m m h \log_m^{m^h} logmmh = log m ( n ( m − 1 ) + 1 ) \log_m{(n(m-1) +1)} logm(n(m−1)+1)